registerWrappedClient
注册包装客户端
该方法用于将宿主应用的代理实现与特定的游戏句柄绑定。通过此接口,SDK 可以向宿主应用请求必要的交互实现(如 UI 展示、特定业务逻辑回调等)。
方法声明
java
/**
* 静态注册包装后的客户端自定义功能模块。
* @param handle 目标游戏的句柄实例,决定了该功能作用于哪个游戏对局。
* @param client 实现标准包装协议(SUDOPWrappedClient)的对象实例。
*/
public static void registerWrappedClient(SUDRTGameHandle handle, SUDOPWrappedClient client) {
// 内部实现通常会将 client 绑定到 handle 对应的 JS 运行环境
}运行行为
- 句柄绑定:该方法是实例无关的(Static),但它通过第一个参数
handle精确指定了功能注入的目标容器。 - 协议强制:要求
client必须是SUDOPWrappedClient类型。这意味着开发者提供的原生方法必须遵循 SDK 定义的入参(通常是String jsonParams)和出参(ISudCallback)规范。 - 自动路由:一旦注册,游戏端的 JS 脚本即可通过 SDK 内部约定的命名空间(Namespace)直接发起对原生
client方法的异步调用。
代码示例
以下是在 Android 端通过静态方法注入自定义逻辑的典型实现:
java
// 1. 实现接口逻辑
public class MyUserClient implements SUDOPWrappedClient {
@Override
public void onGetLegacyUserIdentity(SUDOPStateHandle handle, String dataJson) {
// 返回旧版 用户身份信息
handle.success("{}");
}
@Override
public void onGetUserInfo(SUDOPStateHandle handle, String dataJson) {
// 返回昵称、头像
handle.success("{\"nickName\":\"昵称\", \"avatar\":\"头像\"}");
}
@Override
public void onGetUserProfile(SUDOPStateHandle handle, String dataJson) {
// 返回性别、年龄等
handle.success("{\"gender\":1, \"age\":18}");
}
}
// 2. 在获取到句柄后进行静态注册
SUDRTGameHandle gameHandle = ...; // 已创建的句柄
MyUserClient userClient = new MyUserClient();
// 调用静态工具类方法
SUDOP.registerWrappedClient(gameHandle, userClient);注意事项
- 单实例约束:通常一个
handle只能注册一个特定类型的WrappedClient。重复调用该静态方法可能会导致旧的客户端被替换。 - 混淆策略:由于涉及跨语言(Java/Kotlin 与 JavaScript)调用,请务必在
proguard-rules.pro中保持SUDOPWrappedClient及其实现类不被混淆。 - 异常捕获:在
onCall或对应的回调方法中,建议包裹try-catch块,防止因 JSON 解析异常导致游戏进程或插件容器崩溃。 - 线程切换:由于游戏回调通常发生在非 UI 线程,若要在
client中执行弹窗、显示 Toast 等操作,必须手动切回主线程。