# 用户身份
当用户登录或退出应用时,请确保将相应的事件同步到 AIHelp,以确认或重置用户身份。
注意
请确保调用 API 时同步给 AIHelp 的 userId 是唯一的有效值。
将 userId 设置为诸如空字符串("")、"null"、0 或 -1 等无效值,可能会导致客服功能异常。
# 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 和游戏客户端全程都不持有密钥。
企业身份认证的逻辑时序如下:
游戏客户端调用 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
}