【问题标题】:Twilio chat - client channels list is always nilTwilio 聊天 - 客户频道列表始终为零
【发布时间】:2017-01-31 07:17:34
【问题描述】:

对于应用程序中的嵌入式聊天功能,我们使用 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() 来创建、获取、加入甚至删除频道,而我们得到的 client?.channelsList() 始终为零。 仅供参考,用于创建client 的令牌是有效的,client 不是零。有人能告诉我为什么client?.channelsList() 的结果为零吗?还是我们遗漏了什么?

另一个蹩脚的问题,TwilioIPMessagingClientTwilioChatClient 有什么区别?我假设TwilioChatClientTwilioIPMessagingClient 的升级版,但还没有找到任何明确的文档。谁能给我迁移指南?

编辑

附: 我们确实在委托方法中等待客户端初始化;喜欢

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();
   }
}

但是第二次流总是失败guard

【问题讨论】:

  • 您好,如何知道其他用户在线或离线。请问您有我吗?

标签: swift chat twilio twilio-api


【解决方案1】:

一旦客户端在上面的代码中达到. completed 状态,client.channelsList() 应该是非零的。这向我表明可能存在一些权限问题或其他错误。

要进一步诊断此问题,在 Twilio 帐户的上下文中查看应用程序的完整日志会很有帮助。我可以要求您打开包含日志 (https://support.twilio.com/hc/en-us/requests/new) 的 Twilio 支持票证并参考此 SO 帖子吗?这将有助于将其发送给我们的团队,我们可以在这个问题上与您进行 1:1 的合作。我们将在最后更新这篇文章以帮助他人。

另外,关于TCHClientSynchronizationStatus 的快速说明 - 除了.completed 之外,还有其他非错误状态,只需提及这一点,以便您知道客户端将在 .completed 之前通过多个状态,这不一定表示错误为今天在您的代码 sn-p 中打印()。

【讨论】:

  • 感谢您的回复。我们的一位开发人员已经就这个问题开了一张票。如果在我审查后看起来不合适,我将在那里添加完整的日志或打开一个新票。由于我们在周末,恐怕我必须在星期天去做。再次感谢您提供有关状态的说明。我们会为其他状态实现功能。我们现在只专注于让它发挥作用。
【解决方案2】:

关于 channelList 为零。您是否正在等待 SDK 完成初始化并准备好使用?

您可以在此处查看如何执行此操作:https://www.twilio.com/docs/api/chat/guides/initializing-sdk-clients#ios

是的,IP 消息传递已重命名为可编程聊天。您可以在此处找到 iOS 迁移指南:https://www.twilio.com/docs/api/chat/guides/migration-guide-ios-0160

希望有帮助!

【讨论】:

  • 请检查问题的编辑部分。谢谢。
【解决方案3】:

我遇到了同样的障碍。连接成功后,我能够在您的委托中按照以下步骤解决此问题:

  • 分派到后台线程
  • 调用 Thread.sleepForTimeInterval 等待 1 秒
  • 调度回主线程
  • 然后调用你的 loadChannels 方法

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{       
        [NSThread sleepForTimeInterval:1];
        dispatch_async(dispatch_get_main_queue(), ^{
            [self loadChannelList];    
        });
    });
    

【讨论】:

    【解决方案4】:

    感谢 @rbeiter 和 Twilio 的真诚支持。 问题是,我们在令牌信息中缺少identity。 Twilio 日志表明在

    2017-03-15 06:38:03.842117 TwilioChatApplication[1053:482861] TNTwilsockClientImpl[3]: 0x16e2b7000 | 03/15/06:38:03.841 |信息 | 2 | TNTwilsockClientImpl |关闭描述:{"code":401,"status":"'identity' not present in token grants"}

    根据 rbeiter 的说法,如果您使用 Twilio 的生成器之一来构建令牌,则可以通过在授权哈希或对象中设置身份密钥来解决此问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多