1

我正在我的 iOS 应用程序中实现 twilio 的视频通话。问题是我正在寻找一种方法来知道对方应用程序何时停止向他发送 VoIP 推送通知。

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

如何重现错误?1.连接两个具有固定身份id的客户端。例如“identity1”和“identity2” 2. 从“identity1”向“identity2”拨打电话,从“identity2”拒接。您将收到正确的错误消息“用户拒绝呼叫” 3. 关闭“identity2”中的应用程序,无需呼叫 UNLISTEN,只需终止该应用程序。4.然后在“identity2”中再次启动应用程序(如果需要,请更改令牌,但使用相同的身份ID)。5. 从“identity1”向“identity2”拨打电话,从“identity2”拒接。您将收到错误的错误消息“用户不可用”而不是“用户拒绝呼叫”。

这就是问题,如果我们不调用 unlisten,twilio 就不会删除旧客户端的实例。如果我无法区分用户何时不可用或只是拒绝呼叫,那么我无法在真正需要时发送 VoIP 推送。

4

1 回答 1

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

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

于 2016-08-01T16:58:08.493 回答