onGetLegacyUserIdentity:dataJson
获取旧版用户身份标识
该方法用于新版本游戏包获取原APP用户身份标识。主要用途是:新版本游戏启动时,原APP用户登录成功后,游戏需要获取原APP用户身份标识,用于后续游戏数据同步。
方法声明
objectivec
/**
* 当 SDK 请求获取旧版用户身份标识(Legacy User Identity)时触发。
* 通常用于兼容旧版本系统或迁移存量用户数据。
*
* @param stateHandle 用于向 SDK 返回处理结果的状态句柄。
* @param dataJson 包含请求参数(如当前用户 ID)或上下文信息的 JSON 字符串。
*/
- (void)onGetLegacyUserIdentity:(id<SUDOPStateHandle>)stateHandle dataJson:(NSString*)dataJson;运行行为
- 追溯触发:游戏引擎在初始化或同步云端存档时,若检测到需要映射旧版账号,会发起此调用。
- 数据透传:
dataJson字段中包含了游戏侧提供的上下文(例如:游戏内部定义的旧账号索引或特定的迁移标记)。 - 异步决策:App 接收到请求后,可以进行异步查询(如访问 App Server 换取 Legacy ID),完成后通过
stateHandle闭环。 - 结果回传:App 需返回包含
legacyUserId的 JSON 字符串。如果该用户没有旧版标识,通常返回当前userId或空 JSON。
代码示例 (Objective-C)
实现旧版 ID 的查询与回传:
objectivec
- (void)onGetLegacyUserIdentity:(id<SUDOPStateHandle>)stateHandle dataJson:(NSString*)dataJson {
// 1. 解析请求参数
NSData *requestData = [dataJson dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *requestDict = [NSJSONSerialization JSONObjectWithData:requestData options:0 error:nil];
NSString *currentUserId = requestDict[@"userId"];
// 2. 模拟从 App 业务层获取该用户对应的旧版 ID
// 可能是 MD5 后的设备标识或旧系统的自增 ID
NSString *legacyId = [MyUserCenter getLegacyIdForUser:currentUserId];
// 3. 构造符合协议要求的返回结果
NSDictionary *result = @{
@"legacyUserId": legacyId ?: @""
};
// 4. 转为 JSON 并回传
NSData *resultData = [NSJSONSerialization dataWithJSONObject:result options:0 error:nil];
NSString *resultJson = [[NSString alloc] initWithData:resultData encoding:NSUTF8StringEncoding];
[stateHandle success:resultJson];
}注意事项
- 非阻塞要求:虽然 iOS 提供了强大的多线程能力,但请避免在该回调中执行同步的网络请求或耗时的数据库操作,推荐使用异步任务。
- 返回值规范:如果业务上不需要区分新旧 ID,建议直接回传当前的
userId,以确保游戏逻辑能够继续执行。 - stateHandle 闭环:必须确保调用
[stateHandle success:]或[stateHandle fail:]。如果方法执行完毕未给出明确反馈,SDK 内部可能会判定为请求超时,导致游戏流程卡死。