3

我想在 swift 4 iOS 中将苹果 Callkit 与 Agora VOiP 集成。

请提出任何建议我该怎么做。

4

1 回答 1

7

要集成 voip,您必须同时使用 callKit 和 PushKit。

CallKit 将用于在通话转换期间显示本机呼叫屏幕和处理程序,而 Pushkit 将用于在应用程序被终止时调用应用程序。

它易于集成:-

在 info.plist 中启用后台模式并选中“应用程序提供 IP 语音服务”选项。在视图控制器 viewdidload/ 任何类的任何 init 方法中导入 Callkit,您将用于实现 CXProviderDelegate 函数。通过这个,您将配置呼叫对象、何时报告来电、接受操作、拒绝操作等。

实现以下功能:

func providerDidReset(_ provider: CXProvider) {
}

func provider(_ provider: CXProvider, perform action: CXAnswerCallAction) {
    action.fulfill()
}

func provider(_ provider: CXProvider, perform action: CXEndCallAction) {
    action.fulfill()
}

现在导入 Pushkit 并实现 PKPushRegistryDelegate 函数。

a.) 像这样配置 pushkit

let registry = PKPushRegistry(queue: nil)
        registry.delegate = self
        registry.desiredPushTypes = [PKPushType.voIP]

b.) 实现 pushkit 令牌功能。您可能需要更新到服务器以提供 voip 推送通知

 func pushRegistry(_ registry: PKPushRegistry, didUpdate pushCredentials: PKPushCredentials, for type: PKPushType) {
        print(pushCredentials.token.map { String(format: "%02.2hhx", $0) }.joined())
    }

C。现在,当您收到传入通知时,请执行此功能

func pushRegistry(_ registry: PKPushRegistry, didReceiveIncomingPushWith payload: PKPushPayload, for type: PKPushType, completion: @escaping () -> Void) {
        let config = CXProviderConfiguration(localizedName: "App name")
        config.iconTemplateImageData = UIImagePNGRepresentation(UIImage(named: "any image name")!)
        
        config.supportsVideo = true;
        let provider = CXProvider(configuration: config)
        provider.setDelegate(self, queue: nil)
        let update = CXCallUpdate()
        update.remoteHandle = CXHandle(type: .generic, value: "Caller name")
        update.hasVideo = true
        provider.reportNewIncomingCall(with: UUID(), update: update, completion: { error in })
    }
  1. 转到开发人员门户并生成 VoIP 服务证书并安装它。
  2. 在功能下启用推送通知。

这是一个基本的代码概览。您将不得不添加案例来模拟来电和其他自定义。我希望这能帮助你走得更远。

于 2019-02-12T10:15:23.270 回答