Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Twilio iOS视频通话:获取;“用户不可用”;用户拒绝呼叫时的错误消息_Ios_Iphone_Twilio_Twilio Api - Fatal编程技术网

Twilio iOS视频通话:获取;“用户不可用”;用户拒绝呼叫时的错误消息

Twilio iOS视频通话:获取;“用户不可用”;用户拒绝呼叫时的错误消息,ios,iphone,twilio,twilio-api,Ios,Iphone,Twilio,Twilio Api,我正在iOS应用程序中实现twilio的视频通话。问题是,我正在寻找一种方法来知道对方应用程序何时停止运行,从而向他发送VoIP推送通知 我试图实现的解决方案是,当调用返回“用户不可用”错误时,我会告诉后端向对应方发送VoIP通知,该解决方案的问题是我发现了twilio的错误,有时如果用户拒绝调用,twilio的SDK会返回一条错误消息,说“用户不可用”改为“用户拒绝呼叫”消息的错误。因此我不知道用户是否真的不可用(发送VoiP通知),或者用户是否拒绝了呼叫 如何重现错误? 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推送。

为了接收传入呼叫,你必须在每次启动应用程序时调用
侦听
API。似乎您可能在
listen
之后终止应用程序,但在客户端上未调用重新启动
listen
之后。因此,当远程方进行出站呼叫时,它会收到

一旦会话客户端开始监听传入呼叫,远程方应在拒绝时收到
TWCErrorCodeConversationRejected

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


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

为了接收传入呼叫,您必须在每次启动应用程序时调用
listen
API。在
listen
之后,您可能会终止应用程序,但在客户端上没有调用重新启动
listen
之后。因此,当远程方进行出站呼叫时,它将被关闭

一旦会话客户端开始监听传入呼叫,远程方应在拒绝时收到
TWCErrorCodeConversationRejected

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


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

嗨,梅根,谢谢你抽出时间。不,这不是问题。当应用程序启动时,我正在重新收听。即使B打电话给A,A也会收到来电并可以接听,这意味着A正在重新收听。问题是,如果我拒绝通话,B反而会收到“不可用”错误。“拒绝调用”错误。这就像twilio的bug。就像如果我没有显式调用“Unlisten”,他们不会删除最后一个客户端实例,就像twilio的bug。就像如果我没有显式调用“Unlisten”,他们不会删除最后一个客户端实例“嗨,梅根,谢谢你抽出时间。不,这不是问题。当应用程序启动时,我正在重新收听。即使B打电话给A,A也会收到来电并接听,这意味着A正在重新收听。问题是,如果我拒绝通话,B会收到“不可用”错误,而不是“拒绝通话”错误。就像twilio的bug一样。就像如果我没有显式调用“Unlisten”,他们就不会删除最后一个客户端实例,就像twilio的bug一样。就像如果我没有显式调用“Unlisten”,他们就不会删除最后一个客户端实例一样
/* 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
        }
    }
}