Ist das APN-Gerätetoken für jede einzelne App eindeutig?


76

Ich habe zwei Apps im iTunes Store - beide implementieren Push-Benachrichtigungen. Während ich das Senden von Benachrichtigungen an diese Produktions-Apps testete, bemerkte ich, dass ein für App A bestimmter Push betitelt und App B geöffnet wurde.

Beide Apps sind auf demselben Telefon installiert. Ich habe in meiner Gerätetabelle nachgesehen und festgestellt, dass die für die beiden Apps aufgelisteten Gerätetoken (und natürlich die Geräte-ID) identisch waren.

Bei Bedarf verwende ich zwei verschiedene Zertifikate auf dem Server - eines für jede App. Ich bin davon ausgegangen, dass das Gerätetoken oder -zertifikat die Nachricht an die richtige App weiterleiten würde, aber dies ist eindeutig nicht der Fall.

Ich kann in NSLog sehen, dass die von jeder App gesendeten Token tatsächlich gleich sind.

Sollte das Geräte-Token für jede App eindeutig sein? Wenn ja, eine Idee, wie mein Testtelefon das gleiche Gerätetoken für beide Apps an meinen Server senden könnte. Beachten Sie, dass dies von zwei Apps stammt, die sich derzeit im App Store befinden.

Vielen Dank für jede Hilfe!

Antworten:


90

HINWEIS : Dies ist eine alte Antwort, die nur für iOS <= 6 gilt. Den aktuellen Ansatz finden Sie in der Antwort von user1641761 .

Herausgefunden. Die Geräte-Token gelten NICHT nur für die Telefon-App-Kopplung. Sie gelten nur für das Telefon. Wenn Sie mehrere Apps mit Push auf demselben Telefon haben, verwenden alle dasselbe Geräte-Token. Das Zertifikat, mit dem Sie die Benachrichtigung senden, bestimmt, an welche App sie gesendet wird.


1
Vielen Dank für die Frage und die Antwort, das ist nützlich zu wissen. +1 für jeden. Es ist sinnvoll, dass das Telefon mithilfe des Serverzertifikats entscheidet, auf welche App als Authentifizierung der Absicht des Entwicklers abgezielt wird.

3
Hallo @Mups. In der Eröffnungsfrage geben Sie Folgendes an: "Bei Bedarf verwende ich zwei verschiedene Zertifikate auf dem Server - eines für jede App." In Ihrer Antwort sagen Sie dann: "Das Zertifikat, mit dem Sie die Benachrichtigung senden, bestimmt, an welche App sie gesendet wird." .... Warum hat es nicht funktioniert? Ich bin dabei, ein ähnliches Setup für mein Backend zu implementieren, und ich möchte sicher sein. Vielen Dank.
Tompave

2
Beachten Sie außerdem, dass das Gerätetoken je nach Build-Typ unterschiedlich ist. Entwicklungsbuilds haben ein Gerätetoken und Distributions- (Produktions-) Builds haben ein anderes. Gerätetoken werden auch auf etwas anderes zurückgesetzt, wenn der Benutzer das Betriebssystem neu installiert.
Radesix

7
Dies ist eine alte Antwort, die für altes iOS gilt, dh iOS 6 und niedriger. Seit iOS 7 hat Apple die Regeln geändert und das Gerätetoken ist für Geräte nicht mehr eindeutig. Alle Apps auf demselben Gerät haben im Gegensatz zu iOS 6 und niedriger unterschiedliche Token.
Kameshwar Sheoran

2
dies ablehnen, da es nicht mehr aktuell ist. Siehe die Antwort von user1641761.
Daniel

52

iOS 7 geht anders damit um. Es ist jetzt EINZIGARTIG.

Bitte beachten Sie Punkt 1 in diesem Artikel: http://urbanairship.com/blog/2013/10/03/how-ios-7-handles-push-differently

"Vor iOS 7 war das Geräte-Token für alle App-Installationen auf einem bestimmten Gerät gleich. Verschiedene Apps auf Ihrem Telefon, ob Tap Tap Revenge oder USA Today, verwendeten dieselbe Adresse, dh Geräte-Token, um den Push weiterzuleiten Benachrichtigung an Sie: Die Sicherheitsanmeldeinformationen, die Sie mit einer Nachricht koppeln, stellen sicher, dass sie zur richtigen App gelangen. Unter iOS 7 ist Apple noch einen Schritt weiter gegangen und hat sichergestellt, dass Geräte-Token jetzt bei jeder einzelnen App-Installation unterschiedlich sind. Dies hilft Schützen Sie die Privatsphäre der Benutzer weiter, indem Sie eine andere Kennung auf Telefonebene entfernen. "

Siehe auch ios 7-Gerätetoken ist für dasselbe Gerät unterschiedlich


16

Teilen Sie mein Verständnis und einige Antworten von Apple-Entwicklern:

  • Geräte-Token
    • Geräte-Token ist die eindeutige Kennung des Geräts.
    • APNs generieren ein Gerätetoken unter Verwendung des eindeutigen Gerätezertifikats (möglicherweise unter Verwendung eines Bereitstellungsprofils).
    • Geräte-Token kann geändert werden. Stellen Sie daher sicher, dass Sie das aktualisierte Geräte-Token jedes Mal an Ihren Server senden.
    • Das Gerätetoken ist für alle Apps auf dem Gerät gleich.
    • Es ist gerätespezifisch und nicht app-spezifisch.
    • Das Gerätetoken kann für Sandbox und Produktion unterschiedlich sein.
      • Basierend auf dem Bereitstellungsprofil (Sandbox oder Produktion) können APNs unterschiedliche Geräte-Token für Sandbox und Produktion für dasselbe Gerät generieren.
    • Wie unterscheidet sich dann die Push-Benachrichtigung auf dem Gerät? Für welche App ist es?
      • Dies basiert auf der auf dem Server installierten App-ID und dem SSL-Zertifikat (mit denen die Benachrichtigung an den APN-Server gesendet wird).
  • Verweise

1
Falsche oder veraltete Antwort. Ihre Antwort ist laut Apple-Dokumentation nicht mehr gültig. Bitte beziehen Sie sich auf das Dokument hier developer.apple.com/library/content/documentation/…
Augustine PA

Das Gerätetoken ist für alle Apps auf dem Gerät gleich. Nein, es ist wie - Bei erfolgreicher Registrierung senden APNs ein app-spezifisches Gerätetoken an das Gerät.
Nico

8

Denken Sie jedoch daran, dass Apple sich das Recht vorbehält, ein APNToken-Gerät nach eigenem Ermessen zu ändern. Verwenden Sie es also nicht, um ein Gerät / einen Benutzer eindeutig zu identifizieren.


1

Das Gerätetoken für die Push-Benachrichtigung ist app-spezifisch. Nicht gerätespezifisch. Das heißt, das Gerätetoken ist für mehrere Apps auf demselben Gerät unterschiedlich und eindeutig.

Laut Apfel

Durch die Unterstützung von Remote-Benachrichtigungen können Sie Benutzern Ihrer App aktuelle Informationen bereitstellen, auch wenn die App nicht ausgeführt wird. Um Remote-Benachrichtigungen empfangen und verarbeiten zu können, muss Ihre App:

  • Aktivieren Sie Remote-Benachrichtigungen.

  • Registrieren Sie sich beim Apple Push Notification Service (APNs) und erhalten Sie ein app-spezifisches Gerätetoken.

  • Senden Sie das Geräte-Token an Ihren Benachrichtigungsanbieter-Server.

  • Implementieren Sie die Unterstützung für die Verarbeitung eingehender Remote-Benachrichtigungen.

Ein app-spezifisches Geräte-Token ist global eindeutig und identifiziert eine App-Geräte-Kombination. Nach Erhalt eines Geräte-Tokens von APNs in Ihrer App liegt es in Ihrer Verantwortung, eine Netzwerkverbindung zu Ihrem Provider herzustellen. Es liegt auch in Ihrer Verantwortung, in Ihrer App das Gerätetoken zusammen mit anderen relevanten Daten, die Sie an den Anbieter senden möchten, weiterzuleiten. Wenn der Anbieter später Remote-Benachrichtigungsanforderungen an APNs sendet, muss er das Geräte-Token zusammen mit den Benachrichtigungsnutzdaten enthalten. Weitere Informationen hierzu finden Sie unter Übersicht über APNs.

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äte-Token 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.

Sie können auf das Apple-Dokument hier verweisen. Programmierhandbuch für lokale und Remote-Benachrichtigungen


0

Sie können Token nicht als eindeutige Kennung verwenden, sondern alte Token mit save in keygen (Hilfe von iTunes) entfernen, alte Token löschen und neue in Ihre Datenbank einfügen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.