簡體   English   中英

CallKit處理iOS中的多個呼叫(VOIP和GSM)問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM