Skip to content

registerWrappedClient

注册包装客户端

该方法用于将宿主应用的代理实现与特定的游戏句柄绑定。通过此接口,SDK 可以向宿主应用请求必要的交互实现(如 UI 展示、特定业务逻辑回调等)。


方法声明

java
/**
 * 静态注册包装后的客户端自定义功能模块。
 * @param handle 目标游戏的句柄实例,决定了该功能作用于哪个游戏对局。
 * @param client 实现标准包装协议(SUDOPWrappedClient)的对象实例。
 */
public static void registerWrappedClient(SUDRTGameHandle handle, SUDOPWrappedClient client) {
    // 内部实现通常会将 client 绑定到 handle 对应的 JS 运行环境
}

运行行为

  1. 句柄绑定:该方法是实例无关的(Static),但它通过第一个参数 handle 精确指定了功能注入的目标容器。
  2. 协议强制:要求 client 必须是 SUDOPWrappedClient 类型。这意味着开发者提供的原生方法必须遵循 SDK 定义的入参(通常是 String jsonParams)和出参(ISudCallback)规范。
  3. 自动路由:一旦注册,游戏端的 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 等操作,必须手动切回主线程