CallKit:呼叫套件正在工作,但被叫方未接到电话。

6
我想开发一个SOS应用程序。当我尝试使用URL schema 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)
    }
}
2个回答

2

您无法通过CallKit进行标准的本地调用。正如文档中明确说明的那样,CallKit框架旨在用于开发自定义VoIP应用程序,并将其与本机电话界面集成。


1
任何iOS应用程序都不能在没有用户操作的情况下进行本机呼叫。 将显示一个带有电话号码和两个按钮“呼叫”和“取消”的警报,该警报来自操作系统级别。 就像我们在照片应用程序中显示弹出窗口以删除照片一样。

解决方案

如果您想要实现SOS应用程序(是的,可以使用VoIP服务),但是当应用程序处于活动状态时可以进行通话(如果有互联网连接,则可以在不需要用户操作的情况下完成)。

注意:接收方也必须支持VoIP。

如何实现VoIP

我们需要VoIP服务的权限才能在iPhone设备之间进行通话。

在Xcode项目的功能面板中启用后台模式,选择Voice over IP复选框即可使VoIP应用程序生效。

此外,CallKit仅适用于VoIP应用程序,如果您真的想实现VoIP,请参考 CallKit教程


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接