【问题标题】:Callkit doesn't recognize connected info of outgoing callCallkit 无法识别拨出电话的连接信息
【发布时间】:2017-01-30 10:01:00
【问题描述】:

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

详情

  1. 我的应用使用 [provider reportOutgoingCallWithUUID:uuid connectedAtDate:nil];, 报告了连接信息,但 Callkit 没有收到该信息。
  2. 第一次拨出电话,已报告已连接信息,并且callkit系统的本机屏幕正确显示时间信息(已连接)。
  3. 但是经过两次以上,一直没有报。
  4. 我当然设置了委托方法。
  5. 使用[provider reportOutgoingCallWithUUID:uuid startedConnectingAtDate:nil]; 始终正确报告连接信息。

有什么建议或信息吗?

【问题讨论】:

  • 您是否确认您正在为每个呼叫发送正确的 UUID,而不是重复使用 UUID?
  • 是的,我在制作 UUID 时检查了 UUID,报告了 startConnecting、connected 和 endCall。都是一样的。
  • 另外,我的应用程序每次调用都使用 NSUUID 生成 UUID。

标签: objective-c iphone callkit


【解决方案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();
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多