使用聊天SDK API提供程序
使用聊天SDK API提供程序
聊天SDK API提供程序封装了聊天SDK的所有功能,从设置访问者信息到更高级的功能,如观察聊天期间可能发生的某些事件。
如果您希望构建自己的UI,您可以使用这些提供程序来实现功能,例如代表访问者发送消息。
使用API提供程序和聊天SDK
请注意,聊天SDK有自己的连接管理,基于统一SDK提供的UIViewController的生命周期。如果您同时使用聊天SDK和聊天API提供程序,这一点非常重要。聊天屏幕之外的连接生命周期的所有权掌握在您自己手中。
重要的是:在使用API提供程序之前,请确保调用连接
,并设置连接状态观察者来适当地处理连接状态。这是Chat正常工作所必需的。
chat.connectionProvider.connect ()
连接
可以在API调用之前或之后调用。这是因为所有api请求都进入一个操作队列。一旦建立了连接,请求将按顺序发送。
如果你需要确定一个api调用被调用了,你可以把它包装在一个一次性的连接观察中,像这样:
函数fireChatAPICalls() {
var token: ChatProvidersSDK.ObservationToken
token = Chat.connectionProvider?observeConnectionStatus{状态
保护状态。isConnected else {return}
Chat.profileProvider ? .addTags((“标记”))
Chat.profileProvider ?。setNote(”访客说”)
.cancel() //确保调用只发生一次
}
Chat.connectionProvider ? .connect ()
}
记得在任何将用户带回聊天屏幕的流之前调用disconnect。
“迅速
chat.connectionProvider.disconnect ()
这篇关于实现Chat v1消息计数器特性是一个很好的示例,说明如何在聊天屏幕之外利用聊天api。
访问提供程序
提供程序可以从闲谈,聊天
单例模式:
斯威夫特
Chat.accountProvider
Chat.connectionProvider
Chat.chatProvider
Chat.profileProvider
Chat.pushNotificationsProvider
Chat.settingsProvider
objective - c
ZDKChat.accountProvider
ZDKChat.connectionProvider
ZDKChat.chatProvider
ZDKChat.profileProvider
ZDKChat.pushNotificationsProvider
ZDKChat.settingsProvider
观察事件
提供程序允许您观察可能发生的某些事件。重要的是,如果你开始观察这些事件,你也要记得停止观察它们。
在您的设置中很可能会有多个ObservationToken对象。利用ObserveBehaviours集合将它们很好地分组。
斯威夫特
var token: ObservationToken?
init () {
let token = Chat.accountProvider?observeAccount {(account) in
//帐户模型已更改
}
}
deinit () {
令牌? .cancel ()
}
objective - c
@ property(原子,保留)ZDKObservationToken*令牌;
-(instancetype)初始化{
ZDKObservationToken*令牌=[ZDKChat.accountProvider observeAccount:^(ZDKChatAccount*账户){
//帐户模型已更改
}];
}
-(无效)dealloc{
[_token取消];
}
正在检查正在进行的聊天的信息
你可以在开始聊天前检查是否已经有正在进行的对话。
请注意:此API主动连接到已认证用户的web套接字。这种连接保持活跃。你应该打电话断开()
如果你不需要保持它的打开状态。
斯威夫特
Chat.chatProvider ?。getChatInfo{(result) in
切换结果{
case .success(let chatInfo):
如果chatInfo。isChatting {
//有一个正在进行的对话
}
Case .failure(let error):
//出错了
}
}
objective - c
[ZDKChat.getChatInfo:^(ZDKChatInfo*chatInfo,NSError*错误){
如果(chatInfo.isChatting){
///有一个正在进行的对话
}
}];
获取代理的可用性
您可以查看座席和部门的可用性:
斯威夫特
Chat.accountProvider ?。getAccount {(result) in
切换结果{
成功案例(让账户):
切换账户。accountStatus {
案例.online:
//有可用的代理
//然后您可以获得有可用代理的部门
let onlineDepartments = account.departments?.map{$0。状态== .online}
默认值:
//没有代理可用
}
Case .failure(let error):
//出错了
}
}
objective - c
[ZDKChat.accountProvider getAccount:^(ZDKChatAccount*账户,NSError*错误){
如果(账户){
开关(账户.accountStatus){
情况下ZDKChatAccountStatusOnline:
//有可用的代理
//然后您可以获得有可用代理的部门
NSArray*部门=账户.部门;
NSArray*onlineDepartments=[部门objectsAtIndexes:[部门indexesOfObjectsPassingTest:^保龄球(ZDKDepartment*部门,了NSUInteger idx,保龄球*停止){
返回部门.departmentStatus==ZDKDepartmentStatusOnline;
}]];
打破;
默认的:
打破;
}
}
}];
欲知有关账户
类,参见参考文档.
您还可以观察到代理可用性的变化:
斯威夫特
let token = Chat.accountProvider?observeAccount {(account) in
切换账户。{状态
案例.online:
//代理可用
打破
默认值:
//没有代理可用
打破
}
}
objective - c
ZDKObservationToken*令牌=[闲谈,聊天.accountProvider observeAccount:^(ZDKChatAccount*账户){
开关(账户.状态){
情况下ZDKChatAccountStatusOnline:
//代理可用
打破;
默认的:
//没有代理可用
打破;
}
}];
观察聊天设置的更改
您可以在聊天仪表板中收到任何更改设置的通知:
斯威夫特
let token = Chat.settingsProvider?observeChatSettings{(设置)in
开关设置。isFileSendingEnabled {
案例真实:
//启用附件
假:
//禁用附件
}
}
objective - c
ZDKObservationToken*令牌=[ZDKChat.settingsProvider observeChatSettings:^(ZDKChatSettings*设置){
如果(设置.isFileSendingEnabled){
//启用附件
}其他的{
//禁用附件
}
}];
欲知有关ChatSettings
类,参见参考文档.
观察连接状态
你可以监听连接状态的变化:
斯威夫特
let token = Chat.connectionProvider?observeConnectionStatus {(status) in
开关状态{
连接,连接:
打破
断开连接、重新连接、失败、不可达:
打破
}
}
objective - c
ZDKObservationToken*令牌=[ZDKChat.connectionProvider observeConnectionStatus:^(枚举ZDKConnectionStatus状态){
开关(状态){
情况下ZDKConnectionStatusConnected:
打破;
情况下ZDKConnectionStatusDisconnected:
打破;
默认的:
打破;
}
}];
观察聊天状态
您可以观察聊天的状态,并收集有关会话的信息:
斯威夫特
let token = Chat.chatProvider?{(chatState) in
//处理chatState更新
}
objective - c
ZDKObservationToken*令牌=[ZDKChat.chatProvider observeChatState:^(ZDKChatState*chatState){
//处理chatState更新
}];
的ChatState
对象具有以下属性:
财产 | 描述 |
---|---|
代理 | 聊天中的座席列表。 |
日志 | ChatLog项的数组,表示对话中的消息。 |
queuePosition | 访问者当前的队列位置。 |
isChatting | 来访者是否已经开始与代理人聊天。 |
部门 | 由来访者要求的部门。 |
chatSessionStatus | 当前聊天会话的阶段。看到参考文档. |
评级 | 访问者对当前会话的评分。 |
评论 | 访问者对当前会话的评价。 |
欲知有关ChatState
类,参见参考文档.
发送消息
斯威夫特
Chat.chatProvider ?。sendMessage(“帮助我。”)
Chat.chatProvider ?。sendMessage("Help me.") {(result) in
切换结果{
case .success(let messageId):
//消息发送成功
Case .failure(let error):
//出错了
//您可以轻松地检索messageId,以便在重试时使用
let messageId = error.messageId
}
}
objective - c
[ZDKChat.chatProvider sendMessage:@“嗨!”完成:^(NSString*消息id,NSError*错误){
如果(消息id){
//消息发送成功
}
}];
您可以使用以下方法尝试重新发送或删除失败的消息,这些方法采用chatLogId
作为论证:
斯威夫特
Chat.chatProvider ?。resendFailedMessage (withId:“消息id”)
objective - c
[ZDKChat.chatProvider resendFailedMessageWithId:@“消息id”完成:零];
斯威夫特
Chat.chatProvider ? .deleteFailedMessage (withId:“消息id”)
objective - c
[ZDKChat.chatProvider deleteFailedMessageWithId:@“消息id”完成:零];
发送附件
可以通过提供URL
.有两个闭包,第一个将随着上传的进度而触发,第二个将在上传完成时触发。的结果
传入将识别成功或失败。
斯威夫特
Chat.chatProvider ?。sendFile(url: fileURL, onProgress:{(进度)in
//用进度做点什么
}, completion: {result in
切换结果{
案例.success:
//发送附件
Case .failure(let error):
//出错了
}
})
objective - c
[ZDKChat.chatProvider sendFileWithUrl:url
onProgress:^(双进步){
//用进度做点什么
}完成:^(NSString*标识符,ZDKChatAttachmentMessage*附件,NSError*错误){
如果(附件){
//发送附件
}
}];
您可以使用以下方法重新发送文件,该方法接受chatLogId
作为论证:
斯威夫特
Chat.chatProvider ?。resendFailedFile(withId: "Id", onProgress: {(progress) in
//用进度做点什么
}, completion: {(result) in
//对结果执行操作
})
objective - c
[ZDKChat.chatProvider sendFileWithUrl:url
onProgress:^(双进步){
//用进度做点什么
}完成:^(NSString*标识符,ZDKChatAttachmentMessage*附件,NSError*错误){
如果(附件){
//重新发送附件成功
}
}];
结束聊天
您可以在任何时候结束聊天,并使用闭包来验证它是否成功。
斯威夫特
Chat.chatProvider ? .endChat ()
Chat.chatProvider ?。endChat {(result) in
切换结果{
案例.success:
//聊天成功结束
Case .failure(let error):
//出错了
}
}
objective - c
[ZDKChat.chatProvider endChat:^(BOOL didEndChat,NSError*错误){
如果(didEndChat){
//聊天成功结束
}
}];
添加和删除标记
附加一个特定的标签:
斯威夫特
Chat.profileProvider ? .addTags((“标记”))
objective - c
[ZDKChat.profileProvider addTags:@[@“标签”]完成:零];
移除已添加的标签:
斯威夫特
Chat.profileProvider ? .removeTags((“标记”))
objective - c
[ZDKChat.profileProvider removeTags:@[@“标签”]完成:零];
如果您需要清除已添加到聊天中的所有标签,则需要跟踪每个可能的标签:
下面是一个使用CaseIterable
:
斯威夫特
标签:String, CaseIterable {
情况下产品
情况下帮助
情况下移动
}
函数clearTags() {
let tags = tags . allcases .map{$0。rawValue}
Chat.profileProvider ? .removeTags(标签)
}
发送聊天评价
斯威夫特
Chat.chatProvider ? .sendChatRating(好)
objective - c
[ZDKChat.chatProvider sendChatRating:ZDKRatingGood完成:零];
发送聊天评论
斯威夫特
Chat.chatProvider ?。sendChatComment(“非常有帮助,谢谢!”)
objective - c
[ZDKChat.chatProvider sendChatComment:@“非常有帮助,谢谢!”完成:零];
发送脱机消息
此方法应仅用于将脱机消息发送到离线账户或部门。每次调用此方法时都会创建一个新的聊天。如果您的聊天帐户链接到一个支持帐户,每条消息将自动创建一个票证。
斯威夫特
let visitorInfo = visitorInfo (name: " name "),
电子邮件:“电子邮件”,
phoneNumber:“电话号码”)
let offlineForm = offlineForm (visitorInfo: visitorInfo,
departmentd:“部门ID”;
信息:“消息”)
.sendOfflineForm(offlineForm) {(result) in
切换结果{
案例.success:
//发送表单
Case .failure(let error):
//出错了
}
}
objective - c
ZDKVisitorInfo*visitorInfo=[[ZDKVisitorInfo alloc]initWithName:@“名称”
电子邮件:@“电子邮件”
phoneNumber:@“电话号码”];
ZDKOfflineForm*形式=[[ZDKOfflineForm alloc]initWithVisitorInfo:visitorInfo
departmentId:@“部门ID”
消息:@“消息”];
[ZDKChat.chatProvider sendOfflineForm:形式
完成:^(ZDKOfflineForm*offlineForm,NSError*错误){
如果(offlineForm){
//发送表单
}
}];
ObserveBehaviours
通常你会有多个订阅聊天观察器。存储引用和取消引用ObservationToken
S会使你的代码库膨胀。我们提供了ObserveBehaviours
集合,以便以简洁的方式处理这些令牌。
斯威夫特
最终类ChatWrapper {
var observebehaviors: observebehaviors ?
聊天:聊天
函数observeChat() {
observebehavior =
observeChatSettings (),
observeChatState ()
)
}
函数observeChatSettings() -> ObservationBehaviour {
chat_setingsprovider . observechatsettings{设置
//处理设置更新
} .asBehaviour ()
}
函数observeChatState() -> observationbehavior {
observechatstate{状态在
//处理chatState更新
} .asBehaviour ()
}
函数观察echat () {
observeBehaviours ? .unobserve ()
}
deinit {
unobserveChat ()
}
}