iOS FCM数据同步静默通知

iOS FCM数据同步静默通知,ios,firebase,swift3,apple-push-notifications,firebase-cloud-messaging,Ios,Firebase,Swift3,Apple Push Notifications,Firebase Cloud Messaging,我正在尝试使用带有FCM的静默通知来触发我的iOS应用程序从数据库下载新数据。我已将有效负载和选项定义为: var payload = { notification: { title: "DataSync", body: "DataSync" } }; var options = { contentAvailable: true, priority: "high" }; 我的didFinishLaunchingWithOptions中还有以下代码

我正在尝试使用带有FCM的静默通知来触发我的iOS应用程序从数据库下载新数据。我已将有效负载和选项定义为:

var payload = {
  notification: {
    title: "DataSync",
    body: "DataSync"
  }
};

var options = {
    contentAvailable: true,
    priority: "high"
};
我的didFinishLaunchingWithOptions中还有以下代码

    if #available(iOS 10.0, *) {
        // For iOS 10 display notification (sent via APNS)
        UNUserNotificationCenter.current().delegate = self

        let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
        UNUserNotificationCenter.current().requestAuthorization(
            options: authOptions,
            completionHandler: {_, _ in })
        FIRMessaging.messaging().remoteMessageDelegate = self
    } else {
        let settings: UIUserNotificationSettings =
            UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
        application.registerUserNotificationSettings(settings)
    }
我需要确保即使应用程序处于后台或关闭状态,数据下载也能正常工作。为了做到这一点,我需要从DidReceiveMemotentification触发performFetchWithCompletionHandler。然而,现在只调用applicationReceivedRemoteMessage(仅在应用程序位于前台时调用),即使我已将负载定义为通知,而不是数据消息

更新:其他信息

当我使用NWPusher直接通过APNs发送通知时,如果应用程序位于前台,则调用UNUserNotificationCenterDelegate中的以下方法

userNotificationCenter(_ center: UNUserNotificationCenter,
                                willPresent notification: UNNotification,
                                withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void)
如果应用程序位于后台,则调用以下方法:

application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any],
                     fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)
但是,当通过FCM admin sdk发送静默通知时,不会调用这些方法。仅调用applicationReceivedRemoteMessage

userNotificationCenter(_ center: UNUserNotificationCenter,
                                willPresent notification: UNNotification,
                                withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void)
我的问题是: 1.如何调用DidReceivereMotentification以便下载数据?
2.我应该如何在performFetchWithCompletionHandler中编写代码以从Firebase数据库检索信息并确保数据已完成下载?它只是一个常规的Firebase查询吗?

可用的
content\u
的值是布尔值,而不是字符串。并且它属于
有效负载的顶层,而不属于
通知的顶层。这里的示例:我认为您可能引用了旧版本的API?当我尝试这样做时,会出现错误:“消息传递负载包含无效的“content\u available”属性。有效属性为“data”和“notification”“。这里是指向当前文档的链接:更具体地说:可用的内容应该在选项中定义,但这并没有解决我的问题。你是对的。我无法识别您正在使用管理API。更新您的帖子以显示您的有效负载和选项现在的样子。在选项中,你应该有
contentAvailable:true
。在使用NWPusher测试后,刚刚更新了帖子,还包括了一些附加信息。