2012-05-17 9 views
9

Sto vedendo un comportamento particolare con la mia notifica push e mi chiedevo se qualcuno avesse qualche consiglio su cosa ho fatto di sbagliato o dovrei fare.Got PN tuttavia application: application didReceiveRemoteNotification: non attivato quando l'icona dell'app è selezionata

ho il mio application:(UIApplication*)application didReceiveRemoteNotification: scritto come segue:

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

Come potete vedere, io non sono preoccupato per lo stato delle app. Voglio solo registrare un messaggio ogni volta che ottengo una PN.

La mia configurazione è conforme alla documentazione di Apple e posso ricevere notifiche push.

Di seguito sono riportati i comportamenti previsti quando una PN è disponibile in:

  • App è in background e che cliccare sul notifica: posso vedere la notifica nella centro di notifica. Fai clic sulla notifica, l'app arriva in primo piano e posso vedere il metodo sopra riportato.
  • L'app è attiva e già in primo piano: Posso vedere il metodo sopra riportato.

Ora, il seguente è il comportamento particolare che sto vedendo:.

  • PN è disponibile in Guardala nelle notifiche, vedere il badge sull'icona dell'app. Faccio clic sull'icona dell'app - non sulla notifica: In questo caso ho trovato che il metodo sopra riportato è non chiamato. Mi aspettavo che si chiamasse ...

Qualcuno ha visto questo comportamento prima? È questo che dovrebbe accadere? Non riuscivo a vedere nulla nella documentazione Apple riguardo a questo ... Inoltre, ci sarebbe un modo per aggirare questo?

risposta

2

Se l'applicazione non era in funzione in background, ma inizialmente lanciato dalla notifica push e si deve didFinishLaunchingWithOptions: implementati, è necessario implementare il codice c'è:

- (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 - io ho lo stesso problema , non è stato possibile eseguire ilfinishlaunching con le opzioni né è necessario richiamare la nototifica quando l'app è in background e arriva la notifica push e si ritorna all'app toccando la sua icona – jab11

2

mi hanno lo stesso comportamento. Mi fa impazzire ma penso che sia il modo in cui funziona iOS.

Sotto un estratto dalla documentazione della mela. Riguarda l'applicazione: didFinishLaunchingWithOptions quando l'app non è in esecuzione. Sembra che sia lo stesso per quando l'app è in background/didReceiveRemoteNotification.

"Se il pulsante di azione viene toccato (su un dispositivo con iOS), il sistema avvia l'applicazione e l'applicazione chiama l'applicazione del suo delegato: didFinishLaunchingWithOptions: metodo (se implementato), passa nel carico utile di notifica (per le notifiche remote) o l'oggetto di notifica locale (per le notifiche locali)

Se l'icona dell'applicazione viene toccata su un dispositivo con iOS, l'applicazione chiama lo stesso metodo, ma non fornisce informazioni sulla notifica." Da: http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/IPhoneOSClientImp/IPhoneOSClientImp.html#//apple_ref/doc/uid/TP40008194-CH103-SW1

0

MRJ di non funziona nel mio caso così ho provato seguente opzione

se l'applicazione non è in fondo si dovrebbe utilizzare seguente codice

//-------------- 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 


}