呼叫套件在iOS中处理多个呼叫(VOIP和GSM)问题

呼叫套件在iOS中处理多个呼叫(VOIP和GSM)问题,ios,objective-c,swift,voip,callkit,Ios,Objective C,Swift,Voip,Callkit,我已经在我的VOIP应用程序中集成了CallKit。我打了一个VOIP电话,另一端接听了我的电话。后来,当VOIP呼叫处于活动状态时,我收到了GSM呼叫。我已通过释放音频接受GSM呼叫,我的VOIP应用程序进入后台。几秒钟后,我已断开GSM呼叫,但随后我得到以下方法的代理回调: - (void)provider:(CXProvider *)provider performEndCallAction:(CXEndCallAction *)action 在这种方法中,我实际上断开了所有传入/传出呼

我已经在我的VOIP应用程序中集成了
CallKit
。我打了一个VOIP电话,另一端接听了我的电话。后来,当VOIP呼叫处于活动状态时,我收到了GSM呼叫。我已通过释放音频接受GSM呼叫,我的VOIP应用程序进入后台。几秒钟后,我已断开GSM呼叫,但随后我得到以下方法的代理回调:

- (void)provider:(CXProvider *)provider performEndCallAction:(CXEndCallAction *)action
在这种方法中,我实际上断开了所有传入/传出呼叫,因此同时GSM和VOIP呼叫都断开了

我不知道为什么在我断开GSM呼叫时调用上述委托方法,如果我是对的。。。只有在断开VOIP呼叫时才应调用此方法

我的路线图是:断开GSM呼叫后,我将启动音频服务并恢复VOIP呼叫。但我无法继续,因为我的VOIP电话也断开了

与CallKit集成的正确方法(根据Apple提供的示例代码)是,您所做的所有操作都应该通过使用CXCallController调用requestTransaction:completion:method来完成,然后等待CXProviderDelegate触发相应的委托方法,并在那里执行实际工作

例如,如果你想保持通话,你需要做的是

CXSetHeldCallAction *setHeldCallAction = [[CXSetHeldCallAction alloc] initWithCallUUID:UUID onHold:onHold];
CXTransaction *transaction = [[CXTransaction alloc] initWithAction:setHeldCallAction];
[self.callController requestTransaction:transaction completion:^(NSError * _Nullable error) {
    if (error) {
        NSLog(@"%@", error);
    }
}];
然后CXProvider代理将触发提供者:执行调用调用:,您将在其中执行处理。

与CallKit集成的正确方法(根据Apple提供的示例代码)是,您所做的所有操作都应该通过使用CXCallController调用requestTransaction:completion:method来完成,并等待CXProviderDelegate触发相应的委托方法,然后在那里执行实际工作

例如,如果你想保持通话,你需要做的是

CXSetHeldCallAction *setHeldCallAction = [[CXSetHeldCallAction alloc] initWithCallUUID:UUID onHold:onHold];
CXTransaction *transaction = [[CXTransaction alloc] initWithAction:setHeldCallAction];
[self.callController requestTransaction:transaction completion:^(NSError * _Nullable error) {
    if (error) {
        NSLog(@"%@", error);
    }
}];
然后,CXProviderDelegate将触发
提供程序:执行调用调用:
,您将在其中执行处理

我不知道为什么在我断开GSM呼叫时调用上述委托方法,如果我是对的。。。只有在断开VOIP呼叫时才应调用此方法

文档中没有提到此方法将仅在应用程序发出的调用中调用。我假设这是正确的行为,您需要获取调用UUID以将调用标识为您的调用之一

我不知道为什么在我断开GSM呼叫时调用上述委托方法,如果我是对的。。。只有在断开VOIP呼叫时才应调用此方法

文档中没有提到此方法将仅在应用程序发出的调用中调用。我假设这是正确的行为,您需要获取调用UUID以将调用标识为您的调用之一