2017-01-30 73 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(); 
    } 
}