场景:
1)应用程序在前景中的静音或正常有效负载:
2)应用程序在后台的静音有效负载:
3)App在背景中的正常有效负载:
如果用户单击通知以打开应用程序。
application:didReceiveRemoteNotification:fetchCompletionHandler
如果用户单击应用程序图标打开应用程序:
这些是我用于APN的有效负载:
正常有效负载: 。
{
"aps":{
"alert":"andre test",
"badge":0,
"sound":"default",
"content-available":1
},
"acme-syncalarm":"true"
}
无声有效负载: 。
{
"aps":{
"content-available":1
},
"acme-syncalarm":"true"
}
我使用此代码实现了远程推送通知:
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
print("Receeeeeeeeived: \(userInfo)")
UIApplication.shared.applicationIconBadgeNumber = 11
completionHandler(.newData)
}
我还实现了这个来检查应用程序是否正在从kill状态恢复(正如我在某些问题中所读到的那样),但代码永远不会进入print(rn)
行。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
if let rn = launchOptions?[UIApplicationLaunchOptionsKey.remoteNotification] {
print(rn)
}
}
编辑1 - 我还在应用程序的后台模式中启用了远程通知。
我需要做些什么才能涵盖“什么都不会发生”的情景? 1,2和3.2?
答案 0 :(得分:1)
有些说明:
"如果用户点击应用程序图标打开应用程序:没有任何反应" < - 那是预料之中的,因为您没有直接与任何通知进行互动。想象一下,如果你有5个通知到达。你怎么知道你应该处理哪个通知......
普通有效负载没有任何名为content-available
的密钥。所以这又是一个无声的通知。你能先看到我的答案here吗?
一些建议:
另请参阅here。 iOS 11初始版本对于静默通知来说是错误的。确保您拥有测试的最新版本,否则它将无法正常工作。如果您有iOS 10设备,那么首先尝试使用...
确保您的设备上有后台应用刷新和通知。要了解如何操作,请参阅我的链接答案。
您是自己创建有效负载还是使用FireBase?如果您正在使用Firebase,则某些键会发生变化......您必须相应地进行调整。
确保您将某个对象设置为delegate
的{{1}},例如:
UNUserNotificationCenterDelegate
UNUserNotificationCenter.current().delegate = delegateObject
从here。
复制的代码如果您不这样做,那么当应用处于前台时,您将无法显示任何通知。这应解决应用程序处于前台并且您已收到正常远程通知的问题。