2017-01-30 106 views
2

我正在爲我的Obj-C VoIP應用程序添加callkit框架。但是撥打電話有一些問題。 Callkit不能識別出局呼叫的連接信息。Callkit無法識別撥出電話的連接信息

詳細

  1. 我的應用程序通過使用[提供商reportOutgoingCallWithUUID:uuid connectedAtDate:nil];,但Callkit沒有收到報告的連接信息。
  2. 第一次打出電話時,連接信息已報告,callkit系統的本機屏幕正確顯示時間信息(已連接)。
  3. 但是經過兩次以上,還沒有報道過。
  4. 當然我已經設置了委託方法。
  5. 連接信息始終使用[provider reportOutgoingCallWithUUID:uuid startedConnectingAtDate:nil];正確報告。

有沒有什麼建議或信息?

+0

您是否確認要爲每個呼叫發送正確的UUID,而不是重複使用UUID? –

+0

是的,我檢查UUID製作UUID,報告startConnecting,連接和endCall。都是一樣的。 – SynCha

+0

此外,我的應用程序使用NSUUID每次調用UUID。 – SynCha

回答

1

/在音頻會話激活後,您需要調用連接和連接狀態更改。 您可以通過使用塊來完成。在sip呼叫模型中創建塊並在啓用音頻會話後分配塊執行代碼。 在sip呼叫狀態事件中調用此塊。/

/*配置音頻會話,但不要在此處啓動呼叫音頻,因爲必須先完成一次 音頻會話在系統優先級升高後被系統激活。 */

- (void)provider:(CXProvider *)provider performStartCallAction:(CXStartCallAction *)action { 

    _outgoingCallId = action.callUUID; 
    _outgoingCallHandler = action.handle.value; 
    _destinationURI = action.contactIdentifier; 

    [[AudioManager sharedManager] configureAudioSession]; 

    [action fulfill]; 
} 

/*設置一個呼叫中的生命週期顯著事件回調塊,使CXProvider可以被更新,以反映更新的狀態。*/

- (void)provider:(CXProvider *)provider didActivateAudioSession:(AVAudioSession *)audioSession { 

    SIPCall *call = [[[SIPUserAgent sharedUserAgent] account]makeCallToURI:_destinationURI]; 
    call.connectingBlock = ^{ 
     NSLog(@"----- connecting block -----"); 
     [_provider reportOutgoingCallWithUUID:_outgoingCallId startedConnectingAtDate:nil]; 
    }; 

    call.connectedBlock = ^{ 
     NSLog(@"----- connected block -----"); 
     [_provider reportOutgoingCallWithUUID:_outgoingCallId connectedAtDate:nil]; 
    }; 

} 

//調用塊從SIP呼叫事件

- (void)SIPCallConnecting:(NSNotification *)notification { 

    SIPCall *call = [notification object]; 
    if (call.connectingBlock) { 
     call.connectingBlock(); 
    } 
} 

- (void)SIPCallDidConfirm:(NSNotification *)notification { 
     SIPCall *call = [notification object]; 
     [self setCallStartTime:[NSDate timeIntervalSinceReferenceDate]]; 
     [actv startCallTimer]; 
     if (call.connectedBlock) { 
     call.connectedBlock(); 
    } 
} 
相關問題