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

时间:2017-08-01 14:28:56

标签: ios info-plist uibackgroundmode

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

  

didReceiveRemoteNotification:fetchCompletionHandler:],但你还是   需要添加" remote-notification"到您支持的列表   UIBackgroundMode中的Info.plist

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

6 个答案:

答案 0 :(得分:169)

是的,您应该启用后台模式/远程通知,以便能够正确使用远程通知。

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

Background Modes dropdown list in Project Settings

答案 1 :(得分:19)

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

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

  

使用此方法为您的应用处理传入的远程通知。   与application(_:didReceiveRemoteNotification :)方法不同,后者   仅当您的应用在前台运行时才被调用   当您的应用在前台运行时调用此方法,或者   背景。

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

答案 4 :(得分:0)

Project navigator 中选择.xcodeproj文件,然后转到 Signing&Capabilies ,然后从库中 (命令 + shift + l 或单击(+功能)),然后搜索背景模式将其放到签名和功能中,然后选中远程通知背景处理。 另外(重要),通过点击 +功能

来添加推送通知

答案 5 :(得分:0)

如果在签名和功能中没有找到包含背景模式的列表,只需在项目的 Info.plist 中添加“必需的背景模式”。现在,您将在签名和功能标签下看到一个包含远程通知的列表,只需检查它。