iOS - PushKit无需VOIP / 使用CallKit的FCM

3

我正在开发一个使用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。

1个回答

8
据我所了解,关于Call Kit和Push Kit的内容,为了让用户在强制退出应用后重新启动应用,你需要发送一个特殊的VOIP推送通知。该通知使用在developer.apple.com的证书、标识符和描述文件区域配置的VOIP推送证书。

因此,从我的观察来看,你的方法是反向的。你应该使用外部服务器发送VOIP推送通知,唤醒你的应用程序处理通知,然后进行任何需要的其他处理。

另外,你还需要指示你的应用程序正在使用VOIP后台模式。值得注意的是,如果你实际上没有按照预期使用VOIP,则苹果可能会拒绝你的应用程序进入应用商店。

你好,谢谢回复。昨天我用VOIP开发证书进行了测试,一切都按照我的预期工作。然而,你是对的,我们团队需要一个“真正的”Voip后端,而不仅仅是使用pushkit来推送通知。我认为我们的团队必须再次讨论或向苹果寻求帮助。无论如何,再次感谢。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接