2012-05-17 14 views
9

Estoy viendo un comportamiento peculiar con mi notificación push y me preguntaba si alguien tiene algún consejo sobre lo que hice mal o debería hacer.Got PN however application: application didReceiveRemoteNotification: no se activó cuando se selecciona el icono de la aplicación

tengo mi application:(UIApplication*)application didReceiveRemoteNotification: escrita de la siguiente manera:

- (void)application:(UIApplication*)application didReceiveRemoteNotification: (NSDictionary*)userInfo 
{ 
NSLog(@"Received notification: %@", userInfo); 
[self addMessageFromRemoteNotification:userInfo updateUI:YES]; 
} 

Como se puede ver, no estoy preocupado por el estado de la aplicación. Solo quiero registrar un mensaje cada vez que obtengo una PN.

Mi configuración es según la documentación de Apple y puedo recibir notificaciones push.

Los siguientes son los comportamientos esperados cuando un PN entra en juego:

  • aplicación está en el fondo y haga clic en la notificación: puedo ver la notificación en el centro de notificaciones. Haga clic en la notificación, la aplicación entra en primer plano y puedo ver que se llama al método anterior.
  • La aplicación está activa y ya en primer plano: Veo que se llama al método anterior.

Ahora, el siguiente es el peculiar comportamiento que estoy viendo:.

  • PN viene en verlo en las notificaciones, consulte la tarjeta de identificación en el icono de la aplicación. Hago clic en el ícono de la aplicación, no en la notificación: En esta instancia, encontré que el método anterior es , no llamado. Esperaba que se llamara ...

¿Alguien ha visto este comportamiento antes? ¿Es esto lo que debería suceder? No pude ver nada en la documentación de Apple con respecto a esto ... Además, ¿habría alguna forma de evitar esto?

Respuesta

2

Si la aplicación no se ejecuta en segundo plano, pero inicialmente lanzado desde la notificación de inserción y que tienen didFinishLaunchingWithOptions: implementado, es necesario implementar el código de allí:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions { 
    if (launchOptions != nil) { 
     NSDictionary* userInfo = [launchOptions valueForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"]; 
     if (userInfo != nil) { 
      NSDictionary* apsInfo = [userInfo objectForKey:@"aps"]; 
      NSString* custom = [userInfo objectForKey:@"yourCustomPushData"]; 
      // do something with it 
     } 
    } 
    //... 
} 
+0

no - tengo el mismo problema , ni se solicitó la iniciación de la ejecución ni la recepción remota de la notificación cuando la aplicación está en segundo plano y llega la notificación de inserción y se vuelve a la aplicación tocando su ícono – jab11

2

que tienen el mismo comportamiento. Me vuelve loco, pero creo que esa es la forma en que funciona iOS.

A continuación un extracto de la documentación de la manzana. Esto se refiere a la aplicación: didFinishLaunchingWithOptions cuando la aplicación no se está ejecutando. Parece que es lo mismo para cuando la aplicación está en background/didReceiveRemoteNotification.

"Si se toca el botón de acción (en un dispositivo con iOS), el sistema inicia la aplicación y la aplicación llama a la aplicación del delegado: didFinishLaunchingWithOptions: método (si está implementado); pasa en la carga de notificación (para notificaciones remotas) o el objeto de notificación local (para notificaciones locales)

Si el icono de la aplicación se toca en un dispositivo que ejecuta iOS, la aplicación llama al mismo método, pero no proporciona información sobre la notificación." Desde: http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/IPhoneOSClientImp/IPhoneOSClientImp.html#//apple_ref/doc/uid/TP40008194-CH103-SW1

0

Mrj de que no funciona en mi caso por lo que intentó opción

siguiente Si la aplicación no está en segundo plano que puedes usar siguiente código

//-------------- check notification when app is come to foreground after apllication get terminated ----------------// 

UILocalNotification *localNotif = 

[launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]; 

if (localNotif) { 

    [self handleRemotNotification:[launchOptions valueForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"]]; // private method 


}