2011-03-28 20 views
7

No obtengo ninguna opción de inicio después de una notificación de inserción; Aquí está el código que tengo pero no de los NSLogs parecen imprimir en el área de depuración.Opciones de inicio de iphone

UILocalNotification *localNotif = 
[launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]; 

if (localNotif) { 
    NSString *itemName = [localNotif.userInfo objectForKey:@"aps"]; 
    NSLog(@"Custom: %@", itemName); 
} else { 
    NSLog(@"//////////////////////////"); 

} 

cuando abro la aplicación (a través de prensado vista sobre la notificación de inserción) que va a la secuencia de comandos didReceiveRemoteNotification, no estoy seguro si eso es destinado a suceder ..

gracias por leer.

Respuesta

17

Su aplicación recibe notificaciones push a través de varias rutas, dependiendo del estado de su aplicación cuando se recibe.

Si su aplicación no se inicia (ni siquiera se suspende en el fondo), el launchOptions contendrá la carga de notificación (clave UIApplicationLaunchOptionsRemoteNotificationKey).

Si ya se está ejecutando o está suspendido en segundo plano, la aplicación recibirá las notificaciones a través de application:didReceiveRemoteNotification: en su delegado de la aplicación.

El proceso es el mismo para las notificaciones locales (UIApplicationLaunchOptionsLocalNotificationKey de aplicación: didFinishLaunchingWithOptions: y application:didReceiveLocalNotification:)

+0

gracias, por lo que es la nada por lo que cuando la aplicación está en el fondo de la aplicación se puede obtener el mismo resultado ... yo quiero que cambie la página cuando la página personalizada del token es la página 2 o 3 ... – user633268

+0

Puede realizar las mismas acciones en 'application: didFinishLaunchingWithOptions:' que en 'application: didReceiveRemoteNotification:'. Solo tenga en cuenta que en el primer caso, su aplicación acaba de comenzar para que sepa perfectamente lo que se muestra y, en el segundo caso, el usuario podría estar en cualquier lugar de su aplicación. – Jilouc

+0

ok gracias, una pregunta más ¿cómo recomendarías que cambie la vista? Me dijeron que hiciera NSUserDefaults, pero me gustaría algo que vaya inmediatamente. y si el usuario está en esa página, revíselo. – user633268

0

Si desea una notificación local (supongo que con su nombre var) reemplace UIApplicationLaunchOptionsRemoteNotificationKey por UIApplicationLaunchOptionsLocalNotificationKey y esto debería funcionar.

0
(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { 
     NSLog(@"Alert message: %@",[[userInfo valueForKey:@"aps"] valueForKey:@"alert"]); 
} 
1

un error descubierto:

NSDictionary *remoteNotif = [launchOptions objectForKey: 
           UIApplicationLaunchOptionsRemoteNotificationKey]; 

Si desea recibir la notificación remota, NSDictionary debe usarse no UILocalNotification

La notificación remota es una carga útil que contiene argumentos, no una notificación local. Es posible que desee considerar esta cuestión url:

Crash when handling remote notification when app not running

Si usted quiere hacer la notificación local cambiarlo como la sugerencia de Ludovic

0

Puede utilizar NSUserDefaults para hacer el truco. En su AppDeligate.m, configure un bool en YES la primera vez. Entonces, después de eso, nunca llega al NO.

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    //add this if loop 
     if (![[NSUserDefaults standardUserDefaults] boolForKey:@"HasLaunchedOnce"]) 
     { 
      [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"HasLaunchedOnce"]; 
      [[NSUserDefaults standardUserDefaults] synchronize]; 
     } 
    } 
1

Las respuestas dadas arriba son correctas. Yo uso principalmente el siguiente fragmento en mi solicitud: didFinishLaunchingWithOptions:

if let remoteNotifPayload = launchOptions?[UIApplicationLaunchOptionsKey.remoteNotification] as? [AnyHashable: Any] { 
     notificationsController.didReceiveRemoteNotification(with: remoteNotifPayload) 
    } 
Cuestiones relacionadas