是否可以在 iOS 模拟器中使用 CallKit 接听电话?

Posted

技术标签:

【中文标题】是否可以在 iOS 模拟器中使用 CallKit 接听电话?【英文标题】:Is it possible to receive calls using CallKit in iOS simulator? 【发布时间】:2020-12-30 03:19:52 【问题描述】:

ios 中,可以使用 CallKit's reportIncomingCall 显示来电 ui。

就我而言,这在物理设备中按预期工作。我的 iPhone 收到来电提醒,我可以接听或拒绝来电。

但是,它似乎在 iOS 模拟器中不起作用。更具体地说,reportNewIncomingCall 方法调用本身成功,但随后它立即结束(我什至没有看到任何调用警报)。另外,func provider(_ provider: CXProvider, perform action: CXEndCallAction)被CXProviderDelegate调用,表示调用已经结束。

我在苹果官方文档中找不到是否可以在 iOS 模拟器中测试 CallKit - reportIncomingCall。

奇怪的是,reportOutgoingCallCXCallController 的拨出电话似乎在模拟器中运行良好,因为当CXStartCallAction 完成时,我可以看到绿色状态栏出现在 iPhone 的顶部。

所以我唯一不能让它工作的是在 iOS 模拟器中使用 CallKit 接听电话。这是预期的行为吗?

【问题讨论】:

【参考方案1】:

CallKit 完全不能在 iOS 模拟器上运行,既不能接听电话,也不能拨打电话。 在模拟器上启动任何包含CXStartCallActionCXAnswerCallActionCXTransaction 将立即失败,NSError.Code 值为CXErrorCodeRequestTransactionErrorUnknown(零)。 您必须使用真实设备来测试您的 CallKit 应用程序。

是的,我在任何 Apple 文档中都没有提到这一点。 this article提到模拟器和真机的区别,没有提到CallKit。

另请注意,模拟器没有通话 UI(拨号盘和最近通话)

【讨论】:

以上是关于是否可以在 iOS 模拟器中使用 CallKit 接听电话?的主要内容,如果未能解决你的问题,请参考以下文章

如何在实际应用中实现 CallKit?

Sinch iOS API 支持 CallKit 框架?

CallKit + WebRTC:在 iOS 中按下锁定/电源按钮时 CallKit 通话断开

使用 CallKit 显示用于拨出 VoIP 呼叫的 iOS 本机呼叫 UI

技术福利干货音视频 iOS CallKit 开发指南

Android 平台的 Callkit 示例或示例以及 agora.io 调用服务