![](/img/trans.png)
[英]Issue with iOS VoIP CallKit app when handling incoming call from locked screen
[英]CallKit Handling multiple calls(VOIP and GSM) issue in iOS
我已經在我的VOIP應用程序中集成了CallKit
。 我打了一個VOIP電話,另一端接了我的電話。 稍后,當VOIP通話處於活動狀態時,我已收到GSM通話。 我已經通過釋放音頻來接受GSM通話,而我的VOIP應用程序已進入后台。 幾秒鍾后,我斷開了GSM通話,但是隨后我得到了以下方法的委托回調:
- (void)provider:(CXProvider *)provider performEndCallAction:(CXEndCallAction *)action
用這種方法,我實際上斷開了所有傳入/傳出的呼叫,因此,同時GSM和VOIP呼叫都斷開了。
我不確定在正確的情況下斷開GSM呼叫時為什么會調用上述委托方法...僅在斷開VOIP呼叫時才應調用此方法。
我的路線圖是:斷開GSM通話后,我將啟動音頻服務並恢復VOIP通話。 但是我無法繼續進行,因為我的VOIP通話也斷開了。
正確的方法(根據Apple提供的示例代碼)是與CallKit集成的,應該執行所有操作,方法是使用CXCallController調用requestTransaction:completion:方法,並等待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將觸發provider:performSetHeldCallAction:
:,然后您在其中執行處理。
我不確定為什么在我斷開GSM呼叫時會調用上面的委托方法...僅當我斷開VOIP呼叫時才應調用此方法
在文檔中沒有提到僅在您的應用程序進行調用時才調用此方法。 我認為這是正確的行為,您需要獲取呼叫UUID才能將呼叫標識為其他呼叫之一。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.