2013-10-28 10 views
6

Secondo didReceiveRemoteNotification when in background, eravamo abituati a gestire l'utente che apre l'app facendo clic sul pulsante di azione su una notifica push (o facendo scorrere la notifica push, a seconda di come l'utente vede le notifiche push) implementando -application:didReceiveRemoteNotification: e quindi controllando all'interno del metodo se l'applicazione applicationState non era attiva.Come stabilire se l'utente ha aperto l'app con notifica con la modalità di notifica remota di iOS 7?

In iOS 7, c'è la nuova modalità di sfondo remote-notification, che consente all'applicazione di eseguire il recupero in background quando viene visualizzata una notifica remota all'utente (senza che l'utente debba necessariamente fare nulla per la notifica). Per supportare questa modalità, è necessario implementare il metodo -application:didReceiveRemoteNotification:fetchCompletionHandler:.

The documentation for -application:didReceiveRemoteNotification: dice che se l'applicazione delegata implementa il metodo application:didReceiveRemoteNotification:fetchCompletionHandler:, quindi "l'oggetto app chiama tale metodo invece di questo". Il che significa che non possiamo usare -application:didReceiveRemoteNotification: per gestire le notifiche remote, poiché non verrà chiamato.

Probabilmente dovremmo inserire la logica di gestione in application:didReceiveRemoteNotification:fetchCompletionHandler:, ma il trucco precedente per gestirlo non ha più senso - in precedenza, dipendevamo dal fatto che l'unico modo per chiamarequando l'app non è attiva era se l'utente ha toccato il pulsante di azione sulla notifica per aprire l'app. Tuttavia, ora, l'intero punto della modalità di background remote-notification è che può chiamare lo application:didReceiveRemoteNotification:fetchCompletionHandler: sullo sfondo ogni volta che viene ricevuta una notifica remota, prima che l'utente faccia qualcosa.

Quindi, come possiamo ora sapere quando l'utente apre l'app utilizzando il pulsante di azione sulla notifica?

risposta

6

È ancora controllare lo stato dell'applicazione in application:didReceiveRemoteNotification:fetchCompletionHandler:

  • UIApplicationStateBackground - App è in background riceve una notifica push
  • UIApplicationStateInactive - App è l'apertura da parte dell'utente toccando una notifica
+0

UIApplicationStateInactive può accadere anche quando: - Il push arriva e l'app sta cambiando in altro, voglio dire con la vista multitask aperta. - L'app è in esecuzione in primo piano ma il centro di notifica è aperto. – Jesuslg123

0

I era usare questa funzione di delegato per aggiungere il numero di notifica .

Causa il nostro server non invia il badge ai nostri clienti. Quindi ho usato lo strano metodo per aggiungere 「Numero di notifica」 con questa funzione di delegato e aggiungo anche un codice per passare a UIViewController in questa funzione.

Ho scoperto quando uso il server push Notifica alla mia app di test e lo stato dell'applicazione di test è in background, anche io sto usando Twitter o Safari.

L'app di test passa inoltre a UIViewController a un altro UIViewController dopo che ho inviato la notifica Notifica dal server.