我正在将callkit框架添加到我的Obj-C VoIP应用程序中。但拨打电话有一些问题。 Callkit
无法识别拨出电话的已连接信息。
详细
reportOutgoingCallWithUUID:uuid connectedAtDate:nil];,
报告了连接信息,但Callkit没有收到该信息。[provider reportOutgoingCallWithUUID:uuid startedConnectingAtDate:nil];
有任何建议或信息吗?
答案 0 :(得分:2)
/ 您需要在激活音频会话后调用连接和连接状态更改。 您可以使用块来完成。在sip调用模型中创建块,并在启用音频会话后分配块执行代码。 在sip call state事件中调用此块。 /
/ *配置音频会话,但不要在此处启动呼叫音频,因为它必须完成一次 在优先级提升后,系统已激活音频会话。 * /
- (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();
}
}