2012-05-18 31 views
5

Desidero ottenere i dati dal messaggio di notifica push. Ricevo correttamente i dati quando l'app è in primo piano e in background. ma non riesco a ottenere i dati quando l'app viene chiusa e l'utente preme il pulsante di visualizzazione sulla notifica push. Ho scritto che il codice dell'applicazione ha terminato il lancio. Questo codice causa l'arresto anomalo dell'app quando si preme il pulsante Visualizza del messaggio di notifica push. Se commento il codice, l'app non si blocca. Gentilmente aiutami a recuperare i dati dalla notifica push quando l'app viene chiusa e l'utente premi il pulsante di visualizzazione sulla notifica push. Lo apprezzerò davvero.Recupero dati notifica recupero

if(launchOptions != nil){ 
     NSDictionary *tmpDic = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]; 
     if (tmpDic!=nil) { 
      pushedMessage=[NSString stringWithFormat:@"%@",[[tmpDic objectForKey:@"aps"] objectForKey:@"alert"]]; 
      pushedCountry=[NSString stringWithFormat:@"%@",[tmpDic objectForKey:@"country"]]; 
      [self saveToDatabase]; 
     } 
    } 
+0

siete lavoro a Ios 4 Ya IOS 5 – Deepesh

+0

vuoi dire che non è possibile in IOS4 e 5? –

+0

per favore Nslog tmpDic e check-in console dispositivo – Deepesh

risposta

-1

Quando si fa clic sul pulsante Vista

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

questo metodo viene chiamato e userinfo conterrà tutti i dati

cose che si stanno facendo in didfinishlaunch metodo fare didReceiveRemoteNotification:

0

non completamente capire che cosa il vostro richiesto, ma si può fare cose con quello che è di essere di essere spinta con una funzione nel delegato app

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

Ora è possibile aggiungere i dati per i dati di base o sqlite. Questo potrebbe non essere pertinente alla tua domanda, ma è il meglio che posso dare in base a ciò che hai chiesto nella tua domanda.

0

Vedere il mio commento sulla risposta di cui sopra.

Ecco doc di Apple:

Se l'applicazione non è in esecuzione quando una notifica push arriva, il metodo lancia l'applicazione e fornisce le informazioni appropriate nel dizionario opzioni lancio. L'app non chiama questo metodo per gestire tale notifica push. Invece, l'implementazione dell'applicazione : willFinishLaunchingWithOptions: o : didFinishLaunchingWithOptions: il metodo deve ottenere i dati del carico utile della notifica push e rispondere in modo appropriato.

quindi è necessario implementare:

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

Così come la gestione delle launchOptions in:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
+0

Implementazione difficile da parte di Apple. – Chris

1

Si prega di provare questo ...

Aggiungere questo codice AppDelegate. m => didFinishLaunchingWithOptions

if ([launchOptions valueForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"]) { 

    [self application:application didReceiveRemoteNotification:launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]]; 

} 
1

Da iOS7 abbiamo il metodo delegato di seguito per gestire la notifica push quando l'applicazione è in terra posteriore o non in esecuzione

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