CallKit :- Callkit 正在工作,但被叫方没有接到电话

Ada*_* KC 6 xcode openurl swift callkit

我想开发一个 SOS 应用程序。当我尝试使用 URL 架构 openURL() 时,它会显示一个警报,但我的要求是在尝试呼叫时连接呼叫而没有任何警报或弹出窗口。所以我找到了一个使用 CallKit 的解决方案。当我在我的应用程序中实现 CallKit 时,它不要求任何许可,拨出电话已发出,但被叫方没有接到任何电话。有什么解决办法吗?

我已经尝试了以下代码来连接呼叫。

@IBAction func buttonCallTapped(_ sender: Any) {

    let provider = CXProvider(configuration: CXProviderConfiguration(localizedName: "My App"))
    provider.setDelegate(self, queue: nil)
    let controller = CXCallController()
    let transaction = CXTransaction(action: CXStartCallAction(call: UUID(), handle: CXHandle(type: .phoneNumber, value: "\(number)")))
    controller.request(transaction, completion: { error in })

    DispatchQueue.main.asyncAfter(wallDeadline: DispatchWallTime.now() + 5) {
        provider.reportOutgoingCall(with: controller.callObserver.calls[0].uuid, connectedAt: nil)
    }
}
Run Code Online (Sandbox Code Playgroud)

Sar*_*ith 1

如果没有用户操作,任何 iOS 应用程序都无法进行本机调用。

将显示带有电话号码的警报,并且从操作系统级别显示两个按钮“呼叫”和“取消”。

就像我们显示从照片应用程序中删除照片的弹出窗口一样。

解决方案

如果您想实施 SOS 应用程序(是的,可以使用 VoIP 服务),但您可以在应用程序处于活动状态时拨打电话(只要有互联网连接,无需用户操作即可完成。)

注意:接收方也应支持VoIP。

如何实施网络电话

我们需要IP 语音服务的许可才能在 iPhone 设备之间拨打电话。

VoIP 应用程序必须在 Xcode 项目 > 功能窗格中启用后台模式。选中 IP 语音复选框

此外,CallKit 仅针对 VoIP 应用程序进行缩进,如果您确实想实现 VoIP,请按照CallKit 教程进行操作