web-dev-qa-db-fra.com

iOS: notifications push de production, jeton non valide du serveur APNS

Mon application est désormais disponible dans l'App Store, je l'ai donc téléchargée sur mon appareil. Les notifications Push fonctionnaient bien pendant le développement. J'utilise JavaPNS pour envoyer les notifications et je l'ai basculé pour pointer vers les serveurs de production d'Apple.

Cependant, je reçois maintenant une erreur de jeton non valide des serveurs APNS.

J'ai le schéma d'archivage défini sur "Release", et j'ai configuré Release pour utiliser ce profil de distribution:

enter image description here

Dans ce fichier d'approvisionnement, vous pouvez voir que l'environnement est correctement défini:

enter image description here

Pourtant, je reçois toujours l'erreur. Lorsque je regarde dans ma base de données, je pense que le jeton d'appareil que l'application me renvoie est le même que celui de développement, ce qui pourrait être le problème. Mais je ne sais pas pourquoi cela reviendrait, étant donné que l'application est signée correctement. Ceci est un appareil que j'ai également utilisé pour les tests, cela pourrait-il être un problème? Avez-vous d'autres idées sur ce qui se passe ici?

Merci!

EDIT: Je ne stocke pas de jeton dans mon code, la réponse d'Eran suggère que les seules autres possibilités sont un ancien jeton dans ma base de données ou l'application non signée par un profil de production. J'ai effacé ma base de données, donc je sais que ce n'est pas la première, et quant à la seconde, je ne vois pas comment cela pourrait être le cas, car je n'ai qu'un seul profil de distribution, et comme je l'ai montré ci-dessus, il a la clé "aps-environment" définie correctement. XCode ne me laisserait même pas utiliser un profil de développement pour la soumission dans l'App Store, n'est-ce pas? Quelques autres possibilités:

Est-il possible que quelque chose qui ne va pas avec la clé que j'envoie avec mes notifications puisse provoquer un "jeton invalide"? Si oui, puis-je régénérer cette clé pour mes profils existants?

N'y a-t-il pas un autre profil de provisionnement contenu dans l'AppID aux fins des notifications push? Un problème avec cela pourrait-il provoquer l'erreur de jeton non valide?

17
James Harpe

J'ai re-téléchargé le certificat de production Push et l'ai exporté depuis le trousseau en tant que .p12. Cela semble avoir résolu le problème. Il semble étrange cependant qu'une mauvaise clé privée me donne l'erreur "jeton invalide".

19
James Harpe

Le jeton d'appareil pour la production est différent de celui de développement, donc si vous envoyez un jeton de développement aux serveurs APNS de production (ou vice versa), c'est la cause du problème.

Il est possible que vous n'ayez pas supprimé le jeton du périphérique de développement de votre serveur lorsque vous êtes passé en production.

Ou si vous obtenez le jeton de développement de votre application de production, alors l'application retourne un jeton d'appareil stocké localement (que vous avez peut-être stocké sur votre appareil pendant le développement) au lieu de demander Apple to obtenez-en un nouveau ou (si vous demandez Apple pour un jeton actuel et obtenez toujours le jeton de développement) votre application n'est pas signée avec le profil d'approvisionnement de production.

17
Eran

MyApp est une application iOS qui envoie et reçoit des notifications push MyApp-to-MyApp à l'aide d'ID de jeton APN extraits d'une base de données qui est mise à jour par chaque MyApp à la connexion. Les notifications push sont envoyées par MyApp à l'aide de l'API framework NWPusher.

Tant que le projet était exécuté en mode développeur (débogage), les notifications push envoyées et reçues fonctionnaient parfaitement. Mais, en mode Production, l'envoi de notifications push ne fonctionnerait pas.

Je suis retourné et j'ai recréé complètement mon AppID, mes certificats SSL, mes provisions, etc., mais en vain. Ensuite, j'ai utilisé l'application NWPusher MacOS Pusher pour expérimenter l'envoi de notifications push à MyApp. J'ai configuré Pusher pour envoyer une notification push (au tokenID d'une distribution ad hoc de MyApp) avec le certificat SSL de production de MyApp et a obtenu le message suivant dans le journal Pusher: "Erreur de notification: jeton non valide APN".

J'ai ensuite remarqué que Pusher avait une option de case à cocher "devrait utiliser l'environnement sandbox" cochée. J'ai décoché l'option et l'ai réessayée. Cette fois, la notification push a été envoyée puis reçue par le téléphone cible sans aucune erreur. Cela m'a amené à jeter un autre coup d'œil à l'appel NWPusher.connect:

Rapide:

            let pusher:NWPusher? = try? NWPusher.connect(withPKCS12Data: pkcs12! as Data, password:APNS_Certificate_Password,environment:NWEnvironment(rawValue:1)!)

qui a un argument d'environnement NWEnvironment enum avec des valeurs possibles 0 = aucun, 1 = bac à sable, 2 = production, 3 = auto.

La modification de rawValue: 1 (développement du bac à sable) en rawValue: 2 (production) a résolu le problème: les notifications push de production fonctionnent désormais sans erreur.

3

xCode 8.0

J'ai eu une erreur "jeton invalide" après l'installation de xCode 8.0. Le problème a été trouvé ici: Navigateur du projet -> sélectionner le projet (élément le plus haut) -> sélectionner le nom du projet dans le menu Cibles -> choisir les capacités dans le menu supérieur -> regarder la section Notifications push -> cliquer sur "Résoudre le problème" enter image description here

2
phantom_2

Dans le menu ID des ensembles d'applications ios dans https://developer.Apple.com/account/ios/identifier/bundle

cliquez sur l'id de votre application si elle est en production, ajoutez un nouveau certificat si l'ancien a expiré.

Assurez-vous que votre ID de bundle d'applications com.myapp.mycom correspond à votre nom de certificat com.myapp.mycom

0
phil

Trouvé la cause première de ce problème, c'est à cause d'une mauvaise clé privée. Pour résoudre ce problème, générez simplement un certificat .p12 avec .pem. Pour créer le fichier p12 avec le fichier .pem, veuillez suivre la méthode ci-dessous Steps to follow

0
pradeep sg