Skip to content

onGetLegacyUserIdentity

获取APP原用户身份标识

该方法用于新版本游戏包获取原APP用户身份标识。主要用途是:新版本游戏启动时,原APP用户登录成功后,游戏需要获取原APP用户身份标识,用于后续游戏数据同步。


方法声明

java
/**
 * 当 SDK 请求获取旧版用户身份标识(Legacy User Identity)时触发。
 * 通常用于兼容旧版本系统或迁移存量用户数据。
 *
 * @param handle   用于向 SDK 返回处理结果的状态句柄。
 * @param dataJson 包含请求参数或上下文信息的 JSON 字符串。
 */
void onGetLegacyUserIdentity(SUDOPStateHandle handle, String dataJson);

运行行为

  1. 触发时机:当小游戏加载并尝试恢复用户的历史存档、战绩或道具,但发现当前登录体系与历史数据不匹配时,引擎会发起此请求。
  2. 参数解析dataJson 字段包含了游戏侧提供的上下文(如游戏内部的旧 ID 或特定的迁移标识符)。
  3. 异步反馈:App 接收到请求后,通过查询本地数据库或服务端接口找到对应的旧版标识,并利用 handle.success(json) 异步推回。

代码示例

实现旧版 ID 的查找与回传逻辑:

java
@Override
public void onGetLegacyUserIdentity(SUDOPStateHandle handle, String dataJson) {
    try {
        // 1. 解析请求参数(如果需要)
        JSONObject request = new JSONObject(dataJson);
        String userId = request.optString("userId");

        // 2. 模拟从 App 数据库获取该用户对应的旧版标识
        // 例如:旧系统使用的是 MD5 后的设备 ID 或自定义的原始 ID
        String legacyId = MyUserCenter.getLegacyIdByUserId(userId);

        // 3. 构造返回的 JSON
        JSONObject result = new JSONObject();
        result.put("legacyUserId", legacyId);

        // 4. 通过 handle 异步返回成功
        handle.success(result.toString());
        
    } catch (Exception e) {
        // 如果发生错误,返回失败状态
        handle.fail(SUDOP.ERR_UNKNOWN);
    }
}

注意事项

  • 兼容性保障:如果您的 App 是首次接入 Sud SDK 且没有历史遗留数据,可以在此方法中直接返回 handle.success("{}") 或当前的 userId
  • 非阻塞调用:由于涉及到身份查询,可能存在网络耗时。必须使用 handle 对象进行异步响应,严禁在回调方法内进行同步耗时操作。
  • 安全性:仅返回协议要求的标识符,不要在此接口中透传任何明文密码或敏感隐私信息。