React-native-iap: Lässt kein Android-Objekt auf dem Testkonto neu kaufen

Erstellt am 13. Apr. 2018  ·  16Kommentare  ·  Quelle: dooboolab/react-native-iap

Version von react-native-iap

0.3.10

Plattformen, auf denen Sie den Fehler hatten (IOS oder Android oder beides?)

Android

Erwartetes Verhalten

Sollte in der Lage sein, einen Artikel so oft neu zu kaufen, wie ich brauche, da ich nur teste

Tatsächliches Verhalten

Kehrt zurück

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)

Schritte, um das Verhalten wiederzugeben

Kaufen Sie einen Artikel mehrmals über ein Testkonto

🙏 help wanted

Hilfreichster Kommentar

Ich hatte das gleiche Problem wie @ilyakar und konnte mit dem folgenden Code den nicht verbrauchbaren Kauf löschen und erneut testen.


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);
    }
  };

Alle 16 Kommentare

@ilyakar Ist das ein Verbrauchsmaterial? Sie solltenItem verbrauchen, um es neu zu kaufen. Bitte lesen Sie einige Anleitungen zur Funktionsweise von IAP in Android.

Hallo @dooboolab , es ist kein Verbrauchsmaterial. Benutzer haben es für immer. Es gibt eine Möglichkeit, das Produkt wiederherzustellen. Es ist daher gut, den Benutzern in der Produktion mitzuteilen, dass sie nicht dasselbe Produkt erneut kaufen können, da sie es bereits gekauft haben. Zu Testzwecken ist es jedoch sehr unangenehm, jedes Mal, wenn alle Einkäufe gekauft wurden, ein anderes Konto verwenden zu müssen.

Ich glaube nicht, dass ich dieses Problem in 0.2.17 hatte

@ilyakar Ah .. Entschuldigung, ich war verwirrt. Wenn es sich um ein non-consumable -Produkt handelt, können Sie es nicht erneut kaufen. Wenn dies in 0.2.17 , muss dies umständlich funktionieren. Nur Verbrauchsmaterialien können es neu kaufen. Es ist auf beiden Plattformen (iOS und Android) gleich. Wenn der Benutzer das Element wiederherstellen möchte, muss er dies optional tun, aber wie in LINK wird der Benutzer nicht erneut belastet. Wenn Sie In-App-Produkte entwerfen, die Sie Benutzern durch erneutes Kaufen in Rechnung stellen möchten, sollten Sie daher ein consumable -Produkt erstellen.

@ilyakar Ich habe Feedback von meinem Freund Entwickler und er hatte auch das gleiche Problem. Aus diesem Grund habe ich eine Lösung für die Verwendung der Methode refreshItems , die nur in android . Sie können dies in [email protected] . Versuchen Sie es nach der Methode prepare . Mein Freund war mit diesem Problem konfrontiert, weil er das Token des gekauften Produkts zum Konsumieren nicht finden konnte. Daher ist dieses method nur zu Ihrer Erleichterung, wenn Sie sich nicht für die Historie der Einkäufe interessieren, die auf playstore beruhen. Wenn Sie über ein eigenes Backend verfügen, das die Kaufhistorie erfasst, können Sie das Problem leichter lösen. Ich muss mir diesen noch schwieriger ansehen. Außerdem würde es Ihnen helfen, den readme folgen. Vielen Dank für Ihren Bericht!

PS Ich denke, die obige Methode funktioniert auch bei non-consumable Produkten. Auch dieser Artikel hilft Ihnen zu verstehen, was refeshItems Sie lösen würde.

Ich denke, dies ist bereits gelöst, da ich nicht glaube, dass IAP mit Test Account funktioniert

Und @dooboolabs Lösung von refreshItems ist der richtige Weg

Eine Noob-Frage @dooboolab, da ich IAP nur einmal in einer Android-App implementiert habe, aber nie versucht habe, ob es funktioniert 😂

Können wir ein Produkt kaufen, ohne Geld wie 0 $ auszugeben?

Ja @ deadcoder0904 , das ist das gesamte Konzept von Android-Testkonten (https://developer.android.com/google/play/billing/billing_testing.html). Was mit dem Plugin gut funktioniert, aber wie ich bereits erwähnt habe, können Sie nicht zweimal denselben Kauf tätigen.

@ilyakar Du sagst, dass es immer noch nicht funktioniert. Haben Sie versucht, nach dem Kauf des Produkts refreshItems anzurufen? Wie in beschrieben hier kann es eine gewisse Verzögerung in Plays verursachen. Sie können jedoch den Verbrauch des Produkts erzwingen, um es erneut kaufen zu können. Ich bin auch neugierig, warum dies funktioniert. Achten Sie auch darauf, ob Sie sich auf Einkäufe im Google Play-Verlauf verlassen und diese nicht in Ihrem Backend sammeln.

Hallo @dooboolab , ich habe gerade mit meinem Vorwissen auf @ deadcoder0904 geantwortet . Ich fürchte, ich habe Ihre Lösung nicht ausprobiert und werde es wahrscheinlich einige Zeit nicht tun, da dies keine dringende Lösung ist. Aber ich werde Sie in Zukunft wissen lassen, wenn ich habe.

@ilyakar Vorsicht bei der Verwendung von refreshItems da alle vom Benutzer gekauften Produkte verbraucht werden. Sie können es nur verwenden, wenn Sie sich nicht für die im Playstore gespeicherten Informationen interessieren, da Sie Ihren Won-Server haben. Dieses Problem tritt auch auf, wie ich es vor 13 Tagen von hier aus gepostet habe. Wenn der Benutzer den Artikel erstattet hat, kann es sein, dass er denselben Artikel 24 Stunden lang nicht erneut kauft.

Ich hatte das gleiche Problem wie @ilyakar und konnte mit dem folgenden Code den nicht verbrauchbaren Kauf löschen und erneut testen.


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 Diese Lösung funktioniert

  • Ich habe es mit consumeAllItemsAndroid anstelle von consumeAllItems versucht.
    Jede weitere Hilfe wird geschätzt.

Die Konsolenausgabe lautet:

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

Auf:

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

@tulpn Sieht so aus, als hätten Sie unser Modul nicht richtig installiert, da consumeAllItemsAndroid einwandfrei funktionieren sollte.

@ Hyochan Hat bei mir nicht funktioniert.

@ root-ai Welche Version verwendest du? Bitte beziehen Sie sich auch auf den Code, den wir auch in example haben.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen