iOS - PushKit without VOIP / FCM with CallKit



我正在开发一个使用CallKit通知用户的应用程序。但是,我正在使用APNs测试应用程序,但它没有按预期工作。

流程应为: 接收 FCM -> 使用 Callkit 创建呼叫 -> 用户接受呼叫 ->执行某些操作。

流程与WHATSAPP等应用程序类似,但我没有VOIP,我只需要确保每次有FCM时都会激活CALLKIT。

但是,目前,如果应用程序处于后台或处于非活动状态,则调用工具包将不会启动。

我正在考虑使用PushKit来实现这一点。但是,我对 PushKit 没有任何经验(并且不确定我的应用程序是否会被禁止,根据这篇文章:PushKit:我们可以在不使用 VoiP 的情况下在聊天应用程序中使用推送套件(VoiP 推送(

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any],
fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
// If you are receiving a notification message while your app is in the background,
// this callback will not be fired till the user taps on the notification launching the application.
// TODO: Handle data of notification
// With swizzling disabled you must let Messaging know about the message, for Analytics
// Messaging.messaging().appDidReceiveMessage(userInfo)
// Print message ID.
if let messageID = userInfo[gcmMessageIDKey] {
print("Message ID: (messageID)")
}
let aps = userInfo["aps"] as! [String: AnyObject]
// 1
if aps["content-available"] as? Bool == true {
let uuid = UUID(uuidString: MyVariables.uuid)
AppDelegate.shared.displayIncomingCall(uuid: uuid!, handle: "Sanoste", hasVideo: false) { _ in}
}else  {
completionHandler(UIBackgroundFetchResult.newData)
}
// Print full message.
print(userInfo)
completionHandler(UIBackgroundFetchResult.newData)
}

上面的代码是我现在用于 CallKit 的代码。

根据我对调用套件+推送套件的理解,为了让应用程序在用户强制退出后变为活动状态。您需要发送一个特殊的VOIP推送通知,该通知使用您在 developer.apple.com 的"证书,标识符和配置文件"部分中配置的voip推送证书。

所以从我所看到的情况来看,你的方法是倒退的。您应该使用外部服务器发送 voip 推送通知,这将唤醒您的应用程序以处理通知...然后执行所需的任何其他处理。

此外,您还需要指示您的应用程序正在使用 VOIP 后台模式。还值得注意的是,如果您实际上没有按预期使用VOIP,那么Apple很可能会将您从App Store中拒绝。

相关内容

  • 没有找到相关文章

最新更新