Risposte:
Da [Documentazione Apple ApplePushService] 2
La forma di questa fase di attendibilità del token garantisce che solo gli APN generino il token che successivamente onoreranno e può garantire che un token consegnatogli da un dispositivo sia lo stesso token che aveva precedentemente fornito per quel particolare dispositivo e solo per quel dispositivo.
Se l'utente ripristina i dati di backup su un nuovo dispositivo o reinstalla il sistema operativo, il token del dispositivo cambia.
La documentazione ufficiale di Apple non è chiara su questo punto. Quello che ho osservato è questo: il token è invariante per un dato dispositivo, applicazione e dominio (produzione vs sandbox). Credo che ciò debba rimanere vero affinché il sistema funzioni in modo affidabile. Considera la situazione in cui un aggiornamento dell'applicazione attiva un nuovo token APN; se usassi la migliore nuova app simile a Twitter, con le notifiche abilitate, cosa succederebbe quando aggiorno la mia app da iTunes? Devo aspettarmi che continuino a ricevere notifiche anche se non ho eseguito le applicazioni da quando ho "sincronizzato" l'aggiornamento sul mio dispositivo? L'atto di modificare l'applicazione non può influire sul sistema APN poiché il sistema operativo può ricevere notifiche per tuo conto anche se non hai eseguito l'app aggiornata.
Per essere chiari, Apple afferma: "Un'applicazione dovrebbe registrarsi [con i server APN] ogni volta che viene avviata e fornire al suo provider il token corrente". Sono pienamente d'accordo; così facendo proteggerai la tua applicazione da presupposti sbagliati o situazioni insolite.
Una delle risposte a I token di notifica push sono univoci in tutte le app per un singolo dispositivo? indica che i token del dispositivo sono univoci per "installazione del sistema operativo"; e che il ripristino dal backup a un dispositivo manterrebbe il token, ma la cancellazione di un dispositivo farà sì che ottenga un nuovo token. Ciò sarebbe del tutto coerente con le intenzioni di Apple di funzionamento senza interruzioni e privacy: la cancellazione di un dispositivo è abbastanza grave da giustificare forse una nuova associazione, ma un utente che ripristina un'immagine dopo un aggiornamento del sistema operativo vorrebbe conservare le notifiche esistenti. Se ricordo il recente aggiornamento iOS5 sul mio iPad, ho ripristinato il backup più recente dopo l'aggiornamento, quindi questo avrebbe mantenuto la coerenza del mio token di notifica. [Modifica: ripristino di un backup in un altro il dispositivo NON duplicherà il token.]
avvertimento: non ho una conoscenza definitiva in materia, solo una ragionevole esperienza di lavoro con APN (come sviluppatore di terze parti). Come sempre, è meglio verificare le tue ipotesi.
Recentemente ho avuto la possibilità di parlare con gli ingegneri Apple eb> eseguire alcuni test nel mondo reale e volevo presentare i risultati:
Per essere completi, quando parlo della restituzione di un token APN, sto assumendo il contesto di un singolo identificatore / applicazione di bundle.
Innanzitutto, gli ingegneri Apple hanno affermato che non dovrebbe essere possibile per due dispositivi restituire lo stesso APN. Nonostante i commenti seguenti, non sono stato in grado di identificare una circostanza in cui ciò non riesce.
In secondo luogo, ecco la sequenza e i risultati del test di aggiornamento:
Inizia con iOS4 installato su iPhone4; dispositivo di backup in iTunes
Aggiornamento a iOS5
Da un test precedente, so che il token APN ora è diverso
Ripristina il backup sul dispositivo
Il token APN è ora uguale al passaggio 1.
Ripristina iOS (dispositivo pulito)
Il token APN cambia
Esegui il backup di un telefono diverso su iTunes e ripristina il backup sul dispositivo di prova; in pratica, sto ripristinando il backup "sbagliato", come se stessi cambiando telefono.
Il token APN cambia di nuovo; inoltre è distinto e non corrisponde ai token né al token originale né al token "clonato".
Ripristina il backup "corretto" sul dispositivo.
Il token APN ora è uguale al passaggio 1.
Infine, ho aggiornato il telefono a iOS6 (beta2), ripristinato il backup e ho rieseguito il test. Come previsto, il token ha continuato a corrispondere al token nel passaggio 1.
A questo punto, sono abbastanza fiducioso che i token APN non possano essere duplicati tra dispositivi diversi; forse questo potrebbe essere successo come un bug nelle versioni precedenti di iOS, ma sono fiducioso che iOS5 (e presumibilmente iOS6) stiano gestendo correttamente i token APN.
Ho appena realizzato che non avevo aggiunto questo: gettoni di dispositivi saranno cambiare. Uno degli sviluppatori Apple ha condiviso con me che i token scadono effettivamente (dopo 2 anni, credo). Per molti scopi, questo è abbastanza lungo da poter essere considerato invariante.
[Non sono preoccupato se devo aggiornare i miei script di test con nuovi token ogni due anni, soprattutto perché cambio telefono ogni anno.]
L'ho appena testato con iOS9 e le modifiche al token push APN se reinstallo un'app.
SÌ , i token del dispositivo possono cambiare.
Ogni volta che la tua app riceve un token, dovrebbe salvarlo. Quindi, ogni volta che viene ricevuto un nuovo token (cosa che accadrà, alla fine), confronta il nuovo token con il token memorizzato e, se sono diversi:
nil
)In pratica, è più probabile che l'ultimo passaggio non sia banale. Ad esempio, se si dispone di un servizio che invia avvisi meteorologici a un token del dispositivo in base al codice postale a cui si è abbonato quel dispositivo, è necessario passare il old_token
e il new_token
servizio a detto in modo che possa aggiornare la consegna.
Ergo, in generale, il 100% delle API che accettano un "token dispositivo" deve avere anche una sorta di funzionalità UPDATE
per quel token. Per non costruire per questo è di costruire per le notifiche mis-consegnati e non consegnati.
Il token del dispositivo cambia da iOS 8 e versioni successive
Si prega di vedere il testo sotto dal sito web di Apple. Registrazione, pianificazione e gestione delle notifiche utente
Il token del dispositivo è la chiave per inviare notifiche push alla tua app su un dispositivo specifico. I token del dispositivo possono cambiare, quindi la tua app deve registrarsi nuovamente ogni volta che viene avviata e ritrasmettere il token ricevuto al tuo server. Se non si riesce ad aggiornare il token del dispositivo, le notifiche remote potrebbero non arrivare al dispositivo dell'utente. I token del dispositivo cambiano sempre quando l'utente ripristina i dati di backup su un nuovo dispositivo o computer o reinstalla il sistema operativo. Durante la migrazione dei dati su un nuovo dispositivo o computer, l'utente deve avviare l'app una volta prima che le notifiche remote possano essere inviate a quel dispositivo.
Penso che valga la pena menzionare, poiché nessuno lo ha fatto, il token cambia dopo che hai chiamato unregisterForRemoteNotifications
. Alla registerForRemoteNotifications
prossima chiamata, il gettone è diverso. Non sono riuscito a trovare alcuna conferma di ciò nei documenti Apple, ma ho assistito a un tale comportamento di persona. Tienilo a mente
Non dovrebbe cambiare, a meno che la tua app non venga ripristinata su un nuovo dispositivo (a quel punto non ti verrà chiesto di accettare nuovamente le notifiche push e ti invierà semplicemente la chiamata registrata, a quel punto dovresti accettare il nuovo token).
Ma Apple non garantisce che non cambi mai (quindi la documentazione non lo menziona mai). È meglio programmare per il peggio e presumere che un giorno possa cambiare. Inoltre, l'invio regolare di un token al tuo server ti consente di rimuovere i token che non sono stati registrati per un po 'e che probabilmente hanno disinstallato la tua app o perso interesse qualche tempo fa (e la documentazione specifica questo come comportamento desiderato!).
Da - Documenti Apple
Gli APN possono emettere un nuovo token del dispositivo per una serie di motivi:
L'utente installa la tua app su un nuovo dispositivo
L'utente ripristina il dispositivo da un backup
L'utente reinstalla il sistema operativo
Altri eventi definiti dal sistema
Di conseguenza, le app devono richiedere il token del dispositivo al momento dell'avvio.
Inoltre:
IMPORTANTE
I token del dispositivo APN sono di lunghezza variabile. Non codificare la loro dimensione.
I collegamenti diventano rapidamente obsoleti con Apple! quindi sto citando quello che sembra essere abbastanza chiaro ora:
Non memorizzare mai nella cache i token del dispositivo nella tua app; invece, ottenerli dal sistema quando ne avete bisogno. Gli APN rilasciano un nuovo token del dispositivo alla tua app quando si verificano determinati eventi. Il token del dispositivo è garantito per essere diverso, ad esempio, quando un utente ripristina un dispositivo da un backup, quando installa la tua app su un nuovo dispositivo e quando reinstalla il sistema operativo. Il recupero del token, piuttosto che fare affidamento su una cache, garantisce di disporre del token del dispositivo corrente necessario al provider per comunicare con gli APN. Quando si tenta di recuperare un token del dispositivo ma non è cambiato, il metodo di recupero restituisce rapidamente.
Come riferimento alle informazioni sulle notifiche push di Apple
Il token del dispositivo è la chiave per inviare notifiche push alla tua app su un dispositivo specifico. I token del dispositivo possono cambiare, quindi la tua app deve registrarsi nuovamente ogni volta che viene avviata e ritrasmettere il token ricevuto al tuo server. Se non si riesce ad aggiornare il token del dispositivo, le notifiche remote potrebbero non arrivare al dispositivo dell'utente. I token del dispositivo cambiano sempre quando l'utente ripristina i dati di backup su un nuovo dispositivo o computer o reinstalla il sistema operativo. Durante la migrazione dei dati su un nuovo dispositivo o computer, l'utente deve avviare l'app una volta prima che le notifiche remote possano essere inviate a quel dispositivo.
Non memorizzare mai nella cache un token di dispositivo; ottieni sempre il token dal sistema ogni volta che ne hai bisogno. Se la tua app è stata precedentemente registrata per le notifiche remote, la chiamata di nuovo al metodo registerForRemoteNotifications non comporta alcun sovraccarico aggiuntivo e iOS restituisce immediatamente il token del dispositivo esistente al delegato dell'app. Inoltre, iOS chiama il metodo delegato ogni volta che il token del dispositivo cambia, non solo in risposta alla registrazione o alla nuova registrazione dell'app.
Secondo questo link il token del dispositivo
Il token del dispositivo incluso in ciascuna richiesta rappresenta l'identità del dispositivo che riceve la notifica. Gli APN utilizzano i token del dispositivo per identificare ogni app unica e combinazione di dispositivo. Li utilizza anche per autenticare il routing delle notifiche remote inviate a un dispositivo. Ogni volta che la tua app viene eseguita su un dispositivo, recupera questo token dagli APN e lo inoltra al tuo provider. Il tuo provider memorizza il token e lo utilizza quando invia notifiche a quella particolare app e dispositivo. Il token stesso è opaco e persistente, cambia solo quando i dati e le impostazioni di un dispositivo vengono cancellati. Solo gli APN possono decodificare e leggere un token del dispositivo.
Sì , può cambiare. Idealmente quando mai riceviamo un token tramite il metodo di callback
- (void) application: (UIApplication *) application didRegisterForRemoteNotificationsWithDeviceToken: (NSData *) deviceToken
L'app dovrebbe registrare / aggiornare il token sul server remoto. Ciò garantirà che il token sull'APNS e il tuo server siano sincronizzati.
Come da documentazione Apple ,
L'ottenimento e la gestione di un token dispositivo specifico per app funziona come segue:
La tua app si registra con gli APN per le notifiche remote Quando è necessario un nuovo token del dispositivo, gli APN ne generano uno utilizzando le informazioni contenute nel certificato del dispositivo. Crittografa il token utilizzando una chiave token e lo restituisce al dispositivo, come mostrato nella freccia centrale rivolta verso destra. Il sistema restituisce il token del dispositivo alla tua app chiamando la tua applicazione: didRegisterForRemoteNotificationsWithDeviceToken: delegate method. Dopo aver ricevuto il token, l'app (all'interno del metodo delegato) deve inoltrarlo al provider in formato binario o esadecimale. Il tuo provider non può inviare notifiche al dispositivo senza questo token. Per i dettagli, vedere Registrazione per ricevere notifiche remote in Configurazione del supporto per le notifiche remote.
Il token relay del dispositivo durante l'installazione dell'app.
Significa che se reinstalli l'applicazione, cambia ; non importa se lo fai da un backup, un aggiornamento iOS ecc ..
Il modo giusto per usarlo, per evitare qualsiasi problema, è quello di ottenere quello indicato su NSPAppDelegate
ogni avvio dell'applicazione, nel metododidRegisterForRemoteNotificationsWithDeviceToken