# 用户身份
当用户登录或退出应用时,请确保将相应的事件同步到 AIHelp,以确认或重置用户身份。
注意
请确保调用 API 时同步给 AIHelp 的 userId 是唯一的有效值。
将 userId 设置为诸如空字符串("")、"null"、0 或 -1 等无效值,可能会导致客服功能异常。
# 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 和游戏客户端全程都不持有密钥。
企业身份认证的逻辑时序如下:
游戏客户端调用 SDK login 接口登录,指定 userId 并开启企业认证;
游戏客户端收到服务端响应后,在企业认证事件回调里,利用 ack 回调将服务端颁发的 token 回传给 SDK 使用;
SDK 用收到的 token 请求 AIHelp 服务端接口,服务端会对该 token 做二次验证,如果不是合法身份会返回登录失败;
# token 生成规则
在企业认证过程中,你需要在 AIHelp 后台获取密钥,并在服务端为用户颁发 token。
其中,token 生成规则如下:
使用 AIHelp 颁发的秘钥,在后台设置 - 应用设置 - SecretKey 处获取;
使用 HS256 签名算法,有效时间推荐 24 小时;
生成标准格式的 JWT,格式如下:
{
"exp": 1718868267, // 过期时间戳(秒
"iat": 1718781867, // 发布时间戳(秒)
"nbf": 1718781867, // 生效时间戳(秒)
"iss": "xxxx", // 自定义
"jti": "947b3086-9aad-40d8-b5cf-752c9294f392" // UUID
}