Question

J'essaie de tester les achats via l'application sur mon iPhone et de rencontrer un problème où les ID de produit pour lesquels je demande des informations me sont retournés sous forme d'ID de produit non valides dans " didRecieveResponse " méthode.

j'ai:

  • Création d'un produit en magasin associé à cette application. Son identifiant de paquet correspond à tout le reste. Il a été autorisé à la vente et approuvé par le développeur.
  • Assurez-vous que les achats d'applications en magasin sont activés dans mon nouveau profil d'approvisionnement et que son nom complet est indiqué: " com.domain.appname "
  • Assurez-vous que c'est le profil d'approvisionnement utilisé pour signer l'application sur mon iPhone.
  • Assurez-vous que " com.domain.appname " est l'ID d'application utilisé pour créer le profil d'approvisionnement.
  • Assurez-vous que " com.domain.appname " est utilisé dans mon fichier plist comme identifiant de paquet.

Tout semble être en place, mais mes produits me sont toujours retournés sous forme d'identifiants non valides.

C'est le code que j'utilise:


- (void)requestProductData {
   SKProductRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers: [NSSet setWithObject: @"com.domain.appname.productid"]];
   request.delegate = self;
   [request start];
}

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
   NSArray *myProducts = response.products;
   NSArray *myInvalidProducts = response.invalidProductIdentifiers;

   for(int i = 1; i < myInvalidProducts.count; ++i)
   {
      std::cout <<"invalid product id = " << [[myInvalidProducts objectAtIndex:i] UTF8String] << std::endl;
   }

   for(int i = 0; i  < myProducts.count; ++i)
   {
      SKProduct * myProduct = [myProducts objectAtIndex:i];
      std::cout << "Product Info:"  << std::endl;
      std::cout << "\tlocalizedTitle         = "  << [[myProduct localizedTitle] UTF8String]  << std::endl;
      std::cout << "\tlocalizedDescription   = "  << [[myProduct localizedDescription] UTF8String]  << std::endl;
      std::cout << "\tproductIdentifier      = "  << [[myProduct productIdentifier] UTF8String]  << std::endl;
      std::cout << "\tprice                  = "  << [[myProduct price] doubleValue]  << std::endl;
      std::cout << "\tpriceLocale            = "  << [myProduct priceLocale]  << std::endl;
   }

   [request autorelease];
}

Tous les ID de mes produits apparaissent dans les impressions non valides et aucun d'entre eux n'apparaît dans " Informations sur le produit: " impressions.

Toute suggestion serait grandement appréciée ...

P.S. Oui, cela est construit en tant que Objective-c / c ++.

Était-ce utile?

La solution 7

OK, après avoir fait tout ce que je pouvais penser et lire tous les forums, voici ce qui a fonctionné:

Refait tout ce que vous voulez.

  1. Supprimez TOUS vos profils de provisionnement de l'organiseur Xcode.
  2. Fermer Xcode.
  3. Créer un nouvel identifiant d'application.
  4. Créez un nouveau profil d'approvisionnement avec le nouvel identifiant d'application.
  5. Créez un nouveau profil d'approvisionnement de distribution avec le nouvel ID d'application.
  6. Créer une nouvelle application dans iTunes Connect
  7. Lancez Xcode, installez vos deux nouveaux profils de provisioning. Mettez à jour votre ID de bundle pour qu'il corresponde. Assurez-vous également que les chaînes de votre identifiant que les demandes d'applications ont été mises à jour pour refléter votre identifiant d'ensemble.
  8. Générez votre projet en mode Distribution avec le nouveau profil Distribution Provisioning.
  9. Téléchargez votre nouveau fichier binaire. (Laissez-le non rejeté)
  10. Configurez votre achat d'achat via l'application.
  11. Générez votre projet en mode débogage avec le nouveau profil d'approvisionnement.
  12. Demande de test.

C’est ce qu’il a fallu pour que mon magasin fonctionne. Ma meilleure hypothèse est que les serveurs de back-up Apple se font parfois foirer et qu'il vous suffit de recommencer à zéro.

J'espère que cela aide tout le monde!

Autres conseils

J'ai tout essayé dans les forums Apple et ici, mais je n’ai toujours pas réussi à 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'un compte existant, l'appareil le traitera toujours comme une application installée sur l'App Store.

Supprimez-le, puis transférez-le à nouveau. Cela devrait fonctionner maintenant:)

La suppression de l'application sur l'iPhone test et sa réinstallation ont fonctionné. De plus, j'avais également attendu 8 heures depuis la soumission de l'article d'achat intégré à l'application.

Veuillez suivre les étapes ci-dessous:

  1. Connectez-vous à iTunes Connect en utilisant votre compte de développeur ( https: //. itunesconnect.apple.com/WebObjects/iTunesConnect.woa/wo/ ).

  2. Accédez à l'onglet - & "Contrats, taxes et opérations bancaires &";

  3. .
  4. Vérifiez les sections Demande de contrats et Contrats dans Processus.

  5. Découvrez les & "Applications payées iOS &"; , où vous devez configurer les informations de contact, les informations bancaires et les informations fiscales.

  6. Quand " Applications payées iOS " cellule passera à la section Contrats en vigueur, je pourrai utiliser les produits pour les achats intégrés.

Veuillez consulter le lien ci-dessous pour plus d'informations: http://developer.apple.com/library/ios/#technotes /tn2259/_index.html

Notez que lorsque l'iPhone est jailbreaké, le paquet AppSync rompt complètement les tests d'achat dans les applications. AppSync est installé avec Install0us en tant que dépendance.

Vous n'avez pas besoin de restaurer iOS complètement, désinstallez simplement AppSync dans Cydia pour tester les achats intégrés avec succès .

Tous les conseils de tous les forums, tutoriels et commentaires à propos de fixind 'produit invalide' ne fonctionnaient pas jusqu'à ce que je supprime AppSync.

Je rencontre un problème similaire avec une nouvelle application (v1.0 non encore disponible en magasin) que j'essayais également d'ajouter aux achats d'applications. J'ai tout mis en place, ajouté des produits, etc. et mes produits sont TOUJOURS revenus comme invalides lorsque j'ai effectué une demande SKProductsRequest.

J'étais sur le point d'abandonner le processus dans son intégralité lorsque j'ai vu un article lié de manière tangentielle sur les forums de développeurs Apple. Il a suggéré de supprimer l'application du périphérique de test et d'effectuer une nouvelle version + installation. Cela a fait le tour.

Juste pour être sûr, je l'ai essayé sur un autre appareil qui me causait le même problème, et il l'a corrigé là aussi.

C'est juste une supposition, mais je pense que si le périphérique a une construction qui a été créée avec un profil d'approvisionnement créé AVANT l'ajout d'IAP, vous devez supprimer cette version et en ajouter une nouvelle à l'aide de l'IAP. profil. (Autrement dit, remplacer simplement l'application en place ne suffira pas.)

si rien ne va pas dans votre code, parfois il retourne un productId invalide juste parce que, vous pouvez avoir besoin d'un temps supérieur à 10 heures pour vos informations changeantes. prendre effet. Ou bien, l'ID de produit non valide, car il reste encore quelque chose d'anormal sur votre appareil. Vous pouvez donc essayer à nouveau avec supprimer votre application et la reconstruire. avec mon expérience, espérons que cela vous aidera.

L’interface iTunes Connect pour IAP a récemment été mise à jour, ce qui peut entraîner l’invalidité: < ID de produit & Gt; Erreur.

Vous pouvez maintenant ajouter un IAP dans iTunes Connect sans définir le prix par défaut de 0 USD. Vous pourrez ainsi sauvegarder cette entrée.

L'ancienne version de l'interface utilisateur se plaignait lorsque vous appuyez sur Enregistrer si vous ne modifiez pas le champ de prix au préalable.

Il est très facile de manquer complètement ce champ et toute tentative d'obtenir des informations à l'aide de cet ID de produit via un appel iOS aurait pour résultat Invalid: < ID de produit & Gt; plutôt que de vous dire qu'il a trouvé < ID de produit & Gt; au prix de 0 USD.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top