Twilio聊天 - 客户频道列表总是零

时间:2017-01-31 07:17:35

标签: swift chat twilio twilio-api

对于应用中的嵌入式聊天功能,我们使用的是Twilio的def sftp_form(request): if request.method == 'POST': form = sftpForm(request.POST or None) if form.is_valid(): data = form.cleaned_data host = data['host'] usuario = data['usuario'] clave = data['clave'] print host print usuario print clave try: SFTP_bajar(host,usuario,clave) messages.success(request,' Success') return redirect('auth_login') except: messages.error(request, 'Error. Something Failed.') else: form=sftpForm() return render(request, 'sftp.html', {'form':form}) def SFTP_bajar(host,usuario,clave): try: transferencia = sftp.Connection(host=host, username=usuario, password=clave) remotepath= 'myremotepath' localpath="mylocalpath" print ('\n' + 'Success') except Exception, e: print str(e) 框架。 Programmable Chat创建如下:

TwilioChatClient

根据twilio文档,我们需要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) } } 来创建,获取,加入甚至删除频道,而我们得到的client?.channelsList()始终为零。 仅供参考,用于创建client?.channelsList()的令牌有效且client不为零。有人可以告诉我为什么我们client会变零吗?或者我们错过了什么?

另一个蹩脚的问题,client?.channelsList()TwilioIPMessagingClient之间有什么区别?我假设TwilioChatClientTwilioChatClient的升级,但没有找到任何明确的文档。任何人都可以给我一份移民指南吗?

修改

P.S。 我们确实等待客户端在委托方法中初始化;像

TwilioIPMessagingClient

但是流量总是在第二个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(); } } 失败。

4 个答案:

答案 0 :(得分:1)

一旦客户端在上面的代码中达到client.channelsList()状态,

. completed应该是非零的。这表明可能存在一些许可问题或其他错误。

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

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

答案 1 :(得分:0)

关于channelList为零。你在等待SDK完成init,并准备好使用吗?

您可以在此处查看如何执行此操作: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

希望有所帮助!

答案 2 :(得分:0)

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

  • 发送到后台线程
  • 调用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];    
        });
    });
    

答案 3 :(得分:0)

感谢 @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 |详细说明:{"代码":401,"状态":"'身份'不存在于令牌补助中#34;}

根据 rbeiter ,如果您使用Twilio的一个生成器构建令牌,可以通过在grants hash或object中设置身份密钥来解决此问题。