web-dev-qa-db-fra.com

apple La notification push ne fonctionne pas en production

Nous sommes totalement bloqués, aidez-nous.

Mon équipe et moi avons créé une application iPhone, et c'est la première fois que nous essayons sur iOS.

Tout va bien, jusqu'à ce que nous soumettions notre application et devenions disponibles sur l'App Store - le service de notification Push ne fonctionne pas. J'ai cherché sur le Web et essayé de revérifier notre application par les conseils des gens, mais je n'ai pas trouvé ce qui n'allait pas. donc cette question est publiée ici.

Voici ce que nous avons fait:

  1. Nous construisons l'application, supposons qu'elle s'appelle "AppMaster".

  2. Nous avons créé AppId sur iOS Provisioning Portal appelé: "pushtest". Cet ID a permis la notification push sur le développement et la production.

  3. Nous avons créé un approvisionnement pour le développement nommé "AppMasterPushTest" à partir de l'appId ci-dessus. Ce provisioning est destiné au test interne, tout le monde de l'équipe l'a installé sur son Mac.

  4. Notre serveur est implémenté par Java et nous avons utilisé le paquet Java-apn. Pendant le test, nous avons téléchargé le fichier de certification pour le développement et écrit le fichier .p12, et avons poussé notre message vers le " sandbox "en utilisant l'api du package - withSandboxDestination () avec ce fichier .p12. le test se passe bien, les notifications sont reçues.

  5. Je pensais que nous étions prêts, nous avons donc créé un autre AppId appelé "AppMaster" et activé la notification push uniquement pour la production. Cet ID est écrit dans l'identifiant de bundle de l'application.

  6. Nous avons effectué un autre approvisionnement pour la production nommé "appMaster" à partir d'AppId à l'étape 5, avec une méthode de distribution définie comme "App Store". téléchargé et reconstruire l'application. Celui-ci a été soumis à Apple et prend vie sur l'application.

  7. Côté serveur, nous avons téléchargé la certification pour la production et réécrit le fichier .p12. et fait programme pour pousser le message vers le serveur de production en utilisant l'api - withProductionDestination (), avec le .p12 vient d'être écrit.

  8. Nous avons installé l'application depuis l'App Store. malheureusement, la notification n'a jamais été remise.

Y a-t-il quelque chose que nous avons manqué? BTW, l'ID que nous avons créé à l'étape 5 ressemblait à "XXX.com.company.appname", mais dans l'identificateur de bundle de l'application, nous venons de définir la partie "com.company.appname" sans préfixe. est-ce que cela pourrait être le problème?

toute idée est la bienvenue.

soyez notre économiseur. Merci.

24
Hetfield Joe

Le commentaire ci-dessus est incorrect. L'ID d'application a un préfixe avant l'ID de l'ensemble:

Un ID d'application se compose d'un ID de bundle d'application préfixé d'un code à dix caractères généré par Apple. L'administrateur de l'équipe doit saisir l'ID de l'ensemble. Pour un certificat, il doit incorporer un ID de bundle spécifique; vous ne pouvez pas utiliser un ID d'application "générique".

Vous devez vérifier votre profil d'approvisionnement, pour vous assurer qu'il contient le droit APS correct:

Vérifiez que les droits d'accès dans le fichier de profil d'approvisionnement sont corrects. Pour ce faire, ouvrez le fichier .mobileprovision dans un éditeur de texte. Le contenu du fichier est structuré en XML. Dans le dictionnaire des droits, recherchez la clé d'environnement aps. Pour un profil d'approvisionnement de développement, la valeur de chaîne de cette clé doit être développement; pour un profil d'approvisionnement de distribution, la valeur de chaîne doit être production .

Vous devez vous assurer que vous utilisez des jetons de périphérique de production lors de l'envoi de notifications Push au serveur APNS de production (les jetons de périphérique qui fonctionnent dans l'environnement sandbox ne fonctionnent pas dans l'environnement de production).

Vous devez avoir testé votre application avec un profil d'approvisionnement AdHoc avant de la publier sur l'App Store. Le profil AdHoc fonctionne avec l'environnement de production Push.

ÉDITER :

Quelques citations concernant les jetons d'appareil:

À partir du Guide de programmation des notifications locales et push :

Notez que le jeton d'appareil dans l'environnement de production et le jeton d'appareil dans l'environnement de développement (sandbox) n'ont pas la même valeur.

De Note technique TN2265 :

Gestion des notifications mal formées

L'interface binaire simple interrompt la connexion si le service Push reçoit une notification incorrecte d'une manière ou d'une autre. Votre fournisseur peut voir cela comme une EPIPE ou une erreur de canal cassé en réponse à l'envoi d'une notification. D'un autre côté, l'interface binaire améliorée enverra une réponse d'erreur avec des informations plus détaillées sur ce qui n'allait pas avec la notification avant de couper la connexion. Assurez-vous que votre fournisseur détecte et gère correctement ces conditions.

Le problème le plus courant est un jeton d'appareil non valide. Si le jeton provient de l'environnement sandbox, par exemple lorsque vous testez une version de développement en interne, vous ne pouvez pas l'envoyer au service Push de production. Chaque environnement Push émettra un jeton différent pour le même appareil ou ordinateur. Si vous envoyez un jeton d'appareil vers le mauvais environnement, le service Push le verra comme un jeton non valide et rejettera la notification.

Enfin, cet article a une bonne explication de la façon dont l'envoi de plusieurs notifications à Apple lorsque certaines des notifications ne sont pas valides (la cause la plus courante étant les jetons d'appareil non valides), peut empêcher certaines notifications valides d'arriver également.

30
Eran