解析来自didReceiveRemoteNotification:fetchCompletionHandler的警告


69

从parse.com添加以下代码后,我得到一个错误:

- (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo
fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
    if (application.applicationState == UIApplicationStateInactive) {
        [PFAnalytics trackAppOpenedWithRemoteNotificationPayload:userInfo];
    }
}

我不太了解发生了什么,但是我在日志中收到以下警告:

您已经实现了-[application:didReceiveRemoteNotification:fetchCompletionHandler:],但仍需要在Info.plist中的受支持的UIBackgroundModes列表中添加“ remote-notification”。

我认为在您的plist文件中添加即可UIBackgroundModes - remote-notification解决此问题,

但是,当我这样做时,它将改为以下内容:

Required Background Modes -> App downloads content in response to push notifications

我的应用程序不执行哪个操作,因此我对于为什么要首先执行此操作感到困惑。

Answers:


31

如果您不打算获取数据以响应远程通知,我想您可以实现以下委托方法:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 

例如

- (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo {
    if (application.applicationState == UIApplicationStateInactive) {
        [PFAnalytics trackAppOpenedWithRemoteNotificationPayload:userInfo];
    }
}

而不是您正在使用的当前版本。


这正是我所需要的:如果您遵循解析指南,则假设您要通过推送在后台下载数据。我不。所以这个答案对我来说是正确的。
xaphod

2
主要区别在于您没有实现方法的fetchCompletionHandler:版本didReceiveRemoteNotification:
pkamb

5
在iOS 10- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo中已弃用
Giorgio

211

如果您不想手动在.plist文件中添加密钥,那么这里是@MurraySagal答案的图形版本,请按照1到7的步骤进行操作。:)

在此处输入图片说明

注意:如果您无法阅读这些步骤,则可以使用Command+ +(用于放大)和Command+ -(用于缩小)的组合来缩小当前选项卡。如果Command不起作用,可以尝试使用Ctrl


1
这解决了我遇到的GCM问题。这是一种很好的方法
-MNM

1
完美的解决方案!
Chetan Dobariya '16

38

我认为@djshiow无法解决您的问题。

您需要在info.plist文件中添加以下内容:

远程通知

1)添加新行,然后在左列中选择必需的背景模式

2)在项目0行上,单击右列,然后输入:remote-notification。按Enter键。

资料来源:http//hayageek.com/ios-silent-push-notifications/


22

在Xcode 6中:

  • 在项目浏览器中,单击项目
  • 在“项目和目标”列表中,单击目标。
  • 点击功能
  • 展开并打开背景模式
  • 单击远程通知

这会将Required background modes键和App downloads content in response to push notifications值添加到info.plist


0

当您使用新的didReceive ...方法时,您应该做两件事:

  1. 在您的plist中添加必要的条目
  2. 添加完成处理程序,该处理程序将处理事件以处理数据

如果您不想下载任何数据,可以将其添加到didReceive ...方法中

completionHandler(.NoData)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.