我已经集成了远程推送通知,但我收到了以下警告:
didReceiveRemoteNotification:fetchCompletionHandler:]
,但您仍然需要将"remote-notification
“添加到Info.plist
中支持的UIBackgroundMode
的列表中。
我的Xcode版本是8.3.1。我真的想把这个添加到Info.plist
中。我也学过一些教程,但他们也没有提到这一点。我到底该怎么做?
发布于 2017-08-01 14:42:05
是的,您应该启用后台模式/远程通知,以便能够使用远程通知进行后台更新。
最简单的方法是通过项目设置。导航到 ->,-> ->功能,->后台模式,并检查远程通知。这将自动启用所需的设置。
发布于 2018-04-03 20:01:05
您还可以编辑所需的info.plist (Open ->源代码)并粘贴:
<dict>
<key>UIBackgroundModes</key>
<array>
<string>remote-notification</string>
</array>
发布于 2019-11-30 17:58:38
实际上,您不需要仅仅为了使用远程通知就将UIBackgroundModes添加到.plist中。
我知道我有点离经叛道(另一个答案大多很好,也许是iOS 11中的一些新东西),但问题是,推送通知需要进行背景更新,而它们不需要。
这里的区别在于,有两种不同的方法接受AppDelegate上的通知;
这一项不要求您使用UIBackgroundModes:
optional func userNotificationCenter(_ center: UNUserNotificationCenter,
willPresent notification: UNNotification,
withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void)
上面的内容取代了iOS 11中不推荐的内容:
optional func application(_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable : Any])
这一项确实需要后台模式能力:
optional func application(_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable : Any],
fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)
这里的关键是,只有在应用程序处于前台时,才能运行前一个程序(以及被它替换的不推荐的应用程序)。如果应用程序位于前台或后台,后者将运行。有关这个特定的元素,请参见规格:
使用此方法处理应用程序的传入远程通知。与应用程序(_:didReceiveRemoteNotification:)方法不同,该方法仅在应用程序在前台运行时调用,而系统在应用程序在前台或后台运行时调用此方法。
因此,如果您需要推送通知,那么就决定是否需要在后台运行--如果您需要这两种方法,那么您应该实现警告所建议的方法。
https://stackoverflow.com/questions/45440627
复制相似问题