Reimposta le impostazioni di notifica push per l’app

Sto sviluppando un’applicazione con notifiche push. Per verificare tutti i possibili modi di interazione dell’utente, vorrei testare la mia app quando un utente rifiuta di triggersre le notifiche push per la mia app durante il primo avvio.

La finestra di dialogo (avviata da registerForRemoteNotificationTypes ), tuttavia, viene visualizzata solo una volta per ogni app. Come faccio a ripristinare la memoria della mia app del sistema operativo iPhone. L’eliminazione dell’app e la reinstallazione non sono d’aiuto.

Nota tecnica TN2265: risoluzione dei problemi relativi alle notifiche push

La prima volta che un’applicazione push abilitata si registra per le notifiche push, iOS chiede all’utente se desidera ricevere notifiche per quell’app. Una volta che l’utente ha risposto a questo avviso, non viene più presentato a meno che il dispositivo non venga ripristinato o l’app sia stata disinstallata per almeno un giorno.

Se vuoi simulare una prima esecuzione della tua app, puoi lasciare l’app disinstallata per un giorno. È ansible ottenere quest’ultimo senza attendere un giorno impostando l’orologio del sistema in avanti di un giorno o più, spegnendo completamente il dispositivo, quindi riaccendendo il dispositivo.

Aggiornamento: Come notato nei commenti qui sotto, questa soluzione ha smesso di funzionare da iOS 5.1. Vorrei incoraggiare l’archiviazione di un bug con Apple in modo che possano aggiornare la loro documentazione. La soluzione attuale sembra reimpostare il contenuto e le impostazioni del dispositivo.

Aggiornamento: la nota tecnica è stata aggiornata con nuovi passaggi che funzionano correttamente da iOS 7.

  1. Elimina la tua app dal dispositivo.
  2. Spegnere completamente il dispositivo e riaccenderlo.
  3. Vai su Impostazioni> Generali> Data e ora e imposta la data in anticipo di un giorno o più.
  4. Spegnere completamente il dispositivo e riaccenderlo.

AGGIORNAMENTO a partire da iOS 9

Semplicemente eliminando e reinstallando l’app, lo stato della notifica verrà reimpostato su Non notDetermined (il che significa che appariranno messaggi di richiesta).

Grazie alla risposta di Gomfucius qui sotto: https://stackoverflow.com/a/33247900/704803

Un altro solo per testare la soluzione è semplicemente cambiando il tuo ID bundle. Basta non dimenticare di cambiarlo di nuovo una volta che hai finito!

In iOS 9.0.2, ricevo l’avviso di notifica push del registro ogni volta che elimino l’app e la reinstalla. Questo vale sia per i download di produzione di AppStore che per la modalità ad hoc.

AGGIORNAMENTO: è confermato che funziona per iOS 9.x.

Come già notato, l’approccio per reimpostare lo stato di notifica per un’app su un dispositivo viene modificato per iOS5 e successivi.

Questo funziona per me su iOS6:

  • Rimuovi l’app dal dispositivo
  • Imposta il datetime del dispositivo due o più giorni prima
  • Riavvia il dispositivo
  • Imposta il datetime del dispositivo due o più giorni prima
  • Riavvia il dispositivo
  • Installa ed esegui nuovamente l’app

Tuttavia questo farà solo apparire di nuovo il prompt iniziale – non rimuoverà nessun altro materiale relativo allo stato push.

Il plist: /private/var/mobile/Library/RemoteNotification/Clients.plist

… contiene i client registrati per le notifiche push. La rimozione della voce dell’app farà apparire nuovamente la richiesta

Lo fa programmaticamente sembra funzionare per me ogni volta. Ho una build con la seguente riga non commentata:

  [[UIApplication sharedApplication] unregisterForRemoteNotifications]; 

Lo eseguo ogni volta che voglio annullare la registrazione da PN. Potrebbe essere necessario chiudere l’app in modo esplicito dall’elenco dei recenti e giocare con il Centro di notifica nell’app Impostazioni per farlo correttamente.

Inoltre, l’interfaccia utente chiede all’utente di registrarsi per PN potrebbe non essere visualizzata. Non sono sicuro se sia stato disabilitato in una qualsiasi delle recenti versioni di iOS.

Come diceva ianolito, l’impostazione della data dovrebbe funzionare:

È ansible ottenere quest’ultimo senza attendere un giorno impostando l’orologio del sistema in avanti di un giorno o più, spegnendo completamente il dispositivo, quindi riaccendendo il dispositivo.

Ho notato sul mio dispositivo (iPhone 4, iOS 6.1.2) l’impostazione dell’orologio di sistema un giorno in avanti o addirittura un paio di giorni non ha funzionato per me. Così ho impostato la data in avanti di un mese e poi ha funzionato e la mia applicazione ha mostrato di nuovo il prompt delle notifiche.

Spero che questo aiuti per chiunque, può essere una sorta di mal di testa!

Sono d’accordo con micmdk .. Avevo una configurazione dell’ambiente di sviluppo con le notifiche push e avevo bisogno di un modo per resettare il mio telefono per sembrare un’installazione iniziale … e solo questi passaggi precisi hanno funzionato per me … richiede DUE riavvii del dispositivo:

Da APPLE TECH DOC:

Reimpostazione dell’avviso di authorization alle notifiche push su iOS La prima volta che un’applicazione push abilitata viene registrata per le notifiche push, iOS chiede all’utente se desidera ricevere notifiche per quell’app. Una volta che l’utente ha risposto a questo avviso, non viene più presentato a meno che il dispositivo non venga ripristinato o l’app sia stata disinstallata per almeno un giorno.

Se vuoi simulare una prima esecuzione della tua app, puoi lasciare l’app disinstallata per un giorno. È ansible ottenere quest’ultimo senza attendere effettivamente un giorno seguendo questi passaggi:

  1. Elimina la tua app dal dispositivo.

  2. Spegnere completamente il dispositivo e riaccenderlo.

  3. Vai su Impostazioni> Generali> Data e ora e imposta la data in anticipo di un giorno o più.

  4. Spegnere completamente il dispositivo e riaccenderlo.

Mi sono interrogato su questo in passato e sono giunto alla conclusione che in realtà non era un test valido per il mio codice. Non penso che il tuo codice applicativo possa effettivamente dire la differenza tra qualcuno che ha rifiutato le notifiche la prima volta o successivamente lo ha disabilitato dalle impostazioni di notifica dell’iPhone. È vero che l’esperienza utente è diversa ma è nascosta all’interno della chiamata a registerForRemoteNotificationTypes.

La chiamata a unregisterForRemoteNotifications non rimuove completamente l’applicazione dalle impostazioni delle notifiche, sebbene rimuova il contenuto delle impostazioni per quell’applicazione. Quindi, questo non farà in modo che la finestra di dialogo venga presentata una seconda volta all’utente al prossimo avvio dell’app (almeno non sulla v3.1.3 con cui sto attualmente effettuando il test). Ma come ho detto sopra, probabilmente non dovresti preoccupartene.

La stessa nota tecnica a cui si fa riferimento nella risposta accettata ( TN2265 – Risoluzione dei problemi relativi alle notifiche push) è stata aggiornata con una soluzione per iOS 5 e versioni successive.

In breve: crea un backup e ripristina ogni volta.

Su iOS 5 e versioni successive, reimpostare l’avviso di authorization alle notifiche push ripristinando il dispositivo da un backup (11450187). Ecco i passaggi per farlo in modo efficiente:

  1. Usa Xcode Organizer per installare la tua app sul dispositivo. La chiave è installare l’app per la prima volta senza eseguirla.
  2. Usa iTunes per eseguire il backup del dispositivo.
  3. Esegui l’app. Verrà presentato l’avviso di authorization alle notifiche push.
  4. Quando si desidera ripristinare l’avviso di autorizzazioni di notifiche push, ripristinare il dispositivo dal backup creato nel primo passaggio.

La nota tecnica Apple descrive inoltre che è ansible ripristinare il dispositivo per reimpostare la finestra di dialogo Notifica push.

Non è detto che puoi anche utilizzare l’opzione “Generale -> Ripristina -> Cancella tutto il contenuto e le impostazioni” sul dispositivo stesso (iOS 5.x).

Oltre alla risposta di ianolito.

Ho avuto lo stesso problema con un’app che ho scaricato un anno fa e ho rifiutato inizialmente la notifica push. Ora volendo le notifiche push, questi passaggi hanno funzionato per me su iOS 7 beta. Non sei sicuro di quale (i) punto (i) l’abbia fatto esattamente.

  • Chiudi ed elimina l’app.
  • Vai alle impostazioni di iCloud ed elimina l’app da iCloud. Fai questo su tutti gli altri dispositivi in ​​cui hai il backup iCloud per le app abilitate. Dopo la distriggerszione e l’eliminazione, effettua un nuovo backup. L’app non dovrebbe essere più elencata sotto i backup. (Questo è forse il motivo per cui la nota tecnica di Apple descritta da ianolito ha smesso di funzionare in iOS 5, poiché iCloud è stato introdotto in iOS 5 e molti hanno il backup iCloud per le app abilitate.)
  • Vai alle impostazioni del tuo tempo e imposta l’ora più di 1 mese prima.
  • Spegni l’iPhone (nessun reset).
  • Aspetta un minuto, riaccendilo e scarica di nuovo l’app.
  • Avvia l’app e mi è stata presentata nuovamente la finestra di dialogo.
  • Abilita nuovamente il backup dell’app, poiché è ancora distriggersto. Correggere il tempo.

Grazie a Dio non ho dovuto “Cancellare tutti i contenuti e le impostazioni”. Forse aiuterà qualcuno.

Dopo ore di ricerche e senza fortuna con i suggerimenti sopra, questo ha funzionato come per un fascino per 3.x +

 override func viewDidLoad() { super.viewDidLoad() requestAuthorization() } func requestAuthorization() { if #available(iOS 10.0, *) { UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { (granted, error) in print("Access granted: \(granted.description)") } } else { // Fallback on earlier versions } }