【问题标题】:CallKit Handling multiple calls(VOIP and GSM) issue in iOSCallKit 在 iOS 中处理多个呼叫(VOIP 和 GSM)问题
【发布时间】:2017-04-26 17:23:37
【问题描述】:

我已在我的 VOIP 应用程序中集成了 CallKit。我打了一个 VOIP 电话,另一端接听了我的电话。后来,当 VOIP 通话处于活动状态时,我收到了 GSM 通话。我通过释放音频接受了 GSM 呼叫,并且我的 VOIP 应用程序进入后台。几秒钟后,我断开了 GSM 通话,但随后我收到了对以下方法的委托回调:

- (void)provider:(CXProvider *)provider performEndCallAction:(CXEndCallAction *)action

在这种方法中,我实际上是在断开所有来电/去电,因此同时,GSM 和我的 VOIP 通话都断开了。

如果我是对的,我不知道为什么当我断开 GSM 通话时会调用上述委托方法...只有在我断开 VOIP 通话时才应该调用此方法。

我的路线图是:断开 GSM 通话后,我将启动音频服务并恢复 VOIP 通话。但我无法继续进行,因为我的 VOIP 通话也断开了。

【问题讨论】:

    标签: ios objective-c swift voip callkit


    【解决方案1】:

    如果我是对的,我不知道为什么当我断开 GSM 通话时会调用上述委托方法...只有在我断开 VOIP 通话时才应该调用此方法

    文档中没有提到仅在您的应用发出的调用时才会调用此方法。我认为这是正确的行为,您需要获取呼叫 UUID 以将呼叫标识为您的其他呼叫之一。

    【讨论】:

      【解决方案2】:

      与CallKit集成的正确方法(根据Apple提供的示例代码)是,您所做的所有操作都应该通过使用CXCallController调用requestTransaction:completion:方法来完成,并等待CXProviderDelegate触发相应的delegate方法,并在那里做实际的工作。

      例如,如果你想保持通话,你需要做的是

      CXSetHeldCallAction *setHeldCallAction = [[CXSetHeldCallAction alloc] initWithCallUUID:UUID onHold:onHold];
      CXTransaction *transaction = [[CXTransaction alloc] initWithAction:setHeldCallAction];
      [self.callController requestTransaction:transaction completion:^(NSError * _Nullable error) {
          if (error) {
              NSLog(@"%@", error);
          }
      }];
      

      然后 CXProviderDelegate 将触发provider:performSetHeldCallAction:,然后您在其中执行处理。

      【讨论】:

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