didReceiveRemoteNotification no funciona en segundo plano

Estoy trabajando en una gran aplicación con una gran cantidad de código henetworkingado. Actualmente, hay una implementación para:

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

El problema es que solo se llama cuando la aplicación está en primer plano O cuando el usuario toca la notificación mientras la aplicación está en segundo plano. Intenté implementar:

 - (void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler 

Pero la aplicación se comporta igual. En cualquier caso, este método no se llama cuando la aplicación está en segundo plano. ¿Cual podría ser el problema?

Implementando didReceiveRemoteNotification y didReceiveRemoteNotification:fetchCompletionHandler es la forma correcta, pero también debe hacer lo siguiente:

Asegúrese de registrarse para las notifications remotas, consulte la documentation aquí :

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

También asegúrese de editar Info.plist y marque las Info.plist verificación "Habilitar modos de background" y "Notificaciones remotas":

introduzca la descripción de la imagen aquí

Además, debe agregar "content-available":1 a su carga de notifications push, de lo contrario, la aplicación no se activará si está en segundo plano (consulte la documentation aquí ):

Para que una notificación push active una operación de descarga, la carga útil de la notificación debe include la key de contenido disponible con su valor establecido en 1. Cuando esa key está presente, el sistema despierta la aplicación en segundo plano (o la inicia en segundo plano) y llama a la aplicación del delegado de la aplicación: didReceiveRemoteNotification: fetchCompletionHandler: method. Su implementación de ese método debe download el contenido relevante e integrarlo en su aplicación

Entonces, la carga debería verse así:

 { aps = { "content-available" : 1, sound : "" }; } 
  1. Regístrese para la notificación push en el delegado de la aplicación.
  2. Agregue el modo de background en las capacidades de la aplicación.
  3. Agregue "content-available" = "1" mientras envía la notificación push (si está usando firebase reemplace "content-available" = "1" por "content_available" = "true" mientras envía la notificación push desde el lado del server).

Yo tuve el mismo problema. Apareció el banner de notificación, pero -application: didReceiveRemoteNotification: fetchCompletionHandler: no se llamó al método. La solución para mí que funcionó fue agregar la implementación de – 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 } }