如何在 swift 4 iOS 中将 Callkit 与 Agora VOiP 集成?

Posted

技术标签:

【中文标题】如何在 swift 4 iOS 中将 Callkit 与 Agora VOiP 集成?【英文标题】:how to integrate Callkit with Agora VOiP in swift 4 iOS? 【发布时间】:2019-01-15 11:12:26 【问题描述】:

我想在 swift 4 ios 中集成苹果 Callkit 和 Agora VOiP。

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

【问题讨论】:

欢迎来到 ***。正如所写,这个问题过于宽泛和开放。 “集成”可能意味着很多事情,很难将这个问题与对大量免费代码的请求区分开来。您需要将其缩小到您遇到的可以用规范答案回答的特定问题。我建议从这里开始:developer.apple.com/videos/play/wwdc2016/230 【参考方案1】:

要集成 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 )
    
    转到开发者门户并生成 VoIP 服务证书并安装它。 在功能下启用推送通知。

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

【讨论】:

我将 agora.io 集成到我的一个应用程序中。并使用 firebase 通知处理应用程序状态。但是当我的应用程序被杀死并收到未调用时间调用屏幕的通知时。 请确保您正在使用 Pushkit 注册设备令牌。检查设备令牌,您将有不同的设备令牌用于推送通知和 VOIP 通知。此外,请确保您在完成 didReceiveIncomingPushWith() 函数之前使用 CXProvider 接收 VOIP 通知来报告来电,否则从 iOS 13 开始,系统将不会显示您的来电。必须将 CallKit 与 Pushkit 一起使用,否则系统不会显示任何呼叫,甚至可能会阻止设备上的 VOIP 消息。 我实现了推送工具包。但我有一个查询,我上传该 voip 证书 .p12 以进行通知

以上是关于如何在 swift 4 iOS 中将 Callkit 与 Agora VOiP 集成?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 swift ios 的自定义 collectionView 单元中将字符串值显示到多个标签?

如何在 ios 中将数据类型声明为时间戳 - swift

如何在 iOS 的 swift 中将浮动操作按钮放在 tableView 中?

Swift/IOS/CoreData:如何在自动生成的 CoreData 类中将 var 定义为枚举类型?

如何在swift(ios)中将字符串格式的日期转换为另一种字符串格式[重复]

如何在 iOS Swift 中将不同的角半径应用于 UIView 的不同角?