use*_*169 82 ios info-plist uibackgroundmode
我已经集成了远程推送通知,但是我收到了这个警告:
didReceiveRemoteNotification:fetchCompletionHandler:],但你仍然需要添加"remote-notification"到列表的支持UIBackgroundMode在你的SInfo.plist.
我的Xcode版本是8.3.1.我真的想把它添加到Info.plist.我也遵循了一些教程,但他们也没有提到这一点.我该怎么办?
Tam*_*gel 202
是的,您应该启用后台模式/远程通知才能正确使用远程通知.
最简单的方法是通过项目设置.导航到目标 - >您的应用程序 - >功能 - >背景模式,然后选中远程通知.这将自动启用所需的设置.
Ale*_* B. 23
您还可以编辑所需的info.plist(打开为 - >源代码)并粘贴:
<dict>
<key>UIBackgroundModes</key>
<array>
<string>remote-notification</string>
</array>
Run Code Online (Sandbox Code Playgroud)
事实上,你不需要简单地将 UIBackgroundModes 添加到 .plist 来使用远程通知。
我知道我有点毛骨悚然(另一个答案大多很棒,也许从 iOS 11 开始有些新东西),但问题是指需要后台更新的推送通知,而他们没有。
这里的区别在于,有两种不同的方法可以接受 AppDelegate 上的通知;
这个不需要你使用 UIBackgroundModes:
optional func userNotificationCenter(_ center: UNUserNotificationCenter,
willPresent notification: UNNotification,
withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void)
Run Code Online (Sandbox Code Playgroud)
以上替换了自 iOS 11 起已弃用的内容:
optional func application(_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable : Any])
Run Code Online (Sandbox Code Playgroud)
而这个确实需要后台模式功能:
optional func application(_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable : Any],
fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)
Run Code Online (Sandbox Code Playgroud)
这里的关键是前一个(以及它取代的已弃用的)仅在应用程序处于前台时运行。如果应用程序在前台或后台,后者将运行。请参阅此特定块的规范:
使用此方法为您的应用程序处理传入的远程通知。与 application(_:didReceiveRemoteNotification:) 方法不同,该方法仅在您的应用程序在前台运行时调用,而当您的应用程序在前台或后台运行时,系统会调用此方法。
因此,如果您需要推送通知,则决定是否需要在后台运行 - 只有当您同时需要两者时,才应实施警告建议的方法。
从以下位置选择您的 .xcodeproj 文件从项目导航器,然后转到“签名和功能”,然后从库(command+ shift+l或单击(+ 功能))搜索“后台模式” ,然后将其拖放到“签名和功能”,然后选中“远程通知”和“后台处理”。另外(重要)通过单击+ 功能添加推送通知
| 归档时间: |
|
| 查看次数: |
34570 次 |
| 最近记录: |