我正在开发一个使用CallKit来通知用户的应用程序。然而,我正在使用APNs测试该应用程序时,它并没有按照我的期望工作。
应用程序的流程应该是这样的:
接收 FCM -> 创建一个带Callkit的通话 -> 用户接受通话 -> 执行某些操作。
这个流程与Whatsapp等应用程序类似,但是我没有VoIP,我只需要确保每次有FCM时都激活CallKit。
然而,目前,如果应用程序在后台或非活动状态下,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。