Une fois créé, le jeton d'appareil de notification push change-t-il jamais?
Exemple de mise à jour de l'application? ou dans tout autre cas cela peut changer ??
Une fois créé, le jeton d'appareil de notification push change-t-il jamais?
Exemple de mise à jour de l'application? ou dans tout autre cas cela peut changer ??
Réponses:
Depuis [Apple Documentation ApplePushService] 2
la source
La documentation officielle d'Apple n'est pas claire sur ce point. Ce que j'ai observé est le suivant: le jeton est invariant pour un appareil, une application et un domaine donnés (production vs sandbox). Je pense que cela doit rester vrai pour que le système fonctionne de manière fiable. Considérez la situation dans laquelle 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 lorsque je mettrais à jour mon application à partir d'iTunes? Dois-je m'attendre à ce qu'il continue à recevoir des notifications 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 s'enregistrer [auprès des serveurs APN] à chaque fois qu'elle se lance et donner à son fournisseur le jeton actuel". Je suis entièrement d'accord; cela protégera votre application de mauvaises hypothèses ou de situations inhabituelles.
L'une des réponses à Les jetons de notification push sont-ils uniques dans toutes les applications pour un seul appareil? 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 vers un périphérique conserverait le jeton, mais l'effacement d'un périphérique lui ferait obtenir un nouveau jeton. Cela serait tout à fait conforme aux intentions d'Apple en matière de fonctionnement transparent et de confidentialité: l'effacement d'un appareil est suffisamment grave pour justifier peut-être une nouvelle association, mais un utilisateur qui restaure 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, ce qui aurait maintenu la cohérence de mon jeton de notification. [Modifier: restaurer une sauvegarde sur un autre l'appareil ne dupliquera PAS le jeton.]
mise en garde: je n'ai pas de connaissances définitives sur le sujet, juste 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 la chance de> parler aux ingénieurs Apple et de faire quelques tests dans le monde réel, et je voulais présenter les résultats:
Pour être complet, lorsque je parle de renvoyer un jeton APN, je suppose le contexte d'un seul identifiant / application de bundle.
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. Nonobstant les commentaires ci-dessous, je n'ai pas été en mesure d'identifier une circonstance où cela échoue.
Deuxièmement, voici la séquence de test de mise à niveau et les résultats:
Commencez avec iOS4 installé sur iPhone4; périphérique de sauvegarde dans iTunes
Mettre à niveau vers iOS5
À partir d'un test précédent, je sais que le jeton APN est maintenant différent
Restaurer la sauvegarde sur le périphérique
Le jeton APN est désormais identique à l'étape 1.
Réinitialiser iOS (appareil propre)
Le jeton APN change
Sauvegardez un téléphone différent sur iTunes et restaurez cette sauvegarde sur l'appareil de test; en gros, je restaure 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 au jeton d'origine ni au jeton "cloné".
Restaurez la sauvegarde «correcte» sur le périphérique.
Le jeton APN est maintenant identique à l'étape 1.
Enfin, j'ai mis à niveau le téléphone vers iOS6 (beta2), restauré ma sauvegarde et retesté. 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 appareils; peut-être que cela s'est produit en tant que bogue dans les versions antérieures d'iOS, mais je suis convaincu qu'iOS5 (et probablement iOS6) gère correctement les jetons APN.
Mise à jour (août 2012)
Je viens de réaliser que je n'avais pas ajouté ceci: les jetons d'appareils vont changer. Un des développeurs Apple a partagé avec moi que les jetons expirent réellement (après 2 ans, je pense). Pour de nombreuses raisons, cela est suffisamment long pour pouvoir être considéré comme invariant.
[Je ne suis pas inquiet si je dois mettre à jour mes scripts de test avec de nouveaux jetons tous les deux ans, d'autant plus que je change de téléphone chaque année.]
la source
Je viens de le tester avec les changements de jetons iOS9 et APN Push si je réinstalle une application.
la source
OUI , les jetons d'appareils peuvent changer.
Chaque fois que votre application reçoit un jeton, elle doit 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:
nil
)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éo à un jeton d'appareil en fonction du code postal auquel cet appareil s'est abonné, vous devez transmettre le
old_token
et lenew_token
audit service afin qu'il puisse mettre à jour la livraison.Ergo, d'une manière générale, 100% des API acceptant un "jeton d'appareil" doivent également avoir une sorte de fonctionnalité
UPDATE
pour ce jeton. Pour ne pas construire pour cela est de construire pour livrés et mis-notifications non livrées.la source
Le jeton d'appareil change depuis iOS 8 et les versions ultérieures
Veuillez consulter le texte ci-dessous sur le site Web d'Apple. Enregistrement, planification et gestion des notifications utilisateur
la source
Je pense qu'il vaut la peine de mentionner que personne ne l'a fait que le jeton change après que vous ayez appelé
unregisterForRemoteNotifications
. Lorsque vous appelez laregisterForRemoteNotifications
prochaine fois, le jeton est différent. Je n'ai trouvé aucune confirmation de cela dans les documents Apple, mais j'ai moi-même été témoin d'un tel comportement. Veuillez garder cela à l'espritla source
Cela ne devrait pas changer, à moins que votre application ne soit restaurée sur un nouvel appareil (à quel point il ne sera pas invité à accepter à nouveau les notifications push et vous enverra simplement l'appel enregistré à quel point vous devriez accepter le nouveau jeton).
Mais Apple ne garantit pas qu'il ne change jamais (donc la documentation ne le mentionne jamais). Vous feriez mieux de programmer le pire et de supposer que cela pourrait changer un jour. En outre, l'envoi d'un jeton à votre serveur vous permet régulièrement de supprimer des jetons qui ne sont pas enregistrés depuis un certain temps et qui ont probablement désinstallé votre application ou perdu tout intérêt il y a quelque temps (et la documentation spécifie cela comme un comportement souhaité!).
la source
De - Apple Docs
Aditionellement:
la source
Les liens deviennent rapidement obsolètes avec Apple! donc je cite ce qui semble être assez clair maintenant:
De ce guide
la source
En référence aux notifications push Apple
Le jeton d'appareil est votre clé pour envoyer des notifications push à votre application sur un appareil spécifique. Les jetons d'appareil peuvent changer, votre application doit donc se réenregistrer à chaque fois qu'elle est lancée et transmettre le jeton reçu à votre serveur. Si vous ne parvenez pas à mettre à jour le jeton de l'appareil, les notifications à distance risquent de ne pas parvenir à l'appareil 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 nouvel appareil ou ordinateur, l'utilisateur doit lancer votre application une fois avant que les notifications à distance puissent être envoyées à cet appareil.
Ne mettez jamais en cache un jeton d'appareil; obtenez toujours le jeton du système chaque fois que vous en avez besoin. Si votre application s'est précédemment enregistrée pour les notifications à distance, le fait d'appeler à nouveau la méthode registerForRemoteNotifications n'entraîne aucune surcharge supplémentaire, et iOS renvoie immédiatement le jeton d'appareil existant à votre délégué d'application. En outre, iOS appelle votre méthode de délégué à chaque fois que le jeton d'appareil change, pas seulement en réponse à l'enregistrement ou au réenregistrement de votre application.
la source
Selon ce lien, le jeton d'appareil
la source
Oui, cela peut changer. Idéalement, chaque fois que nous recevons un jeton via la méthode de rappel
L'application doit enregistrer / actualiser le jeton sur le serveur distant. Cela garantira que le jeton sur l'APNS et votre serveur sont synchronisés.
Selon la documentation Apple ,
la source
Le jeton d'appareil relaie l'installation de l'application.
Cela signifie que si vous réinstallez l'application, elle change ; cela ne marche 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 celle donnée
NSPAppDelegate
à chaque lancement d'application, dans la méthodedidRegisterForRemoteNotificationsWithDeviceToken
la source