iOS FCM数据同步静默通知
我正在尝试使用带有FCM的静默通知来触发我的iOS应用程序从数据库下载新数据。我已将有效负载和选项定义为: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中还有以下代码
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测试后,刚刚更新了帖子,还包括了一些附加信息。