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

Do remote push notifications require to add UIBackgroundModes in Info.plist?

我已经集成了远程推送通知,但我收到了这个警告:

didReceiveRemoteNotification:fetchCompletionHandler:], but you still need to add "remote-notification" to the list of your supported UIBackgroundModes in your Info.plist.

我的 Xcode 版本是 8.3.1。我真的很想将它添加到 Info.plist。我也遵循了一些教程,但他们也没有提到这一点。我到底应该怎么做?

是的,您应该启用后台 Modes/Remote 通知以便能够使用远程通知进行后台更新。

最简单的方法是通过项目设置。导航至 Targets -> Your App -> Capabilities -> Background Modes 并检查 Remote notifications。这将自动启用所需的设置。

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

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

即使在功能中设置远程通知后台模式后,我也会遇到这种情况。问题是我有三个目标,一个用于生产,一个用于质量检查,一个用于暂存。我必须在所有三个目标中设置远程通知并修复警告。

事实上,您不需要将 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)

这里的关键是,当应用程序位于前台时,前一个(以及它所取代的已弃用的)仅 运行s。如果应用程序在前台或后台,后者将 运行。请参阅 the spec 以了解此特定金块:

Use this method to process incoming remote notifications for your app. Unlike the application(_:didReceiveRemoteNotification:) method, which is called only when your app is running in the foreground, the system calls this method when your app is running in the foreground or background.

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

Select 来自 Project navigator 的 .xcodeproj 文件然后转到 Signing & Capabilies 然后从库 (command + shift + l or Click (+ Capability)) 搜索 Background Modes 之后,将其拖放到 Signing & Capabilities 然后检查 Remote notificationsBackground processing 。 另外(重要)通过单击 + 能力

添加推送通知

如果您在 Signing & Capabilities 中找不到包含背景模式的列表,只需在您的项目的 Info.plist。现在,您将在 Signing & Capabilities 选项卡下获得包含 Remote notifications 的列表,只需检查它即可。