Callkit无法识别拨出电话的已连接信息

时间:2017-01-30 10:01:01

标签: objective-c iphone callkit

我正在将callkit框架添加到我的Obj-C VoIP应用程序中。但拨打电话有一些问题。 Callkit无法识别拨出电话的已连接信息。

详细

  1. 我的应用使用[提供商reportOutgoingCallWithUUID:uuid connectedAtDate:nil];,报告了连接信息,但Callkit没有收到该信息。
  2. 第一次拨打电话时,已连接的信息已报告,并且callkit系统的原生屏幕正确显示时间信息(已连接)。
  3. 但是两次或更多次之后,根本没有报道。
  4. 当然我已经设置了委托方法。
  5. 始终使用[provider reportOutgoingCallWithUUID:uuid startedConnectingAtDate:nil];
  6. 正确报告连接信息

    有任何建议或信息吗?

1 个答案:

答案 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();
    }
}