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

CallKit :- Callkit is working but the callee doesn't get the call

我想开发一个 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)
    }
}

您只是无法通过 CallKit 进行标准的本机调用。正如 documentation 中明确指出的那样,CallKit 框架旨在用于开发自定义 VoIP 应用程序并将它们与本机 phone 界面集成。

任何 iOS 应用程序都无法在没有用户操作的情况下进行本机调用。

将显示带有 phone 编号的警报,并且将提供两个按钮 "Call" 和 "Cancel",它们从 OS 级别显示.

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

解决方案

If you want to implement SOS Application (Yes its possible using VoIP service), But you can place calls when app is active (Can be done without user action given internet connection is there.)

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

如何实施 VoIP

我们需要 许可 IP 语音服务才能在 iPhone 台设备之间进行通话。

VoIP app must have background mode enabled in the Xcode Project > Capabilities pane. Select the checkbox for Voice over IP

此外,CallKit 仅针对 VoIP 应用缩进,如果您真的想实现 VoIP,请遵循 CallKit Tutorial