Il token del dispositivo APNS cambia mai, una volta creato?


99

Una volta creato, il token del dispositivo di notifica push cambia mai?

Esempio quando l'app viene aggiornata? o in ogni altro caso può cambiare ??


Assicurati di vedere questa risposta in quanto fornisce documentazione a 4 luoghi in cui il token del dispositivo cambia
Honey

Risposte:


71

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.


I documenti correnti hanno eliminato l'ultima frase. Sembra (da un'altra domanda SO, stackoverflow.com/questions/2751481/... ) che il ripristino dei dati potranno conservare i gettoni APN, ma che consente di installare OS e "salviette" sarà resettarlo (a meno che non sono seguiti da ripristino dei dati al funzionamento appena installato sistema).
Robert Altman

1
@RobertAltman - Non credo che questa sia l'intera storia. Ho visto una serie di registrazioni nel nostro database da dispositivi completamente diversi con lo stesso identico token APNS. In questo momento vedo davanti a me un iPad 2 e un iPhone 3GS che ci hanno inviato lo stesso token. Qualcun altro può confermare questo comportamento?
DougW

@DougW, questo è strano. Hai ancora problemi simili? Ha modificato il collegamento e pubblicato dagli ultimi documenti.
iosCurator

139

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.


Aggiornamento (giugno 2012):

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:

  1. Inizia con iOS4 installato su iPhone4; dispositivo di backup in iTunes

  2. Aggiornamento a iOS5
    Da un test precedente, so che il token APN ora è diverso

  3. Ripristina il backup sul dispositivo
    Il token APN è ora uguale al passaggio 1.

  4. Ripristina iOS (dispositivo pulito)
    Il token APN cambia

  5. 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".

  6. Ripristina il backup "corretto" sul dispositivo.
    Il token APN ora è uguale al passaggio 1.

  7. 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.


Aggiornamento (agosto 2012)

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.]


quindi questo significa che puoi usare il token come un modo per identificare in modo univoco un utente? (che è molto pratico nelle app in cui bisogna "votare"?). Posso immaginare la situazione: l'utente vota e l'app risponde con un numero casuale tramite le notifiche. Quel numero deve essere reinviato al server per rendere valido il voto. In questo modo il voto non può essere manipolato facilmente.
Toad

anche interessante: il token cambia quando si elimina l'app e la si reinstalla. Oppure è simile all'opzione "ripristino di un backup"
Toad

@Toad Il token non cambierà in seguito alla rimozione e alla reinstallazione di un'app.
Robert Altman

@ Toad Non penserei che questa sarebbe una buona forma di identificazione dell'utente; poiché il token è unico per dispositivo (oltre che per app), un utente con più dispositivi avrà più token.
Robert Altman

1
Mi chiedo quale sia la relazione tra certificati e token del dispositivo. se il certificato .p12 scade, è necessario modificare il nuovo certificato. Ho trovato un riferimento "Quando è necessario un nuovo token del dispositivo, gli APN ne generano uno utilizzando le informazioni contenute nel certificato del dispositivo". Quindi non è possibile aggiornare il token del dispositivo quando si cambiano i certificati?
illusionJJ


22

, 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:

  1. Aggiorna la memoria locale del dispositivo, (incluso possibilmente a nil)
  2. Aggiorna qualsiasi cosa sul dispositivo che utilizza il token per essere a conoscenza del nuovo token
  3. Aggiorna tutte le API che sono a conoscenza di questo token con il nuovo token.

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_tokene il new_tokenservizio 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à UPDATEper quel token. Per non costruire per questo è di costruire per le notifiche mis-consegnati e non consegnati.


suona bene, ma cosa ho rimosso e reinstallato la mia app? in questo scenario il token del dispositivo che ho salvato nella memoria locale verrà eliminato
Kuf

@ Kuf, hai ricevuto una risposta a questa domanda? Ho lo stesso: anche se l'app viene disinstallata / reinstallata, come confronteremmo il token di sistema?
nkirkes

@nkirkes vedi questa domanda per maggiori dettagli
Kuf

I tre punti "Aggiornamento" di cui hai parlato sono responsabilità di iOS, SDK o di noi stessi?
nomignolo

7

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.


2
L'URL è morto! Per favore aggiustalo.
Ramis


4

Penso che valga la pena menzionare, poiché nessuno lo ha fatto, il token cambia dopo che hai chiamato unregisterForRemoteNotifications. Alla registerForRemoteNotificationsprossima 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


3

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!).


Hai ragione: non puoi presumere che la pedina sia permanente; seguire le regole di ingaggio come definite nei documenti APN. In effetti, gli sviluppatori di Apple mi hanno detto che il token alla fine cambierà (dopo qualcosa come 2 anni).
Robert Altman

1
Resuscitare una vecchia discussione, ma qualcuno potrebbe trovarla utile: ho passato un po 'di tempo questa settimana a lavorare su un server di analisi self-hosted e ho riscontrato problemi di test - si scopre che ogni volta che ho aggiornato la mia app di sviluppo (mentre stavo creando un anche il numero di modifiche alla UX), l'ID del token cambiava ad ogni installazione del software ... quindi non è troppo divertente? (sospiro)
ChrisH

3

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.


2

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.

Da questa guida


0

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.


0

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.


0

, 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.


0

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 NSPAppDelegateogni avvio dell'applicazione, nel metododidRegisterForRemoteNotificationsWithDeviceToken

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.