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
UIBackgroundMode
s 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 notifications 和 Background processing 。
另外(重要)通过单击 + 能力
添加推送通知
如果您在 Signing & Capabilities 中找不到包含背景模式的列表,只需在您的项目的 Info.plist。现在,您将在 Signing & Capabilities 选项卡下获得包含 Remote notifications 的列表,只需检查它即可。
我已经集成了远程推送通知,但我收到了这个警告:
didReceiveRemoteNotification:fetchCompletionHandler:]
, but you still need to add "remote-notification
" to the list of your supportedUIBackgroundMode
s in yourInfo.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 notifications 和 Background processing 。 另外(重要)通过单击 + 能力
添加推送通知如果您在 Signing & Capabilities 中找不到包含背景模式的列表,只需在您的项目的 Info.plist。现在,您将在 Signing & Capabilities 选项卡下获得包含 Remote notifications 的列表,只需检查它即可。