"react-native-iap": "4.5.4",
"react-native": "0.61.4",
Android, nicht auf iOS getestet
buyUpdatedListener wird bei jedem Kauf ausgelöst
buyUpdatedListener feuert nur einmal für das erste Rezept, dann passiert nichts
Echtes Gerät, in dev env mit Test-Google-Konto ausführen (Abonnement alle 5 Minuten wiederholen - E-Mail geht ein, aber kein Empfang).
Vereinfachter Code, den ich verwende:
import React from 'react';
import { Text, View, TouchableOpacity, Alert } from 'react-native';
import RNIap, {
purchaseUpdatedListener,
purchaseErrorListener,
} from 'react-native-iap';
import { SpinnerOverlay } from '../components/SpinnerOverlay';
import { itemSkus } from '../config/in-app';
import { validateRecipt } from '../utils/validateRecipt';
import { logger } from '../utils/logger';
export class SubscriptionScreenInner extends React.Component {
purchaseUpdateSubscription = null;
purchaseErrorSubscription = null;
constructor(props) {
super(props);
this.state = {
products: [],
productsLoaded: false,
isProcessing: false
};
}
componentDidMount = async () => {
try {
if (itemSkus) {
await RNIap.initConnection();
await RNIap.flushFailedPurchasesCachedAsPendingAndroid();
const products = await RNIap.getSubscriptions(itemSkus);
this.setState({ products, productsLoaded: true });
this.purchaseUpdateSubscription = purchaseUpdatedListener(
async (purchase) => {
try {
const receipt = purchase.transactionReceipt;
if (receipt) {
const validate = await validateRecipt(purchase);
if (validate) {
await RNIap.finishTransaction(purchase, false);
this.props.fetchUserProfile();
this.resetScreenState();
Alert.alert('receipt validated', 'cool');
}
}
} catch (error) {
this.resetScreenState();
logger('Validate recipt error', error);
}
}
);
this.purchaseErrorSubscription = purchaseErrorListener((error) => {
this.resetScreenState();
logger('Purchase error during loading', error);
});
}
} catch (error) {
logger('Store prroducts error', error);
}
};
componentWillUnmount() {
if (this.purchaseUpdateSubscription) {
this.purchaseUpdateSubscription.remove();
}
if (this.purchaseErrorSubscription) {
this.purchaseErrorSubscription.remove();
}
RNIap.endConnection();
}
requestSubscription = async (sku) => {
this.setState({ isProcessing: true }, async () => {
await RNIap.requestSubscription(sku);
});
};
resetScreenState = () => {
this.setState({ isProcessing: false });
};
render() {
const { products, productsLoaded, isProcessing } = this.state;
if (!productsLoaded || isProcessing) {
return (
<View>
<SpinnerOverlay />
</View>
);
}
return (
<View>
<View>
<View>
<View>
<Text>Buy monthly subscription</Text>
</View>
<View>
<TouchableOpacity onPress={() => this.requestSubscription(products[0].productId)}>
<Text>Buy</Text>
</TouchableOpacity>
</View>
</View>
</View>
</View>
);
}
}
Ich habe React Native auf 0.63.2 aktualisiert, aber es hat nicht geholfen.
Nach dem Bumpen von Reactive-native-iap auf 4.6.3 keine Änderung.
Ich habe genau das gleiche Problem, war früher auf 4.4.9, wurde auf 4.6.3 gestoßen und tritt immer noch auf
Konntest du es beheben oder hast du einen Workaround gefunden?
Dafür habe ich leider keine Lösung.
Das ist sehr seltsam. Wollen Sie damit sagen, dass Sie versuchen, nach dem ersten Kauf erneut zu kaufen, das purchaseUpdatedListener
wird nicht ausgelöst? Ich habe dies früher getestet und es sollte so lange feuern, bis Sie den Hörer töten.
Ach, ich verstehe. Sie haben ein Problem mit dem nächsten Abonnementereignis. Lass mich das testen und komme wieder.
Wir stehen vor dem gleichen Problem, ich habe 4.4.9 verwendet und versucht, ein Downgrade und ein Upgrade auf die neueste 5.1.1 durchzuführen, aber das Ergebnis ist immer noch das gleiche. Nur das erste Mal Ereignis erhalten.
irgendeine Lösung dafür?
Als vorübergehende Lösung speichere ich den ersten Beleg vom Abonnementereignis und validiere ihn bei jeder Anwendungsinitialisierung - es funktioniert, aber ich habe es nur für Android getestet.
Hallo @hyochan
Hast du eine Idee, wann das gelöst wird?
Danke
Danke für die Erinnerung! Das teste ich morgen mal.
@hyochan
Ich weiß, dass Sie noch an dem Problem arbeiten, wollte nur über das nächste Patch-Datum für dieses Problem Bescheid wissen, da unser gesamtes Team auf dieses wartet.
Dankeschön
@Kalesberg Ich werde diese Woche auf jeden Fall ausprobieren und Updates teilen. Diese Bibliothek wird jedoch von vielen anderen verwendet und die Implementierung auf purchaseUpdatedListner
seitdem nicht geändert. Vielleicht muss ich zuerst ein reproduzierbares Beispiel machen. Ich werde es diese Woche versuchen.
Ähnliche für iOS
in #1160
@hyochan
Bin dankbar!!
@Kalesberg Könnten Sie bitte überprüfen, ob android.test.purchased
auch mehrmals ausgelöst wird ?
@hyochan wird das tun!
@hyochan
Unser Produkt ist nur für Abonnements gedacht, daher kann android.test.purchased
nicht am besten bezeugt werden.
Also habe ich versucht, Ihre Demo-App in dieser Bibliothek zu verwenden und test.sub1
hinzugefügt, aber ich konnte kein Produkt damit erhalten
@Kalesberg Könnten Sie Android Logcat dort platzieren, wo es purchaseUpdatedListener
auslöst?
Bitte sagen Sie mir, was in billingResult
und purchases
.
@hyochan , hoffe es hilft
Ich freue mich sehr auf diese Patch-Version
Ich versuche das jetzt zu untersuchen. Kannst du mir übrigens ein besseres Dateiformat geben? rtf
Datei ist schwer zu öffnen in meiner Umgebung, die chromeos
. Sie können mir auch eine E-Mail ([email protected]) senden, wenn Sie der Meinung sind, dass es ein Datenschutzproblem gibt.
@Kalesberg Sie können sich das auch https://stackoverflow.com/questions/56744971/google-play-billing-library-developer-error-code-5-if-i-want-to-consume-or-ackno
@hyochan
Bedeutet das, dass an diesem Plugin nichts auszusetzen ist?
die iOS-Version funktioniert gut, aber nur die Android-Handys sind problematisch
Wir finden gerade das Problem heraus. Nach dem von Ihnen bereitgestellten Logcat sieht es jedoch so aus, als ob das acknowledgePurchase
das finishTransaction
nicht richtig funktionierte, da der Kauf auf Sendung war. Ich habe den Stackoverflow geteilt, der auch über die ähnliche Situation spricht.
@hyochan
das Problem besteht auch im Test-Abonnementmodus, der immer erfolgreich sein sollte
@hyochan , irgendwelche Updates zum Plugin?
Hilfreichster Kommentar
Ach, ich verstehe. Sie haben ein Problem mit dem nächsten Abonnementereignis. Lass mich das testen und komme wieder.