远程推送通知是否需要在Info.plist中添加UIBackgroundModes?


104

我已经集成了远程推送通知,但是却收到此警告:

didReceiveRemoteNotification:fetchCompletionHandler:],但你仍然需要添加“ remote-notification”到列表的支持 UIBackgroundMode在你的S Info.plist

我的Xcode版本是8.3.1。我真的很想将此添加到中Info.plist。我也遵循了一些教程,但是他们也都没有提到。我该怎么办

Answers:


245

是的,您应该启用后台模式/远程通知,以便能够将远程通知用于后台更新。

最简单的方法是通过项目设置。导航到目标->您的应用->功能->后台模式,然后选中远程通知。这将自动启用所需的设置。

项目设置中的“后台模式”下拉列表


3
我已经检查了该字段,但是仍然遇到相同的错误。
阿努伊'18年


1
我不同意这个答案。如果您正在使用远程通知进行后台更新,则仅应启用后台模式->远程通知。请参考此处的文档 配置后台更新通知
jzeferino

1
@jzeferino感谢您的通知,我在回答中做了一些澄清。请注意,最初的问题与该application(_:didReceiveRemoteNotification:fetchCompletionHandler:)函数有关,该函数用于处理数据提取。
塔玛斯·森格尔

这很好,但是回答了您是否需要后台更新的能力的问题,当然可以。我发布了一个答案,关于您是否仅需要为推送通知设置后台模式功能(扰流器,不是必需的)。
mobob

30

您还可以编辑所需的info.plist(打开方式->源代码)并粘贴:

<dict>
<key>UIBackgroundModes</key>
    <array>
        <string>remote-notification</string>
    </array>

7
现在是自动的Xcode检查背景模式远程通知时添加
Vinoth维诺

1
不适合我:版本11.4.1(11E503a)
paiego,

4

实际上,您不必仅使用远程通知就将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)

这里的关键是,前一个(以及已替换的不推荐使用的)仅在应用程序处于前台时运行。如果应用位于前台或后台,则后者将运行。请参阅有关此特定块的规范

使用此方法可以为您的应用处理传入的远程通知。与application(_:didReceiveRemoteNotification :)方法不同,该方法仅在您的应用程序在前台运行时才调用,而在您的应用程序在前台或后台运行时,系统会调用此方法。

因此,如果您需要推送通知,请决定是否需要在后台运行-仅在同时需要两者的情况下,才应实施警告所建议的方法。


3

即使在功能中设置了远程通知后台模式后,我还是想到了。问题是我有三个目标,一个用于生产,一个用于质量检查,一个用于登台。我必须在所有三个目标中设置远程通知,并修复了警告。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.