2.3.0
Android
let sub = warten RNIApp.buySubscription("some");
sollte warten, bis der Benutzer auf die Schaltfläche "Kaufen" bei In-App-Zahlungen klickt
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
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
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.
Hilfreichster Kommentar
Daran arbeiten wir gerade. Außerdem, jeder, der damit konfrontiert ist, haben Sie
getSubscriptions
angerufen, bevor Sie tatsächlichbuySubscription
gecallt haben?