didReceiveRemoteNotification not working in the background didReceiveRemoteNotification not working in the background xcode xcode

didReceiveRemoteNotification not working in the background


Implementing didReceiveRemoteNotification and didReceiveRemoteNotification:fetchCompletionHandler is the correct way, but you also need to do the following:

Make sure to register for remote notifications, see documentation here:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{        [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];    return YES;}

Also make sure to edit Info.plist and check the "Enable Background Modes" and "Remote notifications" check boxes:

enter image description here

Additionally, you need to add "content-available":1 to your push notification payload, otherwise the app won't be woken if it's in the background (see documentation here updated):

For a push notification to trigger a download operation, thenotification’s payload must include the content-available key with itsvalue set to 1. When that key is present, the system wakes the app inthe background (or launches it into the background) and calls the appdelegate’sapplication:didReceiveRemoteNotification:fetchCompletionHandler:method. Your implementation of that method should download therelevant content and integrate it into your app

So payload should at least look like this:

{    aps = {        "content-available" : 1,        sound : ""    };}


  1. Register for push notification in app delegate.
  2. Add background mode in app capabilities.
  3. Add "content-available"="1" while sending the push notification(if you are using firebase replace "content-available"="1" by "content_available"="true" while sending the push notification from server side).


I had the same problem. Notification banner appeared, but -application:didReceiveRemoteNotification:fetchCompletionHandler: method was not called. The solution for me that worked was to add implementation of - application:didReceiveRemoteNotification: method and forward call to -application:didReceiveRemoteNotification:fetchCompletionHandler::

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {    self.application(application, didReceiveRemoteNotification: userInfo) { (UIBackgroundFetchResult) in    }}