124

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

didReceiveRemoteNotification:fetchCompletionHandler:],但您仍然需要将“ remote-notification”添加到 UIBackgroundMode您的Info.plist.

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

4

6 回答 6

288

是的,您应该启用后台模式/远程通知才能使用远程通知进行后台更新。

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

项目设置中的背景模式下拉列表

于 2017-08-01T14:42:05.273 回答
39

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

<dict>
<key>UIBackgroundModes</key>
    <array>
        <string>remote-notification</string>
    </array>
于 2018-04-03T20:01:05.370 回答
8

事实上,您不需要将 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:) 方法不同,该方法仅在您的应用程序在前台运行时调用,系统在您的应用程序在前台或后台运行时调用此方法。

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

于 2019-11-30T17:58:38.620 回答
5

从项目导航器中选择您的 .xcodeproj 文件,然后转到签名和功能,然后从库(command+或单击( shift+l功能))中搜索背景模式,然后将其拖放到签名和功能,然后检查远程通知后台处理. 另外(重要)通过单击+功能添加推送通知

于 2020-10-22T08:14:27.553 回答
3

即使在功能中设置了远程通知后台模式后,它也发生在我身上。问题是我有三个目标,一个用于生产,一个用于 QA,一个用于分期。我必须在所有三个目标中设置远程通知并修复警告。

于 2018-12-11T16:36:40.943 回答
1

如果在Signing & Capabilities中没有找到包含背景模式的列表,只需在项目的 Info.plist 中添加“必需的背景模式”即可。现在,您将在Signing & Capabilities选项卡下获得一个包含远程通知的列表,只需检查它。

于 2021-03-25T07:16:15.837 回答