关于Objective C:Callkit无法识别拨出电话的已连接信息

Callkit doesn't recognize connected info of outgoing call

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

详细信息

  • 我的应用程序通过使用[provider reportOutgoingCallWithUUID:uuid connectedAtDate:nil];,]报告了已连接的信息,但Callkit并未收到该信息。
  • 首次拨出电话时,已报告已连接的信息,并且callkit系统的本机屏幕正确显示了时间信息(已连接)。
  • 但是经过两次或更多次之后,它根本没有报告过。
  • 当然,我已经设置了Delegate方法。
  • 始终使用[provider reportOutgoingCallWithUUID:uuid startedConnectingAtDate:nil];正确报告连接信息。
  • 是否有任何建议或信息?


    /激活音频会话后,您需要呼叫连接和连接状态更改。
    您可以使用块来做到这一点。在启用音频会话后,在SIP呼叫模型中创建模块并分配模块执行代码。
    在SIP通话状态事件中调用此块。/

    / *配置音频会话,但不要在此处开始呼叫音频,因为必须完成一次
    音频会话的优先级提高后,系统已将其激活。
    * /

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    - (void)provider:(CXProvider *)provider performStartCallAction:(CXStartCallAction *)action {

      _outgoingCallId = action.callUUID;
      _outgoingCallHandler = action.handle.value;
      _destinationURI = action.contactIdentifier;

      [[AudioManager sharedManager] configureAudioSession];

      [action fulfill];
    }

    / *为调用生命周期中的重要事件设置回调块,以便可以更新CXProvider来反映更新后的状态。* /

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     - (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呼叫事件的呼叫阻止

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    - (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();
        }
    }