web-dev-qa-db-fra.com

Le jeton de périphérique APNS change-t-il une fois créé?

Une fois créé, le jeton de périphérique de notification Push change-t-il?

Exemple lorsque l'application est mise à jour? ou dans tout autre cas cela peut changer ??

93
001

De [Apple Documentation ApplePushService]2

La forme de cette phase de confiance de jeton garantit que seuls les APN génèrent le jeton qu’elle honorera par la suite, et elle peut s’assurer qu’un jeton qui lui est remis par un périphérique est identique à celui qu’il a précédemment fourni pour ce périphérique particulier - et uniquement. pour cet appareil.

Si l'utilisateur restaure les données de sauvegarde sur un nouveau périphérique ou réinstalle le système d'exploitation, le jeton de périphérique est modifié.

69
malinois

La documentation officielle d'Apple n'est pas claire sur ce point. Voici ce que j'ai observé: le jeton est invariant pour un périphérique, une application et un domaine donnés (production ou bac à sable). Je pense que cela doit rester vrai pour que le système fonctionne de manière fiable. Considérez le cas où une mise à jour d'application déclenche un nouveau jeton APN; Si j'utilisais la meilleure nouvelle application de type Twitter avec les notifications activées, que se passerait-il si je mettais à jour mon application à partir d'iTunes? Devrais-je m'attendre à ce que les notifications continuent d'être envoyées même si je n'ai pas exécuté les applications depuis que je "synchronise" la mise à jour sur mon appareil? Le fait de modifier l'application ne peut pas affecter le système APN car le système d'exploitation peut recevoir des notifications en votre nom même si vous n'avez pas exécuté l'application mise à jour.

Pour être clair, Apple déclare "Une application doit enregistrer [avec les serveurs APN] à chaque lancement et donner à son fournisseur le jeton actuel". ; Cela protégera votre application contre de mauvaises hypothèses ou des situations inhabituelles.

Une des réponses à Les jetons de notification Push sont-ils uniques dans toutes les applications pour un seul périphérique? indique que les jetons de périphérique sont uniques par "installation du système d'exploitation"; et que la restauration à partir d'une sauvegarde sur un périphérique maintiendrait le jeton, mais le nettoyage d'un périphérique entraînerait l'obtention d'un nouveau jeton. Cela serait tout à fait conforme aux intentions d'Apple en matière de fonctionnement transparent et de confidentialité: essuyer un appareil est suffisamment grave pour justifier une nouvelle association, mais l'utilisateur restaurant une image après une mise à jour du système d'exploitation voudrait conserver ses notifications existantes. Si je me souviens de la récente mise à jour iOS5 sur mon iPad, j'ai restauré la sauvegarde la plus récente après la mise à niveau, de sorte que la cohérence de mon jeton de notification aurait été conservée. [Éditer: la restauration d'une sauvegarde sur un périphérique différent ne dupliquera PAS le jeton.]

mise en garde: je n'ai pas de connaissances définitives sur le sujet, mais une expérience raisonnable de travail avec APN (en tant que développeur tiers). Comme toujours, il est préférable de vérifier vos hypothèses.


Mise à jour (juin 2012):

J'ai récemment eu l'occasion de parler avec Apple, des ingénieurs et b> d'exécuter des tests sur le monde réel), et je voulais présenter les résultats:

Pour être complet, lorsque je parle de renvoi d'un jeton APN, je suppose le contexte d'un identificateur/d'une application de groupe unique.

Premièrement, les ingénieurs Apple ont déclaré qu'il ne devrait pas être possible pour deux appareils de renvoyer le même APN. Malgré les commentaires ci-dessous, je n'ai pas été en mesure d'identifier une situation dans laquelle cela a échoué.

Deuxièmement, voici la séquence de test de mise à niveau et les résultats:

  1. Commencez avec iOS4 installé sur iPhone4; périphérique de sauvegarde dans iTunes

  2. Mise à niveau vers iOS5
    D'après un test précédent, je sais que le jeton APN est maintenant différent

  3. Restaurer la sauvegarde sur le périphérique
    Le jeton APN est maintenant identique à l'étape 1.

  4. Réinitialiser iOS (appareil propre)
    Le jeton APN change

  5. Sauvegardez un autre téléphone sur iTunes et restaurez cette sauvegarde pour tester le périphérique. En gros, je rétablis la "mauvaise" sauvegarde, comme si je changeais de téléphone.
    Le jeton APN change à nouveau; En outre, il est distinct et ne correspond pas aux jetons, ni le jeton d'origine ni le jeton "cloné".

  6. Restaurez la sauvegarde "correcte" sur le périphérique.
    Le jeton APN est maintenant identique à l'étape 1.

  7. Enfin, j'ai mis à niveau le téléphone vers iOS6 (beta2), restauré ma sauvegarde et testé à nouveau. Comme prévu, le jeton a continué à correspondre au jeton à l'étape 1.

À ce stade, je suis assez convaincu que les jetons APN ne peuvent pas être dupliqués entre différents périphériques; peut-être que cela est peut-être arrivé comme un bogue dans les versions précédentes d'iOS, mais je suis convaincu que iOS5 (et vraisemblablement iOS6) gère correctement les jetons APN.


Mise à jour (août 2012)

Je viens de me rendre compte que je n'avais pas ajouté ceci: jetons de périphérique sera changer. Un des Apple devs a partagé avec moi que les jetons expirent (au bout de 2 ans, je pense). Pour de nombreuses raisons, c'est assez long pour pouvoir être considéré comme invariant.

[Je ne m'inquiète pas de devoir mettre à jour mes scripts de test avec de nouveaux jetons tous les deux ans, d'autant plus que je change de téléphone tous les ans.]

137
Robert Altman

Je viens de le tester avec les modifications de jeton Push iOS9 et APN si je réinstalle une application.

46
Nikolay Derkach

YES , les jetons de périphérique peuvent changer.

Chaque fois que votre application reçoit un jeton, elle devrait le stocker. Ensuite, chaque fois qu'un nouveau jeton est reçu (ce qui se produira , éventuellement), comparez le nouveau jeton au jeton stocké et, s'ils sont différents:

  1. Mettre à jour le stockage local du périphérique (y compris éventuellement à nil)
  2. Mettez à jour tout élément sur le périphérique qui utilise le jeton pour être informé du nouveau jeton.
  3. Mettez à jour toutes les API qui connaissent ce jeton vers le nouveau jeton.

En pratique, la dernière étape est la plus susceptible d’être non triviale. Par exemple, si vous avez un service qui envoie des alertes météorologiques à un jeton de périphérique en fonction du code postal auquel ce périphérique a souscrit, vous devez transmettre le old_token et le new_token à ce service pour pouvoir mettre à jour la livraison.

En règle générale, 100% des API acceptant un "jeton de périphérique" doivent également disposer d'une sorte de fonctionnalité UPDATE pour ce jeton. Pour pas construire pour cela est à construire pour livraison erronée et non notifications livrées.

22
SG1

Le jeton de périphérique change depuis iOS 8 et les versions ultérieures.

Veuillez consulter le texte ci-dessous sur Apple. enregistrement, planification et gestion des notifications utilisateur

Le jeton d'appareil est la clé pour envoyer des notifications Push à votre application sur un appareil spécifique. Les jetons de périphérique peuvent changer. Par conséquent, votre application doit se réenregistrer chaque fois qu'elle est lancée et renvoyer le jeton reçu sur votre serveur. Si vous ne parvenez pas à mettre à jour le jeton de périphérique, les notifications à distance risquent de ne pas parvenir au périphérique de l'utilisateur. Les jetons de périphérique changent toujours lorsque l'utilisateur restaure les données de sauvegarde sur un nouveau périphérique ou ordinateur ou réinstalle le système d'exploitation. Lors de la migration de données vers un nouveau périphérique ou ordinateur, l'utilisateur doit lancer votre application une fois pour que les notifications à distance puissent être envoyées sur ce périphérique.

7
Nitya

Cela ne devrait pas changer, à moins que votre application ne soit restaurée sur un nouvel appareil (à ce moment-là, on ne vous demandera plus d'accepter les notifications Push, mais vous enverrez simplement l'appel enregistré, auquel cas vous devrez accepter le nouveau jeton).

Mais Apple ne garantit pas que cela ne changera jamais (par conséquent, la documentation ne le mentionne jamais). Vous feriez mieux de programmer pour le pire et de supposer qu'il pourrait changer un jour. En outre, l'envoi d'un jeton sur votre serveur vous permet régulièrement de supprimer des jetons qui ne se sont pas enregistrés depuis un certain temps et ont probablement désinstallé votre application ou perdu tout intérêt depuis un moment (et la documentation le spécifie comme comportement souhaité!).

3
Jake

Les liens deviennent rapidement obsolètes avec Apple! donc je cite ce qui semble être tout à fait clair maintenant:

Ne cachez jamais les jetons de périphérique dans votre application; Au lieu de cela, obtenez-les du système lorsque vous en avez besoin. Les APN émettent un nouveau jeton de périphérique à votre application lorsque certains événements se produisent. Il est garanti que le jeton de périphérique sera différent, par exemple, lorsqu'un utilisateur restaure un périphérique à partir d'une sauvegarde, lorsqu'il installe votre application sur un nouveau périphérique et lorsqu'il réinstalle le système d'exploitation. Extraire le jeton, plutôt que de s'appuyer sur un cache, garantit que vous disposez du jeton de périphérique actuel nécessaire à votre fournisseur pour communiquer avec les APN. Lorsque vous essayez d'extraire un jeton de périphérique mais que celui-ci n'a pas changé, la méthode d'extraction retourne rapidement.

De ce guide

2
TheFuquan

Je pense que cela vaut la peine de mentionner, car personne ne l’a fait, que le jeton change après que vous ayez appelé unregisterForRemoteNotifications. Lorsque vous appelez registerForRemoteNotifications la prochaine fois, le jeton est différent. Je n'ai trouvé aucune confirmation de cela dans la documentation de Apple), mais j'ai moi-même été témoin d'un tel comportement. Veuillez garder cela à l'esprit.

2
Andrey Chernukha

Les APN peuvent émettre un nouveau jeton de périphérique pour diverses raisons:

  • L'utilisateur installe votre application sur un nouvel appareil

  • L'utilisateur restaure le périphérique à partir d'une sauvegarde

  • L'utilisateur réinstalle le système d'exploitation

  • Autres événements définis par le système

Par conséquent, les applications doivent demander le jeton de périphérique au moment du lancement.

Référez-vous - Apple Docs

NB: Les jetons de périphérique APN sont de longueur variable. Ne codez pas en dur leur taille.

1
Lal Krishna

En tant que référence à informations de notification Apple Push

Le jeton d'appareil est la clé pour envoyer des notifications Push à votre application sur un appareil spécifique. Les jetons de périphérique peuvent changer. Par conséquent, votre application doit se réenregistrer chaque fois qu'elle est lancée et renvoyer le jeton reçu sur votre serveur. Si vous ne parvenez pas à mettre à jour le jeton de périphérique, les notifications à distance risquent de ne pas parvenir au périphérique de l'utilisateur. Les jetons de périphérique changent toujours lorsque l'utilisateur restaure les données de sauvegarde sur un nouveau périphérique ou ordinateur ou réinstalle le système d'exploitation. Lors de la migration de données vers un nouveau périphérique ou ordinateur, l'utilisateur doit lancer votre application une fois pour que les notifications à distance puissent être envoyées sur ce périphérique.

Ne jamais mettre en cache un jeton de périphérique; obtenez toujours le jeton du système chaque fois que vous en avez besoin. Si votre application a déjà été enregistrée pour les notifications à distance, le rappel de la méthode registerForRemoteNotifications n'entraîne aucune surcharge supplémentaire et iOS renvoie immédiatement le jeton de périphérique existant au délégué de votre application. En outre, iOS appelle votre méthode de délégué chaque fois que le jeton de périphérique est modifié, pas seulement en réponse à l'enregistrement ou à la réinscription de votre application.

0
Mohit Gaur

Le relais de jeton de périphérique lors de l'installation de l'application.

Cela signifie que si vous réinstallez l'application, cela change; cela ne compte pas si vous le faites à partir d'une sauvegarde, d'une mise à niveau iOS, etc.

La bonne façon de l'utiliser, pour éviter tout problème, est d'obtenir celui donné sur le NSPAppDelegate à chaque lancement d'application, dans la méthode didRegisterForRemoteNotificationsWithDeviceToken.

0
Alberto Scampini

Oui cela peut changer. Idéalement, chaque fois que nous recevons un jeton via la méthode de rappel

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

L'application doit enregistrer/actualiser le jeton sur le serveur distant. Cela garantira que le jeton sur le serveur APNS et votre serveur reste synchronisé.

Selon documentation Apple ,

L'obtention et la gestion d'un jeton de périphérique spécifique à l'application fonctionnent comme suit:

Votre application s'enregistre avec des APN pour les notifications à distance Lorsqu'un nouveau jeton de périphérique est requis, les APN en génèrent un en utilisant les informations contenues dans le certificat du périphérique. Il crypte le jeton à l'aide d'une clé de jeton et le renvoie au périphérique, comme indiqué dans la flèche du milieu à droite. Le système remet le jeton de périphérique à votre application en appelant votre application: didRegisterForRemoteNotificationsWithDeviceToken: méthode delegate. À la réception du jeton, votre application (au sein de la méthode déléguée) doit le transmettre à votre fournisseur au format binaire ou hexadécimal. Votre fournisseur ne peut pas envoyer de notifications à l'appareil sans ce jeton. Pour plus d'informations, voir Enregistrement pour recevoir des notifications à distance dans Configuration de la prise en charge des notifications à distance.

0
iosCurator

Selon ce lien le jeton de périphérique

Le jeton de périphérique inclus dans chaque demande représente l'identité du périphérique recevant la notification. Les APN utilisent des jetons de périphérique pour identifier chaque combinaison d'application et de périphérique unique. Ils les utilisent également pour authentifier le routage des notifications distantes envoyées à un périphérique. Chaque fois que votre application s'exécute sur un appareil, elle extrait ce jeton des APN et le transmet à votre fournisseur. Votre fournisseur stocke le jeton et l'utilise lors de l'envoi de notifications à cette application et à cet appareil. Le jeton lui-même est opaque et persistant et ne change que lorsque les données et les paramètres d’un périphérique sont effacés. Seuls les APN peuvent décoder et lire un jeton de périphérique.

0
lucianoenrico