# 用户身份

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

# API

# login()

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

AIHelpSupport::login("THIS IS YOUR USER ID");

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



 
 



LoginConfig loginConfig = LoginConfigBuilder()
        .setUserId("THIS IS YOUR USER ID")
        .setUserConfig(...)
        .setEnterpriseAuth(...)
        .build();
AIHelpSupport::login(loginConfig);

# logout()

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

AIHelpSupport::logout();

# 事件

# 用户登录

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

AIHelpSupport::registerAsyncEventListener(
        EventType::USER_LOGIN,
        [](const char *jsonData, Acknowledge ignored) {
            // `jsonData`: { "code": 1, "message": "Success" }
        }
);

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

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

# 企业授权

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

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

AIHelpSupport::registerAsyncEventListener(
        EventType::LOG_UPLOAD,
        [](const char *ignored, Acknowledge ack) {
            std::async(std::launch::async, [jsonData, ack]() {
                std::this_thread::sleep_for(std::chrono::milliseconds(1000));
                ack(EventType::ENTERPRISE_AUTH, "{\"token\":\"this is your token\"}");
            });
        }
);

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

# 参数释义

# loginConfig

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

# userId

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

# userConfig

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



     




    UserConfig userConfig = UserConfigBuilder()
            .setUserName("AIHelper")
            .setServerId("s-101")
            .setUserTags("vip1,suggestion")
            .setCustomData("{'total_recharge': 10000, 'level': 34}")
            .build();
    
    LoginConfig loginConfig = LoginConfigBuilder()
            .setUserId("THIS IS YOUR USER ID")
            .setUserConfig(userConfig)
            .build();
    
    AIHelpSupport::login(loginConfig);
    

# isEnterpriseAuth

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


     




    LoginConfig loginConfig = LoginConfigBuilder()
            .setUserId("THIS IS YOUR USER ID")
            .setEnterpriseAuth(true)
            .build();
    
    AIHelpSupport::login(loginConfig);
    

# 其他

# 企业授权流程

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

企业授权属于服务器验证,验证过程完全在服务端进行,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