Domanda

Sto sviluppando un'app con notifiche push.Per verificare tutte le possibili modalità di interazione dell'utente, vorrei testare la mia app quando un utente rifiuta di abilitare le notifiche push per la mia app durante il primo avvio.

Il dialogo (iniziato da registerForRemoteNotificationTypes), tuttavia, viene visualizzato solo una volta per app.Come faccio a ripristinare la memoria del sistema operativo iPhone della mia app.Eliminare l'app e reinstallarla non aiuta.

È stato utile?

Soluzione

Nota tecnica TN2265: Risoluzione dei problemi notifiche push

  

La prima volta che un'applicazione push-enabled   registri per le notifiche push, IOS   chiede all'utente se desiderano ricevere   notifiche per tale applicazione. Una volta che il   utente ha risposto a questa segnalazione è   non ha presentato ancora una volta a meno che il dispositivo   viene ripristinato o l'applicazione è stata   disinstallato per almeno un giorno.

     

Se si vuole simulare una prima volta   eseguire della vostra applicazione, è possibile lasciare l'applicazione   disinstallato per un giorno. È possibile ottenere   quest'ultimo senza effettivamente aspettare un   giorno impostando l'orologio di sistema   inoltrare un giorno o più, girando il   dispositivo completamente, poi girando   il dispositivo indietro.

Aggiornamento: Come notato nei commenti qui sotto, questa soluzione ha smesso di funzionare dal momento che iOS 5.1. Vorrei incoraggiare il deposito di un bug con Apple in modo da poter aggiornare la loro documentazione. La soluzione attuale sembra essere il ripristino dei contenuti e delle impostazioni del dispositivo.

Aggiornamento:. La nota tecnica è stata aggiornata con nuovi passi che funzionano correttamente come di iOS 7

  
      
  1. Elimina la vostra applicazione dal dispositivo.
  2.   
  3. Spegnere l'apparecchio completamente e riaccenderlo.
  4.   
  5. Vai in Impostazioni> Generali> Data e ora e impostare la data avanti di un giorno o più.
  6.   
  7. Spegnere il dispositivo completamente nuovo e riaccenderlo.
  8.   

UPDATE come di iOS 9

È sufficiente eliminare e reinstallare l'app ripristinare lo stato di notifica per notDetermined (che significa richieste apparirà).

Grazie alla risposta da Gomfucius di seguito: https://stackoverflow.com/a/33247900/704803

Altri suggerimenti

Un altro solo per i test soluzione a questo è semplicemente cambiando il vostro pacco id. Basta non dimenticare di cambiare di nuovo una volta che il gioco è fatto!

Su iOS 9.0.2, sto ottenendo il "registro avviso notifica push" ogni volta che si elimina l'applicazione e reinstallarla. Questo è vero sia per i download di produzione AppStore e modalità ad hoc.

UPDATE: è confermato questo sta lavorando per iOS 9.x

Come già notato, l'approccio per reimpostare lo stato di notifica per un'app su un dispositivo è stato modificato per iOS5 e versioni successive.

Questo funziona per me su iOS6:

  • Rimuovi l'app dal dispositivo
  • Imposta la data e l'ora del dispositivo con due o più giorni di anticipo
  • Riavviare il dispositivo
  • Imposta la data e l'ora del dispositivo con due o più giorni di anticipo
  • Riavviare il dispositivo
  • Installa ed esegui nuovamente l'app

Tuttavia, ciò farà apparire nuovamente solo il prompt iniziale e non rimuoverà nessun altro elemento relativo allo stato push.

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

... contiene i clienti registrati per le notifiche push. Rimozione di ingresso della vostra applicazione causerà la richiesta di ri-apparire

In questo sembra a livello di codice a lavorare per me ogni volta. Ho una build con la seguente riga non commentata:

 [[UIApplication sharedApplication] unregisterForRemoteNotifications];

ho eseguito ogni volta che voglio annullare la registrazione da PN. Potrebbe essere necessario terminare l'applicazione in modo esplicito dalla lista elementi recenti e giocare con il Centro di notifica in Impostazioni app per farlo bene.

Inoltre, la richiesta di interfaccia utente che chiede all'utente di registrare per PN potrebbe non presentarsi. Non sono sicuro se è stata disabilitata in una delle versioni più recenti di iOS.

Come ianolito detto, l'impostazione della data dovrebbe funzionare:

  

È possibile ottenere questi ultimi senza in realtà aspettare un giorno impostando l'orologio di sistema in avanti di un giorno o più, trasformando il dispositivo completamente, poi girando il dispositivo nuovamente.

Ho notato sul mio dispositivo (iPhone 4, iOS 6.1.2) impostare l'orologio di sistema un giorno in avanti o anche un paio di giorni non ha funzionato per me. Così ho impostato la data in avanti un mese e poi lo ha fatto il lavoro e la mia domanda ha mostrato le notifiche spingono di nuovo.

Spero che questo aiuti per chiunque, può essere una specie di dolore testa!

Sono d'accordo con micmdk .. Ho avuto un setup ambiente di sviluppo con notifiche push e bisogno di un modo per ripristinare il mio telefono per assomigliare ad una installazione iniziale ... e solo questi passaggi precisi lavorato per me ... richiede due riavvii del dispositivo:

Da APPLE TECH DOC:

Ripristino del notifiche push Permessi Alert su iOS La prima volta che un'applicazione push-enabled registra per le notifiche push, iOS chiede all'utente se desiderano ricevere le notifiche per questo app. Una volta che l'utente ha risposto a questa segnalazione non viene presentata di nuovo a meno che il dispositivo viene ripristinato o l'applicazione è stato disinstallato per almeno un giorno.

Se si vuole simulare una corsa per la prima volta della vostra applicazione, è possibile lasciare l'applicazione disinstallato per un giorno. È possibile ottenere questi ultimi senza in realtà in attesa di un giorno nel seguente modo:

  1. Elimina la vostra applicazione dal dispositivo.

  2. Spegnere l'apparecchio completamente e riaccenderlo.

  3. Vai in Impostazioni> Generali> Data e ora e impostare la data avanti di un giorno o più.

  4. Spegnere il dispositivo completamente nuovo e riaccenderlo.

Mi sono chiesto su questo in passato ed è giunta alla conclusione che non era in realtà un banco di prova valida per il mio codice. Non credo che il codice dell'applicazione può effettivamente dire la differenza tra qualcuno in declino notifiche la prima volta o dopo la disattivazione delle impostazioni di notifica di iPhone. E 'vero che l'esperienza dell'utente è diversa, ma che è nascosto dentro la chiamata a registerForRemoteNotificationTypes.

La chiamata unregisterForRemoteNotifications non rimuovere completamente l'applicazione dalle impostazioni notifiche - anche se non rimuovere il contenuto delle impostazioni per tale applicazione. Quindi questo ancora non causerà la finestra di dialogo che sarà presentata una seconda volta per l'utente la prossima volta che viene eseguito l'app (almeno non sul v3.1.3 che sto testando con). Ma come ho detto sopra di voi probabilmente non dovrebbe essere preoccuparsi di questo.

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

In breve:creare un backup e ripristinarlo ogni volta.

Su iOS 5 e versioni successive, reimpostare l'avviso dei permessi delle notifiche push ripristinando il dispositivo da un backup (r.11450187).Ecco i passaggi per farlo in modo efficiente:

  1. Utilizza Xcode Organizer per installare la tua app sul dispositivo.La chiave è installare l'app per la prima volta senza eseguirla.
  2. Utilizza iTunes per eseguire il backup del dispositivo.
  3. Esegui l'app.Verrà presentato l'avviso relativo alle autorizzazioni delle notifiche push.
  4. Quando desideri reimpostare l'avviso delle autorizzazioni delle notifiche push, ripristina il dispositivo dal backup creato nel primo passaggio.

L'Apple Nota tecnica anche descritto è possibile ripristinare il dispositivo per ripristinare la finestra di notifica push.

Non dice che si può anche utilizzare l'opzione "Generale -> Reset -> Cancella contenuto e 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 inizialmente negavo la notifica push.Ora, volendo ripristinare le notifiche push, questi passaggi hanno funzionato per me su iOS 7 beta.Non sono sicuro di quali punti lo abbiano attivato esattamente.

  • Chiudi ed elimina l'app.
  • Vai alle impostazioni di iCloud ed elimina l'app da iCloud.Fallo su tutti gli altri dispositivi su cui hai abilitato il backup iCloud per le app.Dopo la disattivazione e l'eliminazione, esegui un nuovo backup.L'app non dovrebbe più essere elencata tra i backup.(Questo è forse il motivo per cui la nota tecnica di Apple descritta da ianolito ha smesso di funzionare in iOS 5, dal momento che iCloud è stato introdotto in iOS 5 e molti hanno il backup iCloud per le app abilitato.)
  • Vai alle impostazioni dell'ora e imposta l'ora con più di 1 mese di anticipo.
  • Spegni l'iPhone (nessun ripristino).
  • Aspetta un attimo, riaccendilo e scarica di nuovo l'app.
  • Avvia l'app e mi viene presentata nuovamente la finestra di dialogo.
  • Abilita nuovamente il backup dell'app, poiché è ancora disattivato.Correggere l'ora.

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

Dopo ore di ricerca, e senza fortuna con i suggerimenti di cui sopra, questo ha funzionato come 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
        }

    }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top