识别用户
识别用户
一旦你初始化SDK你需要告诉Zendesk如何识别你的用亚博户。
支持SDK(必需)
Support SDK提供了两种身份验证选项:“匿名”身份和JWT。有关详细说明,请参见设置标识在支持SDK文档中。
简单地说,创建<代码data-garden-id="typography.code" data-garden-version="8.39.0" class="sc-eKYRIR sc-bTDOke bpSbjj iFHZBF">匿名代码>或者一个<代码data-garden-id="typography.code" data-garden-version="8.39.0" class="sc-eKYRIR sc-bTDOke bpSbjj iFHZBF">Jwt代码>在Zendesk支持管理的Mobile SDK页面上选择了哪种身份验证类型。亚博
导入必要的组件,并设置正确的标识类型:
斯威夫特
进口Zende亚博skCoreSDK
//在一个类中
let anonymous =身份。createAnonymous(name: "John Bob", // name可选
电子邮件:“(电子邮件保护)) //电子邮件是可选的
let authenticated =标识。createJwt(令牌:“unique_id”)
objective - c
#进口<亚博ZendeskCoreSDK/亚博ZendeskCoreSDK.h>
//在一个类中
id<ZDKObjCIdentity>匿名=[[ZDKObjCAnonymous alloc]initWithName:@“约翰鲍勃”// name是空的
电子邮件:@"(电子邮件保护)"];// email为空
id<ZDKObjCIdentity>通过身份验证=[[ZDKObjCJwt alloc]initWithToken:“unique_id”];
然后将该对象设置为<代码data-garden-id="typography.code" data-garden-version="8.39.0" class="sc-eKYRIR sc-bTDOke bpSbjj iFHZBF">亚博单例模式:
斯威夫特
亚博Zendesk.instance ? .setIdentity(匿名)
objective - c
[[ZDK亚博Zendesk实例]setIdentity:匿名];
一旦您设置了标识,请参见支持引擎有关启动<代码data-garden-id="typography.code" data-garden-version="8.39.0" class="sc-eKYRIR sc-bTDOke bpSbjj iFHZBF">MessagingViewController代码>的实例<代码data-garden-id="typography.code" data-garden-version="8.39.0" class="sc-eKYRIR sc-bTDOke bpSbjj iFHZBF">SupportEngine代码>.
聊天SDK(可选)
与Support和Answer Bot SDK一样,Chat SDK也支持使用JWT的匿名和身份验证用户。如果不使用JWT认证,会自动创建匿名身份。可以将访问者信息提供给聊天后端<代码data-garden-id="typography.code" data-garden-version="8.39.0" class="sc-eKYRIR sc-bTDOke bpSbjj iFHZBF">VisitorInfo代码>对于匿名会话。配置聊天会话<代码data-garden-id="typography.code" data-garden-version="8.39.0" class="sc-eKYRIR sc-bTDOke bpSbjj iFHZBF">VisitorInfo代码>对于经过身份验证的用户将被后端丢弃。
有关设置聊天身份验证的深入演练,请参见这篇文章.或者你可以看看样例应用程序.
要为最终用户创建JWT标识,首先需要符合<代码data-garden-id="typography.code" data-garden-version="8.39.0" class="sc-eKYRIR sc-bTDOke bpSbjj iFHZBF">JWTAuthenticator代码>对象的协议。符合协议的类必须包含<代码data-garden-id="typography.code" data-garden-version="8.39.0" class="sc-eKYRIR sc-bTDOke bpSbjj iFHZBF">getToken代码>函数。这是你应该从服务中检索JWT的地方:
斯威夫特
进口ChatProvidersSDK
最终类JWTAuth: NSObject, JWTAuthenticator {
func getToken(_ completion: @escaping(字符串?->无效){
//获得JWT令牌后调用完成块
完成(<“令牌”,< >“错误”)
}
}
objective - c
# < ChatProvidersSDK /进口ChatProvidersSDK.h >
@interface ZDKJWTAuth: NSObject
@end
@ implementation ZDKJWTAuth
- (void)getToken:(void (^)(NSString * _Nullable, nsserror * _Nullable))completion {
//获得JWT令牌后调用完成块
完成(<“令牌”>,< >“错误”);
}
@end
遵循协议后,将协议的实例传递给<代码data-garden-id="typography.code" data-garden-version="8.39.0" class="sc-eKYRIR sc-bTDOke bpSbjj iFHZBF">setIdentity代码>聊天实例的函数:
斯威夫特
let authenticator = JWTAuth()
Chat.instance ?。setIdentity(身份验证:身份验证)
objective - c
ZDKJWTAuthenticator*身份验证=[ZDKJWTAuthenticator新];
[ZDKChat.实例setIdentityWithAuthenticator:身份验证];
聊天SDK中的错误处理
在聊天连接到后端并验证身份验证令牌之前,聊天将调用getToken。
如果身份验证失败,聊天将作为匿名会话进行,并记录一个错误。如果SDK需要在聊天对话期间的任何时间重新验证用户,并且失败了,当前对话将结束,新的对话将以匿名会话的形式开始。在这两种失败情况下,用户在参与聊天的任何其他方看来都是未经过身份验证的。
您可以通过订阅带有name的通知来观察Chat SDK记录的身份验证错误<代码data-garden-id="typography.code" data-garden-version="8.39.0" class="sc-eKYRIR sc-bTDOke bpSbjj iFHZBF">闲谈,聊天NotificationAuthenticationFailed代码>.
身份验证错误 | 描述 |
---|---|
invalidAccountKey代码> |
向Chat SDK提供无效的帐户密钥 |
invalidAccessToken代码> |
调用getToken函数时提供了无效的访问令牌 |
invalidEmail代码> |
使用无效的电子邮件生成JWT令牌 |
invalidName代码> |
使用无效的名称生成JWT令牌 |
invalidSharedSecret代码> |
使用无效的共享密钥生成JWT令牌 |
externalUserIdHasChanged代码> |
提供的JWT中的外部用户id已更改 |
tokenHasExpired代码> |
提供的JWT令牌已经过期 |
斯威夫特
@objc func authenticationHasFailed(_ notification: notification) {
守卫让错误=通知。userinfo ?[NSUnderlyingErrorKey]吗?AuthenticationError else {return}
开关错误{
invalidaccesstoken (let令牌):
//指定的JWT令牌无效
@unknown默认值:
打破
}
}
objective - c
-(无效)authenticationHasFailed:(NSNotification*)通知{
NSError*错误=((NSError*)通知.用户信息[NSUnderlyingErrorKey]);
如果(错误! =零){
开关(错误.代码){
情况下ZDKAuthenticationErrorCodeInvalidAccessToken:
打破;
默认的:
打破;
}
}
}
在聊天SDK中重置用户的身份
您可以重置用户的标识,这将强制生成一个新的唯一标识符。这将导致它们与任何正在进行的聊天不关联,并且本地缓存将被丢弃。重要的这也将导致代理不再看到以前的聊天,因为他们将被识别为一个新的匿名用户。
斯威夫特
Chat.instance ?。resetIdentity {
//标识重置
}
objective - c
[ZDKChat.实例resetIdentity:^{
//标识重置
}];