我已经集成了远程推送通知,但我收到了此警告:
didReceiveRemoteNotification:fetchCompletionHandler:]
,但你还是 需要添加"remote-notification
"到您支持的列表UIBackgroundMode
中的Info.plist
。
我的Xcode版本是8.3.1。我真的想将此添加到Info.plist
。我也遵循了一些教程,但他们也没有提到这一点。我该怎么办?
答案 0 :(得分:169)
是的,您应该启用后台模式/远程通知,以便能够正确使用远程通知。
最简单的方法是通过项目设置。导航至目标 - >你的应用 - >能力 - >后台模式并选中远程通知。这将自动启用所需的设置。
答案 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 中添加“必需的背景模式”。现在,您将在签名和功能标签下看到一个包含远程通知的列表,只需检查它。