web-dev-qa-db-fra.com

iPhone StoreKit - Identifiant de produit non valide

J'essaie de tester In App Purchase dans l'environnement Sandbox.

Afin de tester le code j'ai fait ce qui suit:

  1. Création d'un compte d'utilisateur de test d'achat dans l'application sous "Gérer les utilisateurs" dans iTunes Connect

  2. Création de produits d’achats intégrés dans la rubrique "Gérer vos achats intégrés". J'ai utilisé des valeurs numériques et alphanumériques pour les ID de produit.

  3. Chargé de l'application sur l'iPhone, accédé à Paramètres-> Magasin, déconnecté du magasin habituel et connecté au compte test créé à l'étape 1

  4. Définir un point d'arrêt dans le rappel (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response

Tous les ID de produit soumis sont dans la propriété response.invalidProductIdentifiers. Lors de la soumission de la demande, j'ai d'abord essayé les ID de produit exacts créés à l'étape 2. J'ai également essayé de les préfixer avec l'ID de l'ensemble:

NSString *id2 = @"com.super.duper.8";
NSSet *productList = [NSSet setWithObjects:id2, @"8", nil];

SKProductsRequest *request= [[SKProductsRequest alloc] initWithProductIdentifiers:productList];

Est-ce que je manque quelque chose d'évident? Toute aide est appréciée.

Achim

33
Achim

Si vous obtenez toujours des identifiants de produit non valides, j'ai accumulé une liste de contrôle de toutes les causes:

http://troybrant.net/blog/2010/01/invalid-product-ids/

53
Troy Brant

J'ai passé deux jours à lutter avec tous mes produits. La demande (pour AppID) se retrouvait dans la liste response.invalidProductIdentifiers, au lieu de dans la liste response.products. Apple a définitivement fait un travail de classe F en ce qui concerne leur storekit. C'est déroutant, inextricable et complexe. 

Je l'ai finalement résolu. Une leçon très importante que j’ai apprise et que peu de personnes ont indiquée sur les forums: Cela peut prendre plusieurs heures pour que ce que vous avez entré sur itunesconnect.Apple.com prenne effet.  

Il y a deux parties: le nom de l'application et l'identifiant de l'application dans votre xcode et ce que vous avez entré dans itunesconnection, ils doivent correspondre exactement (respectez les majuscules des minuscules). Si vous avez enregistré ou modifié votre AppleID in-App (j'ai également complété tous mes contrats et informations bancaires comme suggéré par certains que les actions d'achat ne fonctionneraient pas sans cette partie effectuée), vous pouvez également vous coucher avant de le tester à nouveau. parce que cela prend vraiment des heures dans mon cas pour prendre effet. J'étais tellement frustré d'avoir lutté avec ce problème avant que mon fils de 9 ans ne m'entraîne pour l'heure du coucher, puis surpris de constater que le problème a disparu quand je me suis réveillé. 

J'ai trouvé les suggestions de Eddy71 dans http://www.iphonedevsdk.com/forum/iphone-sdk-development/21035-problems-creating-test-user-app-purchase.html vraiment utiles. Avant de résoudre ce problème, j'ai fait tout ce que je pouvais faire dans la liste de contrôle d'Eddy et je n'avais toujours aucun produit. Une de mes craintes était de savoir si, sans télécharger le code binaire pour compléter l'enregistrement de l'application dans itunesconnect, tout allait bien http://blog.mugunthkumar.com/coding/iphone-tutorial-%E2%80%93-in-app-purchases/ ). C'est bien ok. Assurez-vous que le «produit mis en vente» est coché et que l’icône est verte (vous avez besoin d’une étape supplémentaire pour l’approuver après avoir rempli le formulaire). L'autre crainte était que, que je puisse utiliser développeur provisoire (et non pas distribution provisoire) en mode débogage, tout irait bien. J'espère que cela peut aider certains d'entre vous. Bonne chance et avoir la foi. Cela fonctionnera éventuellement.

16
Wayne Lo

Notre numéro était le dernier point de la FAQ d’Apple: " Pourquoi les identifiants de mes produits sont-ils renvoyés dans le tableau invalidProductIdentifiers? ":

  • Vous n'avez pas rempli toutes les exigences financières (voir la section «Contrats, informations fiscales et bancaires» de ce document).
  • Vous n'avez pas utilisé d'identifiant d'application explicite.
  • Vous n'avez pas utilisé le profil d'approvisionnement associé à votre ID d'application explicite.
  • Vous n'avez pas utilisé l'identifiant de produit correct dans votre code. Pour plus d'informations sur les identificateurs de produit, reportez-vous à la section QA1329 du document technique, "Identificateurs de produit pour l'achat intégré".
  • Vous n'avez pas effacé vos produits In App Purchase pour les vendre dans iTunes Connect.
  • Vous avez peut-être modifié vos produits, mais ces modifications ne sont pas encore disponibles pour tous les serveurs de l'App Store.
  • Si vous ou App Review avez rejeté votre dernier binaire dans iTunes Connect.

J'ai remplacé la version la plus récente (qui avait été rejetée) par "Waiting for Upload" (En attente de téléchargement) en cliquant sur "Prêt pour le téléchargement de fichiers binaires" dans iTunes Connect. Le problème a été résolu après environ 10 minutes.

7
Phil Calvin

le téléphone est jailbreaké, il ne vous reste plus qu'à désinstaller appSync dans Cydia, puis cela fonctionne

5
Kulitorum

Apple a un document fantastique qui est mal connu et qui couvre cela à la fin. Cela dissipe également certains mythes sur des choses qui n’aident pas (par exemple, soumettre un fichier binaire).

Technote 2259 "Ajouter un achat intégré à vos applications iOS et Mac"

4
Jesse Rusak

Essayez de réinitialiser les paramètres de l'iPhone et de supprimer l'application de l'iphone et d'utiliser l'ID de produit de la demande directement sans l'ID d'ensemble 

3
osama ali

Nous avons fini par créer un nouveau profil de provisioning. Il y avait une ligne quelque part (je ne me souviens plus où, pas dans la documentation pour l'achat in-app) qui indiquait que vous devez activer l'achat in-app dans le profil de provisioning. Nous ne pouvions pas faire cela avec notre profil existant, nous avons donc créé un nouveau profil et nous avons ensuite pu l'activer.

3
Achim

J'ai essayé tout ce qui était suggéré sur les forums Apple et ici, mais je ne pouvais toujours pas le faire fonctionner. Trouvez la solution - votre application doit être transférée par Xcode pour que le bac à sable soit activé.

Évident, non? Eh bien, si vous travaillez avec une mise à jour d'une application existante, l'appareil le traitera toujours comme une application installée sur l'App Store.

Alors supprimez l'application de votre appareil. Puis réinstallez l'application sur l'appareil à l'aide de Build & Run avec votre appareil connecté à votre Mac. Cela devrait fonctionner maintenant :)

2
Héctor Ramos

Dans mon cas, je n'ai pas renseigné les informations bancaires, les informations fiscales et les coordonnées. Une fois terminé, je peux obtenir mon ID produit, en espérant que cela aidera quelqu'un.

2
Randall Wang

Pour tous ceux qui ont ces problèmes, je vous recommande vivement de lire ce fil sur le forum Apple.

2
William Denniss

Pour moi, le problème était que j'avais choisi "Activer l'hébergement de contenu" lors de la configuration de l'achat In-App. J'ai donc dû l'éteindre et le problème a été résolu.

1
Dogahe

A quoi sert ce "8"? votre produit s'appelle com.super.duper.8, non?

http://blog.mugunthkumar.com/coding/iphone-tutorial-%e2%80%93-in-app-purchases/

1
Mugunth

C'est là que vous vous trompez, vous en avez besoin dans votre code:

NSSet *productList = [NSSet setWithObjects:product id]

Vous pouvez obtenir cet identifiant de produit à partir d'iTunes Connect.

Et vous devez vous assurer que vous avez créé un utilisateur test et que vous vous êtes déconnecté de votre compte iTunes d'origine. Reportez-vous à la section Ne vous connectez pas avec un compte d'utilisateur test, quelle que soit la formulation de la documentation Apple.

1
Vibhor Goyal

Un autre problème que je rencontrais était que je devais accéder à Fenêtre> Organiseur dans Xcode, supprimer mon application et le ou les profils de provisioning, puis rajouter mon profil de provisioning de développement. J'ai redémarré l'appareil et le xcode comme mesure supplémentaire.

1
Banjer

J'ai essayé toutes les solutions disponibles sur Internet et rien ne fonctionnait, absolument rien. Mon problème: mon appareil était jailbreaké et portait Cydia dessus. J'ai restauré le périphérique aux paramètres d'usine (pas jailbreaké) et cela a fonctionné la première fois et renvoyé l'ID de produit sans problème.

1
Greg Richards

J'ai essayé tout ce dont tout le monde parle. J'ai d'abord créé un compte invité pour voir si l'identifiant du produit pouvait être trouvé ... C'était. Alors, j'ai commencé à tout quitter dans le moniteur d'activité et j'ai trouvé le problème. Je devais quitter les processus de "magasin" ci-dessous. Soudain, j'ai cessé d'obtenir l'ID de produit invalide. J'espère que cela aide quelqu'un là-bas.

 Quit these if you're getting the invalid product id null error

0
Jim Bak

Il faut un certain temps au magasin pour mettre les produits à la disposition de tous les serveurs (voir documentation). Vous risquez donc de rencontrer un délai entre la création d'un produit dans iTunes Connect et la reconnaissance de cet identifiant de produit lors de vos tests sur un appareil. Pour moi, cela a pris environ 12 heures jusqu'à ce que mes produits soient apparus.

0
sliver

Je ne sais pas trop pourquoi, mais lorsque j'ai changé l'ID de produit de la demande de 'com.mycompany.myapp.product' à 'produit', il a commencé à fonctionner. C'est peut-être à cause de la configuration du produit dans iTunes Connect. 

Essayez, cela pourrait marcher pour certains d'entre vous ...

0
cdstamper

Un autre problème qui pourrait être. Si le nom de votre projet xCode n'est pas écrit en anglais ou comporte d'autres caractères, l'ID de l'ensemble aura "------" à l'endroit où le nom de votre application devrait être. Je pensais que c'était juste une convention pour le bundle id, d'avoir ceci dans xCode. Il s’avère que c’était mon problème, alors nommez votre projet xCode en anglais) je sais que ce n’est pas le cas pour la plupart des cas, mais en tout cas)

0
sermilion

Si vous souhaitez conserver les données de votre application tout en essayant de supprimer votre application pour résoudre ce problème, commencez par synchroniser votre appareil. Supprimez ensuite votre application et réinstallez-la à partir de Xcode. Cela a résolu le problème pour moi. Une fois que cela fonctionne, vous pouvez restaurer votre appareil à partir de sa sauvegarde - cela ne prend que quelques minutes et les demandes de produit fonctionnent toujours après la restauration.

0
arlomedia

remplacer:

NSSet *productList = [NSSet setWithObjects:id2, @"8", nil];

avec:

NSSet *productList = [NSSet setWithObjects:@"8", nil];
0
user2412679

Remarque pour les autres: n'utilisez pas de NSMutableSet pour les ID de produit. Ce doit être un NSSet!

0
Jeremy