2015-06-16 8 views
9

La mia app riceve notifica push e mostra il messaggio informativo appropriato per quello. Tuttavia, quando faccio clic sul messaggio, l'applicazione diventa attiva ma l'applicazione non ha chiamatoFinishLaunchingWithOptions, il che è giusto, perché l'applicazione non è sospesa e si limita a essere attiva. La domanda è: come posso assicurarmi che l'utente abbia fatto clic sul messaggio quando l'applicazione diventa in primo piano?Come gestire la notifica push quando l'app è in background ma non sospesa

+0

La prima domanda è che cosa intendi pulsante di visualizzazione, non ti capisco se la tua app è in modalità ground ground e fai clic sul banner di notifica quindi 'didReceiveRemoteNotification' sarà chiamato – iPatel

+0

quando arriva la notifica push e l'app è in background, il sistema richiede una vista in cima a iphone con qualche messaggio (dal payload della notifica). Tuttavia, quando faccio clic su quell'app, l'app diventa attiva, ma didFinishLaunchingWithOptions non viene chiamata – taffarel

+0

chiamata "didFinishLaunchingWithOptions' solo quando l'app non è attiva. – iPatel

risposta

6

penso che quello che stai cercando è questo metodo delegato app:

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

Si chiamerà se la vostra applicazione è in background, e il carico utile di notifica sarà consegnato nel dizionario userInfo. Ciò contrasta con la situazione in cui l'app viene avviata da avvio a freddo, quando questo metodo fa non viene chiamato, e invece si verifica nel dizionario launchOptions per il carico utile.

Tuttavia il preferito modo per farlo in quanto iOS7 è quello di utilizzare questo:

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

Questo metodo viene chiamato quando un utente tocca su una notifica, indipendentemente dal fatto che l'applicazione è lanciato da avvio a freddo o in primo piano dallo sfondo. Quindi, anche se non stai utilizzando il completamentoHandler, fornisce un modo più coerente di accedere al carico utile della notifica. Se questo metodo è presente, il vecchio non viene chiamato.

0

Se ho letto correttamente la domanda, mi stai chiedendo come assicurarsi che l'app sia stata portata in primo piano come risultato del "clic" dell'utente che agisce su una notifica push.

Quando l'app non è in esecuzione, è possibile utilizzare -application:didFinishLaunchingWithOptions: come si menziona. Il dizionario launchOptions contiene il payload, ecc. - Non lo descriverò poiché sai già come funziona.

Tuttavia, quando l'app è in esecuzione, il metodo non verrà chiamato. Invece, viene chiamato - application:didReceiveRemoteNotification:. BTW questo viene chiamato se l'app era già in primo piano OPPURE se era in background e l'utente ha "cliccato" sul banner/avviso di notifica push per aprire l'app. Non sarà chiamato altrimenti: quindi credo che questo sia esattamente quello che stai cercando.

Il dizionario utente fornito da questo metodo conterrà i dati delle notifiche, analogamente a -application:didFinishLaunchingWithOptions: per ulteriori elaborazioni ad hoc. (Nota: userInfo e launchOptions sono semanticamente diversi, ma si spera che questo sia ovvio :))