/在音频会话激活后,您需要调用连接和连接状态更改。 您可以通过使用块来完成。在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