Ci sono molti thread di stackoverflow su questo argomento, ma non ho ancora trovato una buona soluzione.
Se l'applicazione non è in background, posso verificare launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]
in application:didFinishLaunchingWithOptions:
chiamata per vedere se è aperto da una notifica.
Se l'app è in background, tutti i post suggeriscono di utilizzare application:didReceiveRemoteNotification:
e controllare lo stato dell'applicazione. Ma come ho sperimentato (e anche come suggerisce il nome di questa API), questo metodo viene chiamato quando viene ricevuta la notifica, invece di essere toccato.
Quindi il problema è che, se l'app viene avviata e poi in background e sai che una notifica viene ricevuta da application:didReceiveNotification
( application:didFinishLaunchWithOptions:
non si attiverà a questo punto), come fai a sapere se l'utente ha ripreso l'app da toccando la notifica o semplicemente toccando il icona dell'app? Perché se l'utente ha toccato la notifica, l'aspettativa è di aprire la pagina menzionata in quella notifica. Altrimenti non dovrebbe.
Potrei usarlo handleActionWithIdentifier
per le notifiche di azioni personalizzate, ma questo viene attivato solo quando viene toccato un pulsante di azione personalizzato, non quando l'utente tocca il corpo principale della notifica.
Grazie.
MODIFICARE:
dopo aver letto una risposta di seguito, ho pensato in questo modo di poter chiarire la mia domanda:
Come possiamo differenziare questi 2 scenari:
(A) 1.app va in background; 2. notifica ricevuta; 3. l'utente tocca la notifica; 4. l'app entra in primo piano
(B) 1.app va in background; 2. notifica ricevuta; 3. l'utente ignora la notifica e tocca successivamente l'icona dell'app; 4. l'app entra in primo piano
Poiché application:didReceiveRemoteNotification:
viene attivato in entrambi i casi al passaggio 2.
Oppure, dovrebbe application:didReceiveRemoteNotification:
essere attivato nel passaggio 3 solo per (A), ma in qualche modo ho configurato la mia app in modo errato, quindi lo vedo al passaggio 2?