React-native-iap: Abonnement kaufen, das Benutzerfeedback ignoriert

Erstellt am 6. Okt. 2018  ·  32Kommentare  ·  Quelle: dooboolab/react-native-iap

Version von reaktiv-native-iap

2.3.0

Plattformen, bei denen der Fehler aufgetreten ist (IOS oder Android oder beides?)

Android

Erwartetes Verhalten

let sub = warten RNIApp.buySubscription("some");

sollte warten, bis der Benutzer auf die Schaltfläche "Kaufen" bei In-App-Zahlungen klickt

Tatsächliches Verhalten

Ich kann nicht überprüfen, ob der Benutzer das Abonnement akzeptiert hat, denn wenn Sie Folgendes tun:

let sub = warten RNIApp.buySubscription("some");
wenn (unter) {
mach ein paar dinge..
}

der if(sub)-Block wird sofort nach dem Öffnen des Popups ausgeführt, aber der Benutzer akzeptiert das Abonnement immer noch nicht

Getestete Umgebung (Emulator? Echtes Gerät?)

Echtes Gerät

Irgendwelche Ideen?

Es gibt andere Methoden wie getAvailablePurchases, die ebenfalls ein Promise zurückgeben und gut funktionieren

Das Problem ist, dass buySubscription den Rückruf der Benutzereingabe zurückgeben sollte und dies nicht der Fall ist

⌚️ regression 📱 iOS

Hilfreichster Kommentar

Daran arbeiten wir gerade. Außerdem, jeder, der damit konfrontiert ist, haben Sie getSubscriptions angerufen, bevor Sie tatsächlich buySubscription gecallt haben?

Alle 32 Kommentare

Ich benutze RN 57, auch das Abonnement wird abgeschlossen, ich kann im Playstore überprüfen, ob der Kauf in Ordnung ist, aber das buySubscription-Versprechen kehrt undefiniert zurück

irgendeine Hilfe?

Nun, ich habe ein Downgrade auf 2.2.2 und es funktioniert.. also ich denke, ihr habt etwas in eurer neuen Version verpasst

@marcosmartinez7 Entschuldigung für den Bruch, könntest du es mit 2.3.1 versuchen?

Hallo danke!

Ich habe gerade keine Zeit, aber ich werde es tun

@marcosmartinez7 Danke, komm bitte zurück.

@dooboolab Problem ist auch auf iOS vorhanden. Habe sowohl 2.3.1 als auch 2.3.2 . Wie von @marcosmartinez7 erwähnt, 2.2.2 einwandfrei

Ich denke, es ist in 2.3.3 behoben. Bitte öffnen Sie wieder, wenn dies immer noch der Fall ist.

@dooboolab Es tut mir leid, habe gerade 2.3.5 installiert und neu verlinkt. await RNIap.buySubscription(iapProductId) immer noch sofort undefined auf iOS zurück

@Gaia-Nutrition Ich denke, Ihr Problem ist anders, da sich der Code von ios nicht geändert hat. Könnten Sie versuchen, die Verknüpfung aufzuheben und erneut zu verknüpfen?

@dooboolab Ich habe versucht, zu verknüpfen und die Verknüpfung aufzuheben. Immer wenn ich zurück zu 2.2.2 wechsle, funktioniert es wieder. Aber ich schau morgen nochmal nach. Vielleicht werde ich versuchen, die native Komponente manuell zu installieren

@dooboolab Ok, ich habe jetzt die neue 2.3.6 Version manuell verlinkt. Immer noch undefined . Ich würde gerne helfen, dieses Problem zu lösen. Lassen Sie mich wissen, was ich tun kann, um zu helfen!

Kann das jemand bestätigen? Dies sollte insbesondere in ios nicht passieren.

@dooboolab Ich kann bestätigen, dass unter iOS Version 2.3.6 die Versprechen nicht erfüllt, Version 2.2.2 jedoch (mit einem iPhone 5-Gerät, React Native 0.56)

Ich habe dieses Problem auch am 2.3.7. Wenn ich versuche, await die nächste Zeile sofort aufgerufen, anstatt auf das Versprechen zu warten, und wenn ich RNIap.buySubscription(subId).then(purchase => {}) , stürzt es mit dem Fehler ab, die Eigenschaft kann dann von undefiniert nicht gelesen werden

Daran arbeiten wir gerade. Außerdem, jeder, der damit konfrontiert ist, haben Sie getSubscriptions angerufen, bevor Sie tatsächlich buySubscription gecallt haben?

Ich habe gerade den Kauf in der RNExample-App getestet. Ich habe ein Abonnement mit der Methode buyProductWithoutFinishTransaction() gekauft.
Ich schlage vor, genau wie RNExample zu testen. Und aktualisiere Xcode, Build-Einstellung auf 'Legacy'. Ich denke, der Build-Prozess in Xcode hat dieses Update geändert.
Und verwenden Sie einen neu erstellten Sandbox-Tester.

@JJMoon sehr interessant. Die Kombination von buyProductWithoutFinishTransaction() und finishTransaction() funktioniert bei 2.3.7 während buySubscription() direkt immer noch fehlschlägt!

@Gaia-Ernährung OK. Verwenden Sie dann buyProductWithoutFinishTransaction und finishTransaction anstelle von buySubscription . Die Kaufaktion ist genau die gleiche.

@Gaia-Nutrition Kannst du 2.3.8 versuchen? Haben Sie getSubscriptions vor buySubscription angerufen?

@dooboolab 2.3.8 schlägt immer noch mit buySubscription fehl und noch einmal: Ja, ich habe getSubscriptions schon einmal angerufen. Ich glaube nicht, dass buyProductWithoutFinishTransaction() sonst funktionieren würde.

Ich habe buySubscription auf einem iOS-Gerät im Sandbox-Modus getestet.
Es gelang zum Erfolg, aber es zeigt eine Fehlermeldung an.
Und das automatisch erneuerbare Abonnement stellt keine Quittung aus.
Ich schlage vor, buyProductWithoutFinishTransaction und finishTransaction anstelle von buySubscription zu verwenden.
Derzeit habe ich kein Gerät zum Testen, ich werde dieses Problem später verfolgen.

Fühlt sich an, als ob dies derzeit nur in iOS Problem ist. Habe ich recht?

@dooboolab Nein, tritt auch auf Android auf. Die Funktion gibt undefined zurück, noch bevor die erste Zeile in buyItemByType aufgerufen wird.

@dooboolab Das Problem wird in der index.js:105 verursacht. Sie sollten die Zeilen in etwas ändern wie

export const buySubscription = (sku, oldSku, prorationMode) => Platform.select({ ios: () => RNIapIos.buyProduct(sku), android: () => RNIapModule.buyItemByType(ANDROID_ITEM_TYPE_SUBSCRIPTION, sku, oldSku, -1), })();
(Ich weiß, dass der ProrationMode ignoriert wird)

Nach erfolgreicher Anmeldung gibt es jedoch ein Problem:

E/UncaughtException: java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object java.util.List.get(int)' on a null object reference at com.dooboolab.RNIap.RNIapModule$11.onPurchasesUpdated(RNIapModule.java:427) at com.android.billingclient.api.BillingClientImpl$1.onReceive(BillingClientImpl.java:136) at com.android.billingclient.api.LocalBroadcastManager.executePendingBroadcasts(LocalBroadcastManager.java:303) at com.android.billingclient.api.LocalBroadcastManager.access$000(LocalBroadcastManager.java:44) at com.android.billingclient.api.LocalBroadcastManager$1.handleMessage(LocalBroadcastManager.java:114) at android.os.Handler.dispatchMessage(Handler.java:105) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6938) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

@mfentross Bei welcher Version von react-native-iap bist du? Es gibt eine leere Zeile in RNIapModule.java:427 . Bitte versuchen Sie es erneut mit dem letzten.

Mein Fehler: Ich habe ein paar Zeilen editiert. Aber die Lösung für das Hauptproblem besteht darin, die Funktion "Abo kaufen" auf zu ändern

`
export const buySubscription = (sku, oldSku, prorationMode) =>
Plattform.select({
ios: () => RNIapIos.buyProduct(sku),
Android: () => {
if (!prorationMode) prorationMode = -1;
Rückgabe RNIapModule.buyItemByType (ANDROID_ITEM_TYPE_SUBSCRIPTION, sku, oldSku, prorationMode);
},
})();

`

Es gab einige unnötige Klammern.

@mfentross mein schlecht. Ich habe die Anweisung return verpasst. Ich habe gerade in 2.3.11 . Also funktioniert das Android jetzt?

@dooboolab Danke, es funktioniert jetzt

@mfentross @JJMoon Ok! Wir haben also nur noch das iOS-Problem.

@JJMoon Er sagt, wenn die Wrap-Methode mit async und await funktioniert, funktioniert es. Ich bin mir jedoch nicht ganz sicher, wie dies möglich sein könnte. Das Umschließen mit async und await ist im Rückgabewert überflüssig, oder?

Ich habe in 2.3.13 . Ich hoffe, Sie alle probieren das aus.

Bitte öffnen Sie wieder, wenn dies immer noch der Fall ist. Vielen Dank für alle Hilfestellungen.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen