2017-04-26 83 views
0

我在VOIP應用集成CallKit。我撥了VOIP電話,另一端接了我的電話。稍後,當VOIP呼叫處於活動狀態時,我已收到GSM呼叫。我已經通過釋放音頻接受了GSM呼叫,並且我的VOIP應用程序已轉到後臺。幾秒鐘後,我已經斷開了GSM電話,但隨後我得到委託回調以下方法:CallKit處理多個電話(VOIP和GSM)問題的iOS

- (void)provider:(CXProvider *)provider performEndCallAction:(CXEndCallAction *)action 

在這種方法中,我實際上切斷我的所有呼入/呼出,所以在同一時間,GSM兩種和我的VOIP電話斷開連接。

我不知道爲什麼上面的委託方法,當我拔下GSM通話,如果我是正確獲取調用......這種方法應該是隻有當我拔下VOIP呼叫調用。

我的路線圖是:斷開GSM通話後,我將開始我的音樂服務,並會繼續VOIP呼叫。但是由於我的VOIP電話也斷開連接,我無法繼續前進。

回答

0

與CallKit集成的正確方法(根據Apple提供的示例代碼)是,您所做的所有操作應該通過使用CXCallController調用requestTransaction:completion:方法並等待CXProviderDelegate觸發相應的操作委託方法,並在那裏做實際工作。

For example, if you want to hold the call, what you need to do is 

    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會引發供應商:performSetHeldCallAction:和你內執行的處理。

0

我不知道爲什麼上面的委託方法,當我拔下GSM通話,如果我是正確的......這種方法應該是隻有當我拔下VOIP呼叫

有沒有提到所謂的獲取調用在文檔中說這個方法只會被你的應用程序調用。我認爲這是正確的行爲,你需要得到呼叫UUID,以確定和你的其他人忽略呼叫。

+0

這並不提供答案的問題。一旦你有足夠的[聲譽](https://stackoverflow.com/help/whats-reputation),你將可以[對任何帖子發表評論](https://stackoverflow.com/help/privileges/comment);相反,[提供不需要提問者澄清的答案](https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-c​​an- I-DO-代替)。 - [評分](/審查/低質職位/ 17407173) – PieOhPah