我已经集成了远程推送通知,但我收到了以下警告:
didReceiveRemoteNotification:fetchCompletionHandler:]
,但您仍然需要将“remote-notification
”添加到UIBackgroundMode
您的Info.plist
.
我的 Xcode 版本是 8.3.1。我真的很想将此添加到Info.plist
. 我也遵循了一些教程,但他们也没有提到这一点。我真的应该怎么做?
我已经集成了远程推送通知,但我收到了以下警告:
didReceiveRemoteNotification:fetchCompletionHandler:]
,但您仍然需要将“remote-notification
”添加到UIBackgroundMode
您的Info.plist
.
我的 Xcode 版本是 8.3.1。我真的很想将此添加到Info.plist
. 我也遵循了一些教程,但他们也没有提到这一点。我真的应该怎么做?
您还可以编辑所需的 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)
这里的关键是前一个(以及它所取代的已弃用的)仅在应用程序处于前台时运行。如果应用程序在前台或后台,后者将运行。请参阅此特定金块的规范:
使用此方法为您的应用处理传入的远程通知。与 application(_:didReceiveRemoteNotification:) 方法不同,该方法仅在您的应用程序在前台运行时调用,系统在您的应用程序在前台或后台运行时调用此方法。
因此,如果您需要推送通知,则决定是否需要在后台运行 - 只有当您需要两者时,您才应该实施警告建议的方法。
从项目导航器中选择您的 .xcodeproj 文件,然后转到签名和功能,然后从库(command+或单击( shift+l功能))中搜索背景模式,然后将其拖放到签名和功能,然后检查远程通知和后台处理. 另外(重要)通过单击+功能添加推送通知
即使在功能中设置了远程通知后台模式后,它也发生在我身上。问题是我有三个目标,一个用于生产,一个用于 QA,一个用于分期。我必须在所有三个目标中设置远程通知并修复警告。
如果在Signing & Capabilities中没有找到包含背景模式的列表,只需在项目的 Info.plist 中添加“必需的背景模式”即可。现在,您将在Signing & Capabilities选项卡下获得一个包含远程通知的列表,只需检查它。