对于应用程序中的嵌入式聊天功能,我们使用 Twilio 的 Programmable Chat
框架。 TwilioChatClient
创建如下:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if let token = utils.user_token {
setupTwilio(token: token)
}else {
utils.getAccessToken({
user_token in
if let token = user_token as String! {
self.setupTwilio(token: token)
}
})
}
}
private func setupTwilio(token: String) {
if client == nil {
client = TwilioChatClient(token: token, properties: nil, delegate: self)
}
}
根据 twilio 文档,我们需要 client?.channelsList()
来创建、获取、加入甚至删除 channel ,而 client?.channelsList()
我们得到总是零。
仅供引用,用于创建 client
的 token 是有效的并且 client
不是 nil。有人能告诉我为什么我们为 client?.channelsList()
得到的是 nil 吗?还是我们遗漏了什么?
另一个蹩脚的问题,TwilioIPMessagingClient
和 TwilioChatClient
之间有什么区别?我假设 TwilioChatClient
是 TwilioIPMessagingClient
的升级,但没有找到任何明确的文档。谁能给我一份迁移指南?
编辑
附言 我们确实在委托(delegate)方法中等待客户端被初始化;喜欢
extension ChatViewController: TwilioChatClientDelegate {
func chatClient(_ client: TwilioChatClient!, synchronizationStatusChanged status: TCHClientSynchronizationStatus) {
guard status != .completed else {
print("Show failed alert")
return
}
guard client.channelsList() != nil else {
print("channel list is nil");
return
}
// create and/or join channel
joinChatChannel();
}
}
但是流总是在第二个守卫
处失败。
最佳答案
一旦客户端到达 ,
状态。这向我表明可能存在一些权限问题或发生其他错误。client.channelsList()
应该是非零的。上面代码中的 completed
要进一步诊断此问题,在您的 Twilio 帐户上下文中查看应用程序的完整日志会很有帮助。我可以问你打开一个包含日志(https://support.twilio.com/hc/en-us/requests/new)的 Twilio 支持票并引用这个 SO 帖子吗?这将有助于将其发送给我们的团队,我们可以在这个问题上与您进行 1:1 的合作。我们将在最后更新这篇文章,以帮助其他人的决议。
此外,关于 TCHClientSynchronizationStatus
的快速说明 - 除了 .completed
之外还有其他非错误状态,仅提及这一点以便您知道客户端将通过多个状态在 .completed 之前并不一定表示错误,就像今天在您的代码片段中打印()一样。
关于swift - Twilio 聊天 - 客户端 channel 列表始终为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41951743/