React-native-iap: Impossible de se connecter à l'iTunes Store pour les utilisateurs de sandbox

Créé le 2 oct. 2018  ·  17Commentaires  ·  Source: dooboolab/react-native-iap

Version de react-native-iap

2.2.2

Plateformes sur lesquelles vous avez rencontré l'erreur (IOS ou Android ou les deux?)

iOS

Comportement attendu

await RNIap.buyProduct(MIXED_PACK); ne doit pas échouer

Comportement réel

J'obtiens l'erreur Cannot connect to iTunes Store même si j'utilise un utilisateur sandbox

Environnement testé (émulateur? Real Device?)

Appareil réel, iPad et iPhone 7

Étapes pour reproduire le comportement

Essayez simplement d'exécuter ce morceau de code. J'ai lu attentivement le blog pour créer un environnement sandbox ici https://medium.com/@dooboolab/react -native-in-app-purchase-121622d26b67

📱 iOS 🙏 help wanted

Commentaire le plus utile

Pour toute autre personne qui rencontre un problème, notez également "Votre application s'exécute dans le simulateur, qui ne prend pas en charge les achats intégrés". est une autre raison pour laquelle vous pouvez obtenir cette erreur. Doit faire cela sur un vrai appareil.

Tous les 17 commentaires

Je pense que c'est un vieux lien. https://developer.apple.com/system-status/

@ raynor85 Êtes-vous toujours confronté à ce problème?

@dooboolab Je suis toujours confronté au problème, mais je pense que c'est un problème Apple. J'ai essayé d'acheter un produit avec mon identifiant Apple personnel (qui a déjà été utilisé pour de vrais achats), et j'ai pu obtenir une réponse positive après avoir exécuté RNIap.buyProduct(“my.sku.product”) .
Le plus drôle est dans le modal qui apparaît juste avant l'achat, il est écrit environment: sandbox , probablement parce que j'exécutais une version de développement, et surtout je pense que l'achat ne m'a pas été facturé du tout. En vérifiant l'historique des achats, il n'y a rien de lié à cela, et si j'exécute RNIap.getAvailablePurchases() et RNIap.getPurchaseHistory() j'obtiens des réponses vides des deux. Pourquoi donc?

@dooboolab pouvez-vous m'aider avec ça? Y a-t-il une raison pour laquelle, avec un véritable identifiant Apple, j'ai pu acheter avec succès un consommable sans être facturé, mais RNIap.getPurchaseHistory() est toujours un tableau vide?

@ raynor85 Avez-vous connecté le résultat de la transaction à votre serveur?

@dooboolab J'ai essayé d'utiliser à la fois RNIap.buyProduct(sku) et RNIap.buyProductWithoutFinishTransaction(sku) avec RNIap.finishTransaction() , et pour les deux j'ai utilisé RNIap.validateReceiptIos(receiptBody, true); , avec const receiptBody = {'receipt-data': purchase.transactionReceipt, password: '[apple-id-password]'}; , mais pas de chance. Il est également intéressant de noter que quel que soit le mot de passe que j'ai mis dans «[apple-id-password]», la réponse validateReceiptIos est toujours la même.
Ceci est un exemple:

{ receipt: 
   { receipt_type: 'ProductionSandbox',
     adam_id: 0,
     app_item_id: 0,
     bundle_id: 'io.fantastec.swap',
     application_version: '8',
     download_id: 0,
     version_external_identifier: 0,
     receipt_creation_date: '2018-10-09 19:16:09 Etc/GMT',
     receipt_creation_date_ms: '1539112569000',
     receipt_creation_date_pst: '2018-10-09 12:16:09 America/Los_Angeles',
     request_date: '2018-10-09 19:16:10 Etc/GMT',
     request_date_ms: '1539112570436',
     request_date_pst: '2018-10-09 12:16:10 America/Los_Angeles',
     original_purchase_date: '2013-08-01 07:00:00 Etc/GMT',
     original_purchase_date_ms: '1375340400000',
     original_purchase_date_pst: '2013-08-01 00:00:00 America/Los_Angeles',
     original_application_version: '1.0',
     in_app: 
      [ { quantity: '1',
          product_id: 'basic_pack',
          transaction_id: '1000000455003078',
          original_transaction_id: '1000000455003078',
          purchase_date: '2018-10-09 19:16:09 Etc/GMT',
          purchase_date_ms: '1539112569000',
          purchase_date_pst: '2018-10-09 12:16:09 America/Los_Angeles',
          original_purchase_date: '2018-10-09 19:16:09 Etc/GMT',
          original_purchase_date_ms: '1539112569000',
          original_purchase_date_pst: '2018-10-09 12:16:09 America/Los_Angeles',
          is_trial_period: 'false' } ] },
  status: 0,
  environment: 'Sandbox' }

Comme vous l'avez peut-être remarqué, receipt_type: 'ProductionSandbox' , ce qui devrait être dû au fait que j'utilise un vrai nom d'utilisateur Apple ID dans un environnement sandbox (je ne suis pas en mesure de créer un utilisateur de test sandbox fonctionnel, merci Apple d'avoir fait notre vie un enfer vivant).

@ raynor85 En fait, je ne sais pas pourquoi cela se produit. Je devrai peut-être essayer ceci dans un proche avenir. Avez-vous également essayé de tester cela lors du vol d'essai? Si vous n'avez pas téléchargé l'application sur test flight je pense que cela peut arriver. Aussi, je suis d'accord avec votre dernière citation!

Je n'ai pas essayé de télécharger l'application sur testFlight, car j'aimerais avoir une version de développement avec laquelle travailler avant de potentiellement télécharger une version bêta cassée. Peut-être que codepush pourrait être utile dans ce cas. Quoi qu'il en soit, pouvez-vous expliquer la signification de const receiptBody = {'receipt-data': purchase.transactionReceipt, password: '[apple-id-password]'} ? J'ai essayé de mettre un mot de passe et j'obtiens toujours le même résultat. password représente-t-il le mot de passe Apple ID de l'utilisateur? Si tel est le cas, comment puis-je obtenir ces informations sans demander à l'utilisateur de les insérer?

Et qu'en est-il des accessToken nécessaires pour validateReceiptAndroid ? J'ai vérifié le post incroyable sur le débordement de pile que vous avez mentionné, mais il n'y a pas de guide clair sur la façon dont je peux obtenir le accessToken, recommandez-vous un moyen très simple d'obtenir ce access_token sans nécessairement créer un serveur? Le doc indique qu'il est possible de faire une vérification de reçu directement sur l'appareil: https://developer.android.com/google/play/billing/billing_library_overview

@ raynor85

  1. Vous pouvez vérifier le reçu de validation dans iOS, ce qui explique que le mot de passe est «_Utilisé uniquement pour les reçus contenant des abonnements à renouvellement automatique. Le secret partagé de votre application (une chaîne hexadécimale) ._».
  2. Je n'ai pas essayé ça en fait. J'ai développé cette fonctionnalité pour que d'autres développeurs contribuent facilement qui sont conscients de ces choses. Cependant, je pense que vous pouvez obtenir le accessToken via la console de jeu. Vous pouvez l'obtenir en suivant le processus.
    Sélectionnez votre application> Services et API> "VOTRE CLÉ DE LICENCE POUR CETTE APPLICATION Clé publique RSA codée en Base64 à inclure dans votre binaire". référence .

Veuillez également essayer 2.3.5 comme reçuValidation dans Android. Le paramètre envoyait une mauvaise identité dans transactionReceipt pour Android. J'espère que vous pourrez vous entraîner avec celui-ci et partager votre réussite dans notre readme. À votre santé!

@ raynor85 Je ne @JJMoon Ces fonctions devraient-elles fonctionner en mode sandbox?

Je l'ai compris, je n'appelais pas le "finishTransaction ()", donc j'étais coincé dans une boucle sur mon compte de test sandbox "L'achat a réussi" mais je n'ai pas complètement traité du côté d'Apple, ils l'ont appelé une boucle morte.

Ce fil a un peu déraillé, mais je vois la même erreur d'origine lors de l'exécution de l'application via xcode sur mon appareil avec un compte sandbox ( Error: Cannot connect to iTunes Store ). Je suis sur 2.3.19, que je crois être le plus récent.

Une note d'Apple concernant cette erreur: https://developer.apple.com/library/archive/technotes/tn2413/_index.html#//apple_ref/doc/uid/DTS40016228 -CH1-ERROR_MESSAGES-CANNOT_CONNECT_TO_ITUNES_STORE

Je pense que dans mon cas, j'obtiens cette erreur lorsque j'essaie de m'abonner à un produit alors que j'y suis déjà abonné. Il semble également apparaître lorsque je suis abonné et que je tente de modifier mon abonnement (en lançant une nouvelle demande RNIAP.buySubscription .

Pour toute autre personne qui rencontre un problème, notez également "Votre application s'exécute dans le simulateur, qui ne prend pas en charge les achats intégrés". est une autre raison pour laquelle vous pouvez obtenir cette erreur. Doit faire cela sur un vrai appareil.

Je pense que dans mon cas, j'obtiens cette erreur lorsque j'essaie de m'abonner à un produit alors que j'y suis déjà abonné. Il semble également apparaître lorsque je suis abonné et que je tente de modifier mon abonnement (en lançant une nouvelle demande RNIAP.buySubscription.

Alors, qu'est-ce que tu es censé faire dans ce cas? Comment savoir si le produit a été réellement acheté par l'utilisateur? .. J'ai essayé de restaurer des achats, mais rien ne semble changer

Cette page vous a été utile?
0 / 5 - 0 notes