我正在iOS应用程序中实现twilio的视频通话。问题是我正在寻找一种方法来了解对方应用程序何时死机以向他发送VoIP推送通知。
我试图实现的解决方案是,当呼叫返回“用户不可用”错误时,我会告诉我的后端向对方发送VoIP通知,这个解决方案的问题是我发现了twilio的bug有时,如果用户拒绝通话,twilio的SDK会返回错误的错误消息“用户不可用”,而是“用户拒绝通话”消息。所以我不知道用户是否真的不可用(发送VoiP通知)或者用户是否拒绝了呼叫
如何重现错误? 1.连接具有固定身份ID的两个客户端。例如“identity1”和“identity2” 2.从“identity1”拨打“identity2”并从“identity2”拒绝。您将收到正确的错误消息“用户拒绝呼叫” 3.关闭“identity2”中的应用程序,无需CALLING UNLISTEN,只需杀死应用程序。 4.然后在“identity2”中再次启动应用程序(如果需要,请更改令牌,但使用相同的身份ID)。 5.从“identity1”拨打“identity2”并从“identity2”拒绝。您将收到错误的错误消息“用户不可用”而不是“用户拒绝呼叫”。
多数问题就像twilio不会删除旧客户端的实例,如果我们不调用unlisten。如果我无法区分用户不可用或只是拒绝呼叫,那么我无法在真正需要时发送VoIP推送。
答案 0 :(得分:0)
要接听来电,您必须在每次启动应用时调用listen
API。您可能会在listen
之后删除该应用,但在重新启动后listen
未在客户端上调用。因此,当远程方进行出站呼叫时,它将获得TWCErrorCodeConversationParticipantNotAvailable
。
会话客户端开始侦听来电时,远程方应在拒绝时收到TWCErrorCodeConversationRejected
。
换句话说,如果A呼叫B,而B没有收听(即在客户端没有呼叫listen
),A将收到“用户不可用"。
/* Create an AccessManager - this provides a single place to update your Twilio
Access Token when using multiple Twilio SDKs */
var accessManager = TwilioAccessManager(token:self.accessToken, delegate:self)
// Create a Conversations Client and listen for IncomingInvites
var client = TwilioConversationsClient(accessManager: accessManager, delegate: self)
client!.listen()
// MARK: TwilioConversationsClientDelegate
// Selectively handle IncomingInvites based on the originator
func conversationsClient(conversationsClient: TwilioConversationsClient,
didReceiveInvite invite: TWCIncomingInvite) {
if (invite.from == "ringo") {
invite.reject()
} else {
/* See the "Specify Local Media Constraints when Creating a
Conversation" guide for instructions on constructing LocalMedia */
invite.acceptWithLocalMedia(self.localMedia!) { conversation, error in
self.conversation = conversation
self.conversation!.delegate = self
}
}
}
如果这有帮助,请告诉我!