Twilio iOSvideo通话:当用户拒绝来电时,显示“用户不可用”错误消息

我正在iOS应用程序中实现twilio的video通话。 问题是,我正在寻找一种方法来知道对方应用程序何时死亡,以发送给他一个VoIP推送通知。

我试图实现的解决scheme是,当电话返回“用户不可用”的错误,那么我会告诉我的后端发送VoIP通知给对方,这个解决scheme的问题是,我发现了twilio的错误,有时如果用户拒绝调用twilio的SDK返回一个错误的错误消息,说“用户不可用”,而不是“用户拒绝来电”消息的错误。 所以我不知道用户是否真的不可用(发送VoiP通知),或者用户是否拒绝了这个呼叫

如何重现错误? 1.使用固定的身份标识连接两个客户端。 例如“identity1”和“identity2”2.拨打“identity1”到“identity2”,拒绝“identity2”。 您将收到正确的错误消息“用户拒绝电话”3.closures“identity2”中的应用程序没有调用UNLISTEN,只需要杀死该应用程序。 4.然后再次启动应用程序在“身份2”(更改令牌,如果你想,但让相同的身份证)。 5.从“identity1”调用“identity2”,并从“identity2”中拒绝。 您将收到错误的错误消息“用户不可用”,而不是“用户拒绝呼叫”。

这就是问题就像twilio不会删除旧客户的实例,如果我们不unlisten。 如果用户不可用或拒绝通话时无法区分,那么当真正需要时,我不能发送VoIP推送。

为了接听来电,您必须在每次启动应用程序时调用listen API。 看来你可能会在listen之后杀死应用程序,但在重新启动listen之后不会在客户端上调用。 所以当远程方进行出站呼叫时,得到的是TWCErrorCodeConversationParticipantNotAvailable

一旦对话客户端开始侦听传入呼叫,远程方应拒绝接收TWCErrorCodeConversationRejected

换句话说,如果A呼叫B,而B不听(即不在客户端上呼叫),A将收到“用户不可用”。

Swift中的例子:

 /* 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 } } } 

请让我知道这是否有帮助!