识别用户

一旦你初始化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/亚博ZendeskCoreSDKh>//在一个类中id<ZDKObjCIdentity>匿名ZDKObjCAnonymous allocinitWithName@“约翰鲍勃”// name是空的电子邮件@"(电子邮件保护)// email为空id<ZDKObjCIdentity>通过身份验证ZDKObjCJwt allocinitWithToken“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

             
-无效authenticationHasFailedNSNotification通知NSError错误NSError通知用户信息NSUnderlyingErrorKey如果错误! =开关错误代码情况下ZDKAuthenticationErrorCodeInvalidAccessToken打破默认的打破

在聊天SDK中重置用户的身份

您可以重置用户的标识,这将强制生成一个新的唯一标识符。这将导致它们与任何正在进行的聊天不关联,并且本地缓存将被丢弃。重要的这也将导致代理不再看到以前的聊天,因为他们将被识别为一个新的匿名用户。

斯威夫特

             
Chat.instance ?。resetIdentity {//标识重置

objective - c

             
ZDKChat实例resetIdentity//标识重置