我们被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()直接获得通道的解决方法,但是我们仍然遇到了这个通道的另一个问题(从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的回调。
如有任何建议或建议,我将不胜感激。
发布于 2022-01-20 15:13:28
Twilio团队证实,当我们在ARKit上使用iOS 14.3时,存在一些问题。14.4 https://github.com/twilio/twilio-chat-ios/issues/22
https://stackoverflow.com/questions/65708362
复制相似问题