React-native-iap: Ne permet pas de racheter un article Android sur un compte de test

Créé le 13 avr. 2018  ·  16Commentaires  ·  Source: dooboolab/react-native-iap

Version de react-native-iap

0.3.10

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

Android

Comportement attendu

Devrait pouvoir racheter un article autant de fois que nécessaire puisque je ne fais que tester

Comportement réel

Retour

Error: You already own this item.
    at createErrorFromErrorData (59522b9c-ca17-4e00-9e00-05cc989b1199:2016)
    at 59522b9c-ca17-4e00-9e00-05cc989b1199:1968
    at MessageQueue.__invokeCallback (59522b9c-ca17-4e00-9e00-05cc989b1199:2410)
    at 59522b9c-ca17-4e00-9e00-05cc989b1199:2155
    at MessageQueue.__guardSafe (59522b9c-ca17-4e00-9e00-05cc989b1199:2323)
    at MessageQueue.invokeCallbackAndReturnFlushedQueue (59522b9c-ca17-4e00-9e00-05cc989b1199:2154)
    at t (RNDebuggerWorker.js:1)

Étapes pour reproduire le behabior

Achetez un article plus d'une fois à l'aide d'un compte test

🙏 help wanted

Commentaire le plus utile

Je rencontrais le même problème que @ilyakar et, en utilisant le code ci-dessous, j'ai pu effacer l'achat de non-consommables et le tester à nouveau.


async componentDidMount() {
    const { itemSkus } = this.props;
    try {
      const result = await RNIap.initConnection()
      console.log('initiated connection?', result)
      const consumed = await RNIap.consumeAllItems();
      console.log('consumed all items?', consumed)
      let products = await RNIap.getProducts(itemSkus);
      console.log('loaded products', products)
    } catch (err) {
      console.warn(err);
    }
  };

Tous les 16 commentaires

@ilyakar S'agit-il d'un produit consommable? Vous devez consommer l'article pour le racheter. Veuillez lire quelques guides sur le fonctionnement d'IAP sous Android.

Salut @dooboolab , ce n'est pas un produit consommable. Les utilisateurs l'ont pour toujours. Il existe un moyen de restaurer le produit, il est donc bon de faire savoir aux utilisateurs en production qu'ils ne peuvent plus acheter le même produit car ils l'ont déjà acheté. Mais à des fins de test, il devient très inconfortable de devoir utiliser un compte différent chaque fois que tous les achats ont été achetés.

Je ne pense pas avoir eu ce problème en 0.2.17

@ilyakar Ah .. Désolé, j'étais confus. En fait, s'il s'agit d'un produit non-consumable , vous ne pouvez pas le racheter. Si cela était possible en 0.2.17 cela doit fonctionner maladroitement .. Seuls les produits consommables peuvent le racheter. C'est la même chose sur les deux plates-formes (ios et android). Si l'utilisateur souhaite restaurer l'élément, il doit le faire facultativement, mais comme dans LINK , il ne facturera pas à nouveau l'utilisateur. Par conséquent, si vous concevez des produits intégrés à l'application que vous souhaitez facturer aux utilisateurs en rachetant, je pense que vous devriez créer un produit consumable .

@ilyakar J'ai reçu des commentaires de mon ami développeur et il a également rencontré le même problème. Par conséquent, j'ai trouvé une solution pour utiliser la méthode refreshItems qui ne se produit que dans android . Vous pouvez l'utiliser dans [email protected] . Essayez de l'utiliser après la méthode prepare . Mon ami faisait face à ce problème car il ne trouvait pas le jeton du produit acheté à consommer. Par conséquent, ce method est juste pour votre facilité si vous ne vous souciez pas de l'historique des achats qui repose sur playstore . Lorsque vous disposez de votre propre backend collectant l'historique des achats, cela vous aidera à résoudre le problème. Je dois jeter un œil sur celui-ci en plus difficile. De plus, suivre les readme vous aiderait. Je vous remercie pour votre rapport!

PS Je pense que la méthode ci-dessus fonctionnera également sur le produit non-consumable . Cet article vous aidera également à comprendre ce que refeshItems vous résoudrait.

Je pense que cela est déjà résolu car je ne pense pas que IAP fonctionne avec le compte de test

Et la solution de @dooboolab de refreshItems est la voie à suivre

Une question noob @dooboolab car je n'ai implémenté IAP qu'une seule fois dans une application Android mais je n'ai jamais essayé si cela fonctionne 😂

Pouvons-nous acheter un produit sans dépenser d'argent comme 0 $?

Oui @ deadcoder0904 , c'est tout le concept des comptes de test Android (https://developer.android.com/google/play/billing/billing_testing.html). Cela fonctionne bien avec le plugin, mais comme je l'ai souligné, vous ne pouvez pas faire le même achat deux fois.

@ilyakar Vous dites que cela ne fonctionne toujours pas. Avez-vous essayé d'appeler refreshItems après avoir acheté le produit? Comme décrit ici , cela peut entraîner un certain retard dans le Playstore. Cependant, vous pouvez forcer la consommation du produit pour pouvoir racheter à nouveau. Je suis également curieux de savoir pourquoi cela fonctionne. Faites également attention si vous comptez sur les achats sur l'historique de Google Play et ne pas le collecter dans votre backend.

Salut @dooboolab , je répondais juste à @ deadcoder0904 avec mes connaissances précédentes. J'ai bien peur de ne pas avoir essayé votre solution et je ne le ferai probablement pas pendant un certain temps car ce n'est pas une solution urgente. Mais je vous ferai savoir à l'avenir quand je l'ai fait.

@ilyakar attention à utiliser refreshItems car il consommera tous les produits achetés par l'utilisateur. Vous ne pouvez l'utiliser que si vous ne vous souciez pas des informations stockées dans le Playstore parce que vous avez votre serveur gagné. De plus, ce problème se produit comme je l'ai publié il y a 13 jours d' ici , si l'utilisateur a remboursé l'article, l'utilisateur ne peut pas racheter le même article pendant 24 heures.

Je rencontrais le même problème que @ilyakar et, en utilisant le code ci-dessous, j'ai pu effacer l'achat de non-consommables et le tester à nouveau.


async componentDidMount() {
    const { itemSkus } = this.props;
    try {
      const result = await RNIap.initConnection()
      console.log('initiated connection?', result)
      const consumed = await RNIap.consumeAllItems();
      console.log('consumed all items?', consumed)
      let products = await RNIap.getProducts(itemSkus);
      console.log('loaded products', products)
    } catch (err) {
      console.warn(err);
    }
  };

@TylerNoblett Cette solution ne fonctionne pas pour le moment.

  • J'ai essayé avec consumeAllItemsAndroid au lieu de consumeAllItems .
    Toute aide supplémentaire est appréciée.

La sortie de la console est:

setUpDeveloperTools.js:73 TypeError: _reactNativeIap.default.consumeAllItems is not a function
    at loadPurchases$ (NewGameScreen.js:167)
    at tryCatch (runtime.js:45)
    at Generator.invoke [as _invoke] (runtime.js:271)
    at Generator.prototype.<computed> [as next] (runtime.js:97)
    at tryCatch (runtime.js:45)
    at invoke (runtime.js:135)
    at runtime.js:145
    at tryCallOne (core.js:37)
    at core.js:123
    at JSTimers.js:289

Sur:

    "react": "16.9.0",
    "react-native": "0.61.3",
    "react-native-iap": "^4.3.0",

@tulpn On dirait que vous n'avez pas correctement installé notre module puisque consumeAllItemsAndroid devrait fonctionner correctement.

@hyochan n'a pas fonctionné pour moi.

@ roots-ai Quelle version utilisez-vous? Veuillez également vous référer au code que nous avons fourni dans example .

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