Ändert sich das APNS-Gerätetoken nach seiner Erstellung jemals?

99

Ändert sich das Token des Push-Benachrichtigungsgeräts nach seiner Erstellung jemals?

Beispiel, wenn die App aktualisiert wird? oder in jedem anderen Fall kann es sich ändern?

001
quelle
Stellen Sie sicher, dass Sie diese Antwort sehen, da sie Dokumentation zu 4 Stellen enthält, an denen sich das Gerätetoken ändert
Honey,

Antworten:

71

Aus [Apple-Dokumentation ApplePushService] 2

Die Form dieser Phase der Token-Vertrauenswürdigkeit stellt sicher, dass nur APNs das Token generieren, das sie später honorieren, und sie können sich davon überzeugen, dass ein von einem Gerät an sie übergebenes Token dasselbe Token ist, das sie zuvor für dieses bestimmte Gerät bereitgestellt haben - und nur für dieses Gerät.

Wenn der Benutzer Sicherungsdaten auf einem neuen Gerät wiederherstellt oder das Betriebssystem neu installiert, ändert sich das Gerätetoken.

Malinois
quelle
Die aktuellen Dokumente haben den letzten Satz gelöscht. Es scheint (von einer anderen SO Frage, stackoverflow.com/questions/2751481/... ) , die Wiederherstellung von Daten werden die APN - Token behalten aber , dass die OS installiert und „wischt“ wird es zurückgesetzt (sofern sie nicht durch Wiederherstellen von Daten auf den neu installierten Betrieb gefolgt werden System).
Robert Altman
1
@ RobertAltman - Ich denke nicht, dass dies die ganze Geschichte ist. Ich habe eine Reihe von Registrierungen in unserer Datenbank von völlig unterschiedlichen Geräten mit genau demselben APNS-Token gesehen. Ich sehe gerade ein iPad 2 und ein iPhone 3GS vor mir, die uns das gleiche Token geschickt haben. Kann jemand anderes dieses Verhalten bestätigen?
DougW
@DougW, das ist seltsam. Haben Sie noch ein ähnliches Problem? Den Link bearbeitet und aus den neuesten Dokumenten gepostet.
iosCurator
139

Die offizielle Dokumentation von Apple ist in diesem Punkt unklar. Was ich beobachtet habe, ist Folgendes: Das Token ist für ein bestimmtes Gerät, eine bestimmte Anwendung und eine bestimmte Domäne (Produktion vs. Sandbox) unveränderlich. Ich glaube, dass dies wahr bleiben muss, damit das System zuverlässig funktioniert. Stellen Sie sich die Situation vor, in der ein Anwendungsupdate ein neues APN-Token auslöst. Was würde passieren, wenn ich die beste neue Twitter-ähnliche App mit aktivierten Benachrichtigungen verwenden würde, wenn ich meine App über iTunes aktualisiere? Sollte ich die Erwartung haben, dass weiterhin Benachrichtigungen gesendet werden, obwohl ich die Anwendungen nicht ausgeführt habe, seit ich das Update auf mein Gerät "synchronisiert" habe? Das Ändern der Anwendung kann sich nicht auf das APN-System auswirken, da das Betriebssystem in Ihrem Namen Benachrichtigungen erhalten kann, obwohl Sie die aktualisierte App nicht ausgeführt haben.

Um es klar auszudrücken, gibt Apple an: "Eine Anwendung sollte sich bei jedem Start [bei APN-Servern] registrieren und ihrem Anbieter das aktuelle Token geben." Ich stimme voll und ganz zu; Dies schützt Ihre Anwendung vor schlechten Annahmen oder ungewöhnlichen Situationen.

Eine der Antworten auf Sind Push-Benachrichtigungstoken für alle Apps eines einzelnen Geräts eindeutig? gibt an, dass Gerätetoken pro "Betriebssysteminstallation" eindeutig sind; und dass das Wiederherstellen von der Sicherung auf einem Gerät das Token beibehalten würde, aber das Löschen eines Geräts dazu führt, dass es ein neues Token erhält. Dies würde völlig im Einklang mit Apples Absichten eines nahtlosen Betriebs und Datenschutzes stehen: Das Löschen eines Geräts ist so schwerwiegend, dass möglicherweise eine neue Zuordnung erforderlich ist, aber ein Benutzer, der ein Image nach einem Betriebssystem-Update wiederherstellt, möchte seine vorhandenen Benachrichtigungen beibehalten. Wenn ich mich an das letzte iOS5-Update auf meinem iPad erinnere, habe ich nach dem Upgrade das letzte Backup wiederhergestellt, sodass die Konsistenz meines Benachrichtigungstokens erhalten geblieben wäre. [Bearbeiten: Wiederherstellen eines Backups auf einem anderen Gerät dupliziert das Token NICHT.]

Vorbehalt: Ich habe keine definitiven Kenntnisse zu diesem Thema, nur einige vernünftige Erfahrungen in der Arbeit mit APN (als Drittentwickler). Wie immer ist es am besten, Ihre Annahmen zu überprüfen.


Update (Juni 2012):

Ich hatte kürzlich die Gelegenheit, mit Apple-Ingenieuren zu sprechen und einige reale Tests durchzuführen, und ich wollte die Ergebnisse präsentieren:

Um vollständig zu sein, wenn ich über die Rückgabe eines APN-Tokens spreche, gehe ich vom Kontext einer einzelnen Bundle-ID / Anwendung aus.

Zunächst sagten die Apple-Ingenieure, dass es nicht möglich sein sollte, dass zwei Geräte denselben APN zurückgeben. Ungeachtet der folgenden Kommentare konnte ich keinen Umstand feststellen, unter dem dies fehlschlägt.

Zweitens ist hier die Upgrade-Testsequenz und die Ergebnisse:

  1. Beginnen Sie mit iOS4, das auf dem iPhone4 installiert ist. Sicherungsgerät in iTunes

  2. Upgrade auf iOS5
    Aus einem früheren Test weiß ich, dass das APN-Token jetzt anders ist

  3. Wiederherstellen der Sicherung auf dem Gerät
    Das APN-Token entspricht jetzt Schritt 1.

  4. IOS zurücksetzen (Gerät bereinigen)
    Das APN-Token ändert sich

  5. Sichern Sie ein anderes Telefon in iTunes und stellen Sie das Backup auf dem Testgerät wieder her. Im Grunde stelle ich das "falsche" Backup wieder her, als würde ich das Telefon wechseln.
    Das APN-Token ändert sich erneut. Außerdem ist es eindeutig und stimmt nicht mit den Token überein, weder mit dem ursprünglichen Token noch mit dem "geklonten" Token.

  6. Stellen Sie die "richtige" Sicherung auf dem Gerät wieder her.
    Das APN-Token entspricht jetzt Schritt 1.

  7. Zuletzt habe ich das Telefon auf iOS6 (Beta2) aktualisiert, mein Backup wiederhergestellt und erneut getestet. Wie erwartet stimmte das Token weiterhin mit dem Token in Schritt 1 überein.

An diesem Punkt bin ich ziemlich sicher, dass APN-Token nicht zwischen verschiedenen Geräten dupliziert werden können. Vielleicht ist dies in früheren Versionen von iOS als Fehler aufgetreten, aber ich bin zuversichtlich, dass iOS5 (und vermutlich iOS6) APN-Token korrekt verarbeiten.


Update (August 2012)

Ich habe gerade festgestellt, dass ich dies nicht hinzugefügt habe: Gerätetoken werden sich ändern. Einer der Apple-Entwickler teilte mir mit, dass Token tatsächlich ablaufen (nach 2 Jahren, glaube ich). Für viele Zwecke ist dies lang genug, um als unveränderlich angesehen werden zu können.

[Ich mache mir keine Sorgen, wenn ich meine Testskripte alle zwei Jahre mit neuen Token aktualisieren muss, zumal ich jedes Jahr das Telefon wechsle.]

Robert Altman
quelle
Bedeutet dies, dass Sie das Token verwenden können, um einen Benutzer eindeutig zu identifizieren? (Was ist sehr praktisch in Apps, in denen man abstimmen muss?). Ich kann mir die Situation vorstellen: Benutzer stimmen ab und die App antwortet mit einer Zufallszahl über die Benachrichtigungen. Diese Nummer muss erneut an den Server gesendet werden, damit die Abstimmung gültig ist. Auf diese Weise kann die Abstimmung nicht einfach manipuliert werden.
Kröte
Ebenfalls interessant: Ändert sich das Token beim Löschen der App und bei der Neuinstallation? Oder ähnelt dies der Option "Wiederherstellen eines Backups"
Toad
@Toad Das Token ändert sich nicht, wenn eine App entfernt und erneut installiert wird.
Robert Altman
@Toad Ich würde nicht denken, dass dies eine gute Form der Benutzeridentifikation wäre; Da das Token pro Gerät (sowie pro App) eindeutig ist, verfügt ein Benutzer mit mehreren Geräten über mehrere Token.
Robert Altman
1
Ich frage mich über die Beziehung zwischen Zertifikaten und Geräte-Token. Wenn das .p12-Zertifikat abläuft, muss das neue Zertifikat geändert werden. Ich fand eine Referenz "Wenn ein neues Gerätetoken benötigt wird, generieren APNs eines unter Verwendung der im Zertifikat des Geräts enthaltenen Informationen." Ist es also nicht möglich, Geräte-Token zu aktualisieren, wenn Zertifikate geändert werden?
IllusionJJ
50

Ich habe es gerade mit iOS9- und APN-Push-Token-Änderungen getestet, wenn ich eine App neu installiere .

Nikolay Derkach
quelle
7
Ich kann dies bestätigen
Roocell
1
Ich kann das auch bestätigen
Muhammad Adnan
1
Ja, es ändert sich :(
Azik Abdullah
Kann jemand sagen, warum das passiert?
Sushobhit
Ja, es würde sich ändern
Ved Rauniyar
22

JA , Gerätetoken können sich ändern.

Jedes Mal, wenn Ihre App ein Token erhält, sollte es dieses speichern. Immer dann, wenn ein neues Token empfangen wird (was wird passieren, schließlich), vergleichen Sie die neuen Token an den gespeicherten Token und, wenn sie verschieden sind:

  1. Aktualisieren Sie den lokalen Speicher des Geräts (einschließlich möglicherweise nil)
  2. Aktualisieren Sie alles auf dem Gerät, das das Token verwendet, um über das neue Token informiert zu werden
  3. Aktualisieren Sie alle APIs, denen dieses Token bekannt ist, auf das neue Token.

In der Praxis ist der letzte Schritt höchstwahrscheinlich nicht trivial. Wenn Sie beispielsweise einen Dienst haben, der Wetterwarnungen an ein Gerätetoken sendet, basierend auf der Postleitzahl, die das Gerät abonniert hat, müssen Sie das old_tokenund das new_tokenan diesen Dienst übergeben, damit die Zustellung aktualisiert werden kann.

Ergo müssen im Allgemeinen 100% der APIs, die ein "Geräte-Token" akzeptieren, auch über eine Funktion UPDATEfür dieses Token verfügen . Um nicht für diese bauen zu bauen für falsch geliefert und nicht gelieferten Benachrichtigungen.

SG1
quelle
hört sich gut an, aber was habe ich entfernt und meine App neu installiert? In diesem Szenario wird das Geräte-Token, das ich unter lokalem Speicher gespeichert habe, gelöscht
Kuf
@Kuf, hast du eine Antwort auf diese Frage bekommen? Ich habe das gleiche - selbst wenn die App deinstalliert / neu installiert wird, wie würden wir das System-Token vergleichen?
Nkirkes
@nkirkes sehen diese Frage für weitere Details
Kuf
Sind die drei "Update" -Punkte, über die Sie gesprochen haben, für iOS, das SDK oder uns selbst verantwortlich?
Somenickname
7

Das Gerätetoken ändert sich von iOS 8 und höher

Bitte beachten Sie den Text unten auf der Apple-Website. Registrieren, Planen und Behandeln von Benutzerbenachrichtigungen

Das Geräte-Token ist Ihr Schlüssel zum Senden von Push-Benachrichtigungen an Ihre App auf einem bestimmten Gerät. Gerätetoken können sich ändern, daher muss sich Ihre App bei jedem Start neu registrieren und das empfangene Token an Ihren Server zurückgeben. Wenn Sie das Geräte-Token nicht aktualisieren können, gelangen Remote-Benachrichtigungen möglicherweise nicht zum Gerät des Benutzers. Gerätetoken ändern sich immer, wenn der Benutzer Sicherungsdaten auf einem neuen Gerät oder Computer wiederherstellt oder das Betriebssystem neu installiert. Bei der Migration von Daten auf ein neues Gerät oder einen neuen Computer muss der Benutzer Ihre App einmal starten, bevor Remote-Benachrichtigungen an dieses Gerät gesendet werden können.

Nitya
quelle
2
URL ist tot! Bitte repariere es.
Ramis
guter Link
SomeGuyFortune
4

Ich denke, es ist erwähnenswert, da sich niemand darum gekümmert hat, dass sich das Token ändert, nachdem Sie angerufen haben unregisterForRemoteNotifications. Wenn Sie das registerForRemoteNotificationsnächste Mal anrufen, ist das Token anders. Ich habe in den Apple-Dokumenten keine Bestätigung dafür gefunden, aber ich habe selbst ein solches Verhalten beobachtet. Bitte denken Sie daran

Andrey Chernukha
quelle
3

Es sollte sich nicht ändern, es sei denn, Ihre App wird auf einem neuen Gerät wiederhergestellt (zu diesem Zeitpunkt wird sie nicht mehr aufgefordert, Push-Benachrichtigungen zu akzeptieren, und Sie erhalten einfach den registrierten Anruf, zu welchem ​​Zeitpunkt Sie das neue Token annehmen sollten).

Apple garantiert jedoch nicht, dass es sich nie ändert (daher wird es in der Dokumentation nie erwähnt). Sie programmieren besser für das Schlimmste und gehen davon aus, dass es sich eines Tages ändern kann. Wenn Sie regelmäßig ein Token an Ihren Server senden, können Sie Token entfernen, die seit einiger Zeit nicht mehr registriert sind und wahrscheinlich Ihre App vor einiger Zeit deinstalliert haben oder das Interesse verloren haben (und in der Dokumentation wird dies als gewünschtes Verhalten angegeben!).

Jake
quelle
Sie haben Recht: Sie können nicht davon ausgehen, dass das Token dauerhaft ist. Befolgen Sie die in den APN-Dokumenten definierten Einsatzregeln. Tatsächlich haben mir Apple-Entwickler gesagt, dass sich das Token irgendwann ändern wird (nach ungefähr 2 Jahren).
Robert Altman
1
Eine alte Diskussion wiederzubeleben, aber jemand könnte sie nützlich finden: Ich habe diese Woche einige Zeit damit verbracht, an einem selbst gehosteten Parse-Server zu arbeiten und Testprobleme zu haben - es stellt sich heraus, dass ich meine Entwicklungs-App jedes Mal aktualisiert habe (während ich eine erstellt habe) Anzahl der UX-Änderungen), die Token-ID hat sich mit jeder Softwareinstallation geändert ... macht das nicht einfach zu viel Spaß? (Seufzer)
ChrisH
3

Von - Apple Docs

APNs können aus verschiedenen Gründen ein neues Gerätetoken ausstellen:

  • Der Benutzer installiert Ihre App auf einem neuen Gerät

  • Der Benutzer stellt das Gerät aus einer Sicherung wieder her

  • Der Benutzer installiert das Betriebssystem neu

  • Andere systemdefinierte Ereignisse

Daher müssen Apps das Geräte-Token beim Start anfordern.

Zusätzlich:

WICHTIG

APNs Gerätetoken sind von variabler Länge. Codieren Sie ihre Größe nicht fest.

Lal Krishna
quelle
2

Links werden mit Apple schnell obsolet! also zitiere ich, was jetzt ganz klar zu sein scheint:

Zwischenspeichern Sie niemals Gerätetoken in Ihrer App. Holen Sie sie stattdessen aus dem System, wenn Sie sie benötigen. APNs geben ein neues Gerätetoken an Ihre App aus, wenn bestimmte Ereignisse eintreten. Das Gerätetoken ist garantiert anders, z. B. wenn ein Benutzer ein Gerät aus einer Sicherung wiederherstellt, wenn der Benutzer Ihre App auf einem neuen Gerät installiert und wenn das Benutzer das Betriebssystem neu installiert. Durch das Abrufen des Tokens wird sichergestellt, dass Sie über das aktuelle Gerätetoken verfügen, das Ihr Provider für die Kommunikation mit APNs benötigt, anstatt sich auf einen Cache zu verlassen. Wenn Sie versuchen, ein Geräte-Token abzurufen, das sich jedoch nicht geändert hat, wird die Abrufmethode schnell zurückgegeben.

Aus dieser Anleitung

TheFuquan
quelle
0

Als Verweis auf Apple Push-Benachrichtigungsmaterial

Das Geräte-Token ist Ihr Schlüssel zum Senden von Push-Benachrichtigungen an Ihre App auf einem bestimmten Gerät. Gerätetoken können sich ändern, daher muss sich Ihre App bei jedem Start neu registrieren und das empfangene Token an Ihren Server zurückgeben. Wenn Sie das Geräte-Token nicht aktualisieren können, gelangen Remote-Benachrichtigungen möglicherweise nicht zum Gerät des Benutzers. Gerätetoken ändern sich immer, wenn der Benutzer Sicherungsdaten auf einem neuen Gerät oder Computer wiederherstellt oder das Betriebssystem neu installiert. Bei der Migration von Daten auf ein neues Gerät oder einen neuen Computer muss der Benutzer Ihre App einmal starten, bevor Remote-Benachrichtigungen an dieses Gerät gesendet werden können.

Zwischenspeichern Sie niemals ein Geräte-Token. Holen Sie sich das Token immer vom System, wenn Sie es benötigen. Wenn sich Ihre App zuvor für Remote-Benachrichtigungen registriert hat, verursacht das erneute Aufrufen der Methode registerForRemoteNotifications keinen zusätzlichen Aufwand, und iOS gibt das vorhandene Gerätetoken sofort an Ihren App-Delegaten zurück. Darüber hinaus ruft iOS Ihre Delegate-Methode jedes Mal auf, wenn sich das Gerätetoken ändert, nicht nur als Reaktion auf die Registrierung oder erneute Registrierung Ihrer App.

Mohit Gaur
quelle
0

Nach diesem Link das Gerät Token

Das in jeder Anforderung enthaltene Gerätetoken repräsentiert die Identität des Geräts, das die Benachrichtigung erhält. APNs verwenden Geräte-Token, um jede einzelne Kombination aus App und Gerät zu identifizieren. Sie werden auch verwendet, um das Routing von Remote-Benachrichtigungen zu authentifizieren, die an ein Gerät gesendet werden. Jedes Mal, wenn Ihre App auf einem Gerät ausgeführt wird, ruft sie dieses Token von APNs ab und leitet es an Ihren Provider weiter. Ihr Provider speichert das Token und verwendet es beim Senden von Benachrichtigungen an diese bestimmte App und dieses Gerät. Das Token selbst ist undurchsichtig und dauerhaft und ändert sich nur, wenn die Daten und Einstellungen eines Geräts gelöscht werden. Nur APNs können ein Gerätetoken dekodieren und lesen.

lucianoenrico
quelle
0

Ja , das kann sich ändern. Idealerweise erhalten wir immer dann ein Token über die Rückrufmethode

  • (void) application: (UIApplication *) application didRegisterForRemoteNotificationsWithDeviceToken: (NSData *) deviceToken

Die App sollte das Token auf dem Remote-Server registrieren / aktualisieren. Dadurch wird sichergestellt, dass das Token auf dem APNS und Ihrem Server synchron bleibt.

Wie pro Apple - Dokumentation ,

Das Abrufen und Behandeln eines app-spezifischen Geräte-Tokens funktioniert wie folgt:

Ihre App registriert sich bei APNs für Remote-Benachrichtigungen. Wenn ein neues Gerätetoken benötigt wird, generiert APNs eines unter Verwendung der im Gerätezertifikat enthaltenen Informationen. Es verschlüsselt das Token mit einem Token-Schlüssel und gibt es an das Gerät zurück, wie im mittleren Pfeil nach rechts gezeigt. Das System sendet das Geräte-Token an Ihre App zurück, indem es Ihre Anwendung aufruft: didRegisterForRemoteNotificationsWithDeviceToken: delegate-Methode. Nach Erhalt des Tokens muss Ihre App (innerhalb der Delegate-Methode) es entweder im Binär- oder Hexadezimalformat an Ihren Provider weiterleiten. Ihr Provider kann ohne dieses Token keine Benachrichtigungen an das Gerät senden. Weitere Informationen finden Sie unter Registrieren zum Empfangen von Remote-Benachrichtigungen unter Konfigurieren der Remote-Benachrichtigungsunterstützung.

iosCurator
quelle
0

Das Geräte-Token-Relay bei der Installation der App.

Es bedeutet , dass , wenn Sie die Anwendung neu installieren, es ändert sich ; es passt nicht zusammen, wenn Sie es von einem Backup, einem iOS-Upgrade ecc .. tun.

Der richtige Weg, um Probleme zu vermeiden, besteht darin, NSPAppDelegatebei jedem Anwendungsstart die in der Methode angegebene zu verwendendidRegisterForRemoteNotificationsWithDeviceToken

Alberto Scampini
quelle