/在音頻會話激活後,您需要調用連接和連接狀態更改。 您可以通過使用塊來完成。在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();
}
}
您是否確認要爲每個呼叫發送正確的UUID,而不是重複使用UUID? –
是的,我檢查UUID製作UUID,報告startConnecting,連接和endCall。都是一樣的。 – SynCha
此外,我的應用程序使用NSUUID每次調用UUID。 – SynCha