Parse warning from didReceiveRemoteNotification:fetchCompletionHandler

I am getting an error after adding this code from parse.com:

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

I don't really understand what is going on, but I am getting this warning in the log:

You've implemented -[ application:didReceiveRemoteNotification:fetchCompletionHandler:], but you still need to add "remote-notification" to the list of your supported UIBackgroundModes in your Info.plist.

I think adding in your plist file UIBackgroundModes - remote-notification would fix the problem,

But when I do that, it changes the words to the follow:

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

Which my app doesn't do, so I am confused as to why I am doing this in the first place.


Solution 1:

If you don't want to manually add key in your .plist file then here's a graphical version of @MurraySagal's answer, follow the steps from 1 to 7 and you'll be done. :)

enter image description here

Note: If you can't read out the steps, you can zoom out your current tab by using combination of Command++ (for zoom in) and Command+- (for zoom out). If Command won't work, you can try with Ctrl.

Solution 2:

I think @djshiow is not solving your problem.

You need to add the following in your info.plist file:

remote-notification

1) Add a new row and, on the left column, select Required background modes.

2) On Item 0 row, click on the right column and type: remote-notification. Press Enter.

Source: http://hayageek.com/ios-silent-push-notifications/

Solution 3:

If you don't intend to fetch data in response to a remote notification I think you can implement this delegate method:

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

e.g.

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

instead of the current one you're using.