TwilioChatClient没有来自channelWithSidOrUniqueName:completion:和g



我们在TwilioChatClient上遇到了一些问题,无法解决问题。在某些特定情况下,某个方法没有回调。例如:

twilioChatClient.channelsList()?.channel(withSidOrUniqueName: someSid, completion: { result, channel
//  this block is never called
}

但我们可以使用获取此通道

twilioChatClient.channelsList()?.subscribedChannels().first(where: { $0.sid == someSid || $0.uniqueName == someSid })

我们将POST请求发送到我们的服务器,在那里我们创建新的通道。因此,应用程序从响应中获取SID,并尝试连接到它在调用twilioChatClient.channelsList()?.channel(withSidOrUniqueName: "CH4155de0b7d374f34b027b5885b207ff9", completion...后的日志中,我们看到:

2021-01-13 18:15:51.167642+0200 <<<<TwilioChatClient: 0x28119a700>>>> -      | Chat IPM | channels: [api] get channel CH4155de0b7d374f34b027b5885b207ff9
2021-01-13 18:15:51.167875+0200 <<<<TwilioChatClient: 0x28119a700>>>> -      | Chat IPM | [Yq7OB] got channel from cache CH4155de0b7d374f34b027b5885b207ff9
2021-01-13 18:15:51.167928+0200 <<<<TwilioChatClient: 0x28119a700>>>> -      | Chat IPM | channels: got from cache CH4155de0b7d374f34b027b5885b207ff9

所以Twilio肯定找到了通道,但为什么不调用完成块呢?

之后,我们找到了直接从subscribedChannels((获取Channel的解决方法,但我们仍然遇到了该频道的另一个问题(从subscribedChannels(获取(

如果我们尝试使用从通道获取最后一条消息

guard channel.status == .joined, channel.synchronizationStatus == .all else {
return
}
channel.messages?.getLastWithCount(100, completion: { [weak self] resulte, twilioMessages in
//  this block is never called also
})

这看起来很奇怪。。。如果我们重新启动应用程序,这种情况只会发生在新的频道上——一切都按预期进行。

中没有错误

- (void)chatClient:(nonnull TwilioChatClient *)client errorReceived:(nonnull TCHError *)error;

这里没有更新:

- (void)chatClient:(nonnull TwilioChatClient *)client connectionStateUpdated:(TCHClientConnectionState)state

- (void)chatClient:(nonnull TwilioChatClient *)client synchronizationStatusUpdated:(TCHClientSynchronizationStatus)status;

我们还检查:chatClient.connectionState == .connected and chatClient.synchronizationStatus == .completed调用channel(withSidOrUniqueName:getLastWithCount(之前

我们使用的是最新版本4.0.2,它在3.1.1(Xcode 12.2(中的工作原理相同

更多信息。我们有用于显示AR(ARKit(的控制器。当场景被识别后,twilio停止工作。在viewDidLoad上,我们启动计时器,每秒执行两个动作

timer = Timer.scheduledTimer(withTimeInterval: 0.5, repeats: true, block: { [weak self] _ in
guard currentIndex < sids.count else { return }
guard isWorking == false else { return }
let sid = sids[currentIndex]
print("DEBUG: calling channelWithSidOrUniqueName (sid)")
chatClient.channelsList()?.channel(withSidOrUniqueName: sid, completion: { result, channel in
print("DEBUG: get completion from channelWithSidOrUniqueName (result.isSuccessful())")
guard let channel = channel else { return }
if channel.synchronizationStatus == .all {
print("DEBUG: synchronizationStatus == all")
}
if channel.status == .joined {
print("DEBUG: status == .joined")
}
lastChannel = channel
print("DEBUG: calling getLastWithCount (channel.sid)")
channel.messages?.getLastWithCount(5, completion: { result, _ in
print("DEBUG: get completion from getLastWithCount (channel.sid) (result.isSuccessful())")
currentIndex += 1
isWorking = false
})
})

如果一切正常,我们可以在等日志中看到

2021-01-14 13:12:47.435842+0200 <<<<TwilioChatClient: 0x282715790>>>> -      | Chat IPM | channels: [api] get user channels
DEBUG: calling channelWithSidOrUniqueName CH1425bfdb625945c1ab43bdb440e9ee2a
2021-01-14 13:12:47.437993+0200 <<<<TwilioChatClient: 0x282715790>>>> -      | Chat IPM | channels: [api] get channel CH1425bfdb625945c1ab43bdb440e9ee2a
DEBUG: get completion from channelWithSidOrUniqueName true
DEBUG: synchronizationStatus == all
DEBUG: status == .joined
DEBUG: calling getLastWithCount Optional("CH1425bfdb625945c1ab43bdb440e9ee2a")
2021-01-14 13:12:47.438580+0200 <<<<TwilioChatClient: 0x282715790>>>> -      | Chat IPM | [9HU8c] channel: [api] get messages
2021-01-14 13:12:47.438727+0200  <<<<TwilioChatClient: 0x282715790>>>> -      | Chat IPM | [9HU8c] messages: [api] getLastMessages, count 5
2021-01-14 13:12:47.438798+0200 <<<<TwilioChatClient: 0x282715790>>>> - 8564 | Sync TSCollectionItemQueryActivity(3) | constructed
2021-01-14 13:12:47.438865+0200  <<<<TwilioChatClient: 0x282715790>>>> - 8564 | Sync TSCollectionItemQueryActivity(3) | start 2999
2021-01-14 13:12:47.438977+0200 <<<<TwilioChatClient: 0x282715790>>>> - 2827 | Sync List | query page id: 2999
2021-01-14 13:12:47.439049+0200 <<<<TwilioChatClient: 0x282715790>>>> -      | Sync CoreDataActivity | query [1] /v3/Services/IS566142b988d74af6bba32abbdb4a7474/Lists/ES6bb26aae7efb48b49ec0b232e2b1ba65/Items?Order=desc
2021-01-14 13:12:47.439117+0200  <<<<TwilioChatClient: 0x282715790>>>> -      | Twilsock Message::makePayload | Payload size 0
2021-01-14 13:12:47.439234+0200 <<<<TwilioChatClient: 0x282715790>>>> -  289 | Twilsock Client | sendUpstreamMessage, id = RQ8bfe33a7e9ac4507a060e1332a533eff
2021-01-14 13:12:47.648547+0200 <<<<TwilioChatClient: 0x282715790>>>> - 8564 | Sync TSCollectionItemQueryActivity(3) | response status 200 body 3349 bytes
2021-01-14 13:12:47.649263+0200  <<<<TwilioChatClient: 0x282715790>>>> - 8564 | Sync TSCollectionItemQueryActivity(3) | destructed
2021-01-14 13:12:47.649585+0200  <<<<TwilioChatClient: 0x282715790>>>> -      | Chat IPM | [9HU8c] messages: query done, results count 3
DEBUG: get completion from getLastWithCount Optional("CH1425bfdb625945c1ab43bdb440e9ee2a") true

但过了一段时间,就停止工作了

2021-01-14 13:12:49.435863+0200  <<<<TwilioChatClient: 0x282715790>>>> -      | Chat IPM | channels: [api] get user channels
DEBUG: calling channelWithSidOrUniqueName CHa109c68be1454e5ca8bfffa3eedd37f2
2021-01-14 13:12:49.437479+0200  <<<<TwilioChatClient: 0x282715790>>>> -      | Chat IPM | channels: [api] get channel CHa109c68be1454e5ca8bfffa3eedd37f2
DEBUG: get completion from channelWithSidOrUniqueName true
DEBUG: synchronizationStatus == all
DEBUG: status == .joined
DEBUG: calling getLastWithCount Optional("CHa109c68be1454e5ca8bfffa3eedd37f2")
2021-01-14 13:12:49.438019+0200 <<<<TwilioChatClient: 0x282715790>>>> -      | Chat IPM | [NRBeN] channel: [api] get messages
2021-01-14 13:12:49.438139+0200 <<<<TwilioChatClient: 0x282715790>>>> -      | Chat IPM | [NRBeN] messages: [api] getLastMessages, count 5
2021-01-14 13:12:49.438248+0200 <<<<TwilioChatClient: 0x282715790>>>> - 8572 | Sync TSCollectionItemQueryActivity(3) | constructed
2021-01-14 13:12:49.438320+0200 <<<<TwilioChatClient: 0x282715790>>>> - 8572 | Sync TSCollectionItemQueryActivity(3) | start 3003
2021-01-14 13:12:49.438384+0200 <<<<TwilioChatClient: 0x282715790>>>> - 6750 | Sync List | query page id: 3003
2021-01-14 13:12:49.438451+0200 <<<<TwilioChatClient: 0x282715790>>>> -      | Sync CoreDataActivity | query [1] /v3/Services/IS566142b988d74af6bba32abbdb4a7474/Lists/ES0ca1135ad73e45d9b0f9e482ea1884b1/Items?Order=desc
2021-01-14 13:12:49.438551+0200 <<<<TwilioChatClient: 0x282715790>>>> -      | Twilsock Message::makePayload | Payload size 0
2021-01-14 13:12:49.438635+0200 <<<<TwilioChatClient: 0x282715790>>>> -  289 | Twilsock Client | sendUpstreamMessage, id = RQc3dafd4ae4a546fa8cebee15567d1d14
2021-01-14 13:12:49.629690+0200 <<<<TwilioChatClient: 0x282715790>>>> - 8572 | Sync TSCollectionItemQueryActivity(3) | response status 200 body 3349 bytes
2021-01-14 13:12:49.630136+0200 <<<<TwilioChatClient: 0x282715790>>>> - 8572 | Sync TSCollectionItemQueryActivity(3) | destructed
2021-01-14 13:12:49.630233+0200 <<<<TwilioChatClient: 0x282715790>>>> -      | Chat IPM | [NRBeN] messages: query done, results count 3
2021-01-14 13:12:49.630302+0200 <<<<TwilioChatClient: 0x282715790>>>> -      | Chat IPM | [NRBeN] messages: range 0:2
2021-01-14 13:12:49.630368+0200 <<<<TwilioChatClient: 0x282715790>>>> -      | Chat IPM | [JUbw4] message: StateNoState->StateNotInitialized
2021-01-14 13:12:49.630433+0200  <<<<TwilioChatClient: 0x282715790>>>> -      | Chat IPM | [JUbw4] message: StateNotInitialized->StateInitialized
2021-01-14 13:12:49.630498+0200 <<<<TwilioChatClient: 0x282715790>>>> -      | Chat IPM | [v2zHz] message: StateNoState->StateNotInitialized
2021-01-14 13:12:49.630562+0200  <<<<TwilioChatClient: 0x282715790>>>> -      | Chat IPM | [v2zHz] message: StateNotInitialized->StateInitialized
2021-01-14 13:12:49.630797+0200 <<<<TwilioChatClient: 0x282715790>>>> -      | Chat IPM | [nPcGj] message: StateNoState->StateNotInitialized
2021-01-14 13:12:49.630863+0200 <<<<TwilioChatClient: 0x282715790>>>> -      | Chat IPM | [nPcGj] message: StateNotInitialized->StateInitialized

在那之后,我的方法将永远等待getLastWithCount 的回调

我将非常感谢的任何建议或建议

Twilio团队确认,当我们在iOS 14.3…14.4上使用ARKit时,存在一些问题https://github.com/twilio/twilio-chat-ios/issues/22

最新更新