# 用户身份

当用户登录或退出应用时,请确保将相应的事件同步到 AIHelp,以确认或重置用户身份。

# API

# login

当用户登录应用时,请将用户 ID 同步给 AIHelp,以便 AIHelp 为其生成合法的身份令牌。

[AIHelpSupportSDK loginWithUserId:@"THIS IS YOUR USER ID"];

或者通过配置 LoginConfig 来实现其它能力,比如用户信息、企业级身份授权等:



 
 


AIHelpLoginConfigBuilder *builder = [[AIHelpLoginConfigBuilder alloc] init];
builder.userId = @"THIS IS YOUR USER ID";
builder.userConfig = ...;
builder.isEnterpriseAuth = ...;
[AIHelpSupportSDK login:builder.build];

# logout

当用户退出登录时,请调用此方法来清除当前登录的用户信息,以保证退出登录后游客身份的准确性。

[AIHelpSupportSDK logout];

# 事件

# 用户登录

你可以通过监听 AIHelpEventUserLogin 事件来了解当前用户的登录状态:

void loginListener(const char *jsonData, void (*ignored)(const char *data)) {
   // `jsonData`: { "code": 1, "message": "Success" } 
}
[AIHelpSupportSDK registerAsyncListener:loginListener eventType:AIHelpEventUserLogin];

其中,jsonData 中的 code 可选值为:

  • 1 表示登录成功;
  • -1 表示无效的 user Id;
  • -2 表示登录失败,具体原因可以查看 message 字段的说明;

# 企业授权

当通过 isEnterpriseAuth 启用企业授权时,调用 login API 会触发 AIHelpEventEnterpriseAuth 事件。

你需要监听该事件自行处理用户认证逻辑,之后将用户身份信息通过 ack 回调方法回传给 AIHelp。

void listener(const char *ignored, void (*ack)(const char *ackData)) {
    std::thread([ack]() {
        ack("{'token':'your async token'}");
    }).detach();
}
[AIHelpSupportSDK registerAsyncListener:listener eventType:AIHelpEventEnterpriseAuth];

出于兼容性的考虑,需要以 JSON 的格式将数据回传给 AIHelp。用户令牌以 token 字段进行存储。

# 参数释义

# loginConfig

  • 类型:AIHelpLoginConfig
  • 详情:必填参数。 登录可选配置项的封装。

# userId

  • 类型:NSString
  • 默认值:用户设备随机数
  • 详情:必填参数。 用户唯一标识,不可以设置为空字符串、0 或 -1。

# userConfig

  • 类型:AIHelpUserConfig
  • 默认值:nil
  • 详情:可选参数。 用户信息配置项,包括用户名、服务器 ID、用户标签以及其它自定义信息。除了在登录的时候,你还可以单独调用 updateUserInfo API 来更新用户信息。
  • 接入示例:
     
     
     
     
     



     


    AIHelpUserConfigBuilder *userBuilder = [[AIHelpUserConfigBuilder alloc] init];
    userBuilder.userName = @"AIHelper";
    userBuilder.serverId = @"s-101";
    userBuilder.userTags = @"vip1,suggestion";
    userBuilder.customData = @{@"total_recharge":@10000, @"level":@34};
    
    AIHelpLoginConfigBuilder *builder = [[AIHelpLoginConfigBuilder alloc] init];
    builder.userId = @"THIS IS YOUR USER ID";
    builder.userConfig = userBuilder.build;
    [AIHelpSupportSDK login:builder.build];
    

# isEnterpriseAuth

  • 类型:boolean
  • 默认值:false
  • 详情:可选参数。 开启企业授权后,需要注册 AIHelpEventEnterpriseAuth 事件处理认证逻辑
  • 接入示例:


     


    AIHelpLoginConfigBuilder *builder = [[AIHelpLoginConfigBuilder alloc] init];
    builder.userId = @"THIS IS YOUR USER ID";
    builder.isEnterpriseAuth = YES;
    [AIHelpSupportSDK login:builder.build];
    

# 其他

# 企业授权流程

为了最大限度地保证安全性,你可以选择自行处理用户身份的认证逻辑,即企业授权。

企业授权属于服务器验证,验证过程完全在服务端进行,SDK 和游戏客户端全程都不持有密钥。

企业身份认证的逻辑时序如下:

  1. 游戏客户端调用 SDK login 接口登录,指定 userId 并开启企业认证;

  2. SDK 会发送企业认证事件,客户端收到对应的回调后,请求游戏服务端接口对玩家做身份认证

  3. 游戏客户端收到服务端响应后,在企业认证事件回调里,利用 ack 回调将服务端颁发的 token 回传给 SDK 使用;

  4. SDK 用收到的 token 请求 AIHelp 服务端接口,服务端会对该 token 做二次验证,如果不是合法身份会返回登录失败;

# token 生成规则

在企业认证过程中,你需要在 AIHelp 后台获取密钥,并在服务端为用户颁发 token。

其中,token 生成规则如下:

  1. 使用 AIHelp 颁发的秘钥,在后台设置 - 应用设置 - SecretKey 处获取;

  2. 使用 HS256 签名算法,有效时间推荐 24 小时;

  3. 生成标准格式的 JWT,格式如下:

{
    "exp": 1718868267, // 过期时间戳(秒
    "iat": 1718781867, // 发布时间戳(秒)
    "nbf": 1718781867, // 生效时间戳(秒)
    "iss": "xxxx", // 自定义
    "jti": "947b3086-9aad-40d8-b5cf-752c9294f392" //  UUID
}
上次更新: 7/26/2024, 10:14:16 AM