React-native-iap: RNIap funktioniert nicht auf Android, aber unter iOS mit demselben Code

Erstellt am 7. Juli 2020  ·  33Kommentare  ·  Quelle: dooboolab/react-native-iap

Version von reaktiv-native-iap
4.4.7

Version von Reactive-native
0,60,6

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

Erwartetes Verhalten

     async componentDidMount() {
        try {
            const result = await RNIap.initConnection();
            await RNIap.consumeAllItemsAndroid();
            console.log('result', result);
            const products: Product[] = await RNIap.getProducts(itemSkus);
            this.setState({ products }, () => {console.log(this.state.products)});
        } catch (err) {
            console.warn(err.code, err.message);
        }

Das erwartete Verhalten ist eine Liste von Produkten, die von der Spielkonsole von .getProducts() im Terminal gedruckt wurde

Tatsächliches Verhalten
Das Versprechen wird nicht zurückgegeben. Fehler 'Abrechnung ist nicht verfügbar'

Getestete Umgebung (Emulator? Echtes Gerät?)
Echtes Gerät (App befindet sich derzeit in Produktion)

Schritte zum Reproduzieren des Verhaltens
const itemSkus = Platform.select({ ios: [ 'com.example.1' ], android: [ 'com.example.1' ] });

     async componentDidMount() {
        try {
            const result = await RNIap.initConnection();
            await RNIap.consumeAllItemsAndroid();
            console.log('result', result);
            const products: Product[] = await RNIap.getProducts(itemSkus);
            this.setState({ products }, () => {console.log(this.state.products)});
        } catch (err) {
            console.warn(err.code, err.message);
        }
    this.purchaseUpdateSubscription = purchaseUpdatedListener(async (purchase: InAppPurchase | SubscriptionPurchase | ProductPurchase) => {
        console.log('purchaseUpdatedListener', purchase);
        const receipt = purchase.transactionReceipt;
        if (receipt) {
            try {
                // if (Platform.OS === 'ios') {
                //   finishTransactionIOS(purchase.transactionId);
                // } else if (Platform.OS === 'android') {
                //   // If consumable (can be purchased again)
                //   consumePurchaseAndroid(purchase.purchaseToken);
                //   // If not consumable
                //   acknowledgePurchaseAndroid(purchase.purchaseToken);
                // }
                const ackResult = await finishTransaction(purchase);
            } catch (ackErr) {
                console.warn('ackErr', ackErr);
            }

            this.setState({ receipt }, () => this.goNext());
        }
    },
    );

    this.purchaseErrorSubscription = purchaseErrorListener(
        (error: PurchaseError) => {
            console.log('purchaseErrorListener', error);
        },
    );
}
componentWillUnmount() {
    if (this.purchaseUpdateSubscription) {
        this.purchaseUpdateSubscription.remove();
        this.purchaseUpdateSubscription = null;
    }
    if (this.purchaseErrorSubscription) {
        this.purchaseErrorSubscription.remove();
        this.purchaseErrorSubscription = null;
    }
}

Ich kann nicht verstehen, warum das so ist. Ich verwende genau diesen Code für iOS und er funktioniert perfekt. Ich habe alle Produkte in der Play Console eingerichtet, der Manifestdatei die Abrechnungsberechtigung hinzugefügt und das IAP-Paket verknüpft (ich verwende AndroidX, damit das Paket automatisch verknüpft wird). Ich bin im Play Store angemeldet und habe die neueste Version des Play Stores, aber initConnection() funktioniert immer noch nicht. Ich weiß nicht, was ich sonst tun soll. Jede Hilfe wird sehr geschätzt! Vielen Dank fürs Lesen.

🙏 help wanted 🤖 android

Alle 33 Kommentare

Würde das helfen?

Würde das helfen?

Leider hat es nicht geholfen :(. Könnte das etwas mit der AndroidX-Migration zu tun haben? Aus irgendeinem Grund funktioniert initConnection() nicht und ich weiß nicht warum.

@damialajogun Hast du herausgefunden, was los war? Ich habe genau den gleichen Fehler und verstehe nicht, woher er kommt ... initConnection() ist undefiniert.

@hyochan Hast du eine Idee?

@damialajogun Hast du herausgefunden, was los war? Ich habe genau den gleichen Fehler und verstehe nicht, woher er kommt ... initConnection() ist undefiniert.

Hey, nein, ich habe es noch nicht herausgefunden :(

Haben Sie <uses-permission android:name="com.android.vending.BILLING" /> zu Ihrer AndroidManifest.xml-Datei hinzugefügt?

@hakkikonu Ja habe ich

In meiner Fehlerprotokollierung kann ich sehen, dass bei einem kleinen Teil meiner Benutzer in mehreren Ländern wie den USA und Neuseeland derselbe Fehler auftritt. Es scheint jedoch sehr uneinheitlich zu sein. Irgendeine Idee woran das liegen kann?

@joris1995 Ich habe auch dieses Problem, ein kleiner Teil der Benutzer kann keine In-App-Käufe tätigen, der Fehler ist "Die Artikelnummer wurde nicht gefunden. Bitte rufen Sie zuerst Produkte durch Aufrufen von getItems ab", aber die Artikelnummer ist vorhanden, da ich im Kauf-Popup den Preis des Objekts aus getProducts anzeigen, getItems ist nicht einmal in der API

Hat Ihre Google Play Store App die neueste Version? Tritt dieses Problem nur auf Ihrem Telefon oder allen Benutzern auf.

Sie können auch versuchen, sich mit einem anderen Google Mail-Konto beim Google Play Store anzumelden.

Stellen Sie sicher, dass Sie Ihre Google Play-Dienste und die Cache-Dateien der Google Play Store-App aus den Einstellungen / Anwendungen / Google Play auf Ihrem Gerät entfernen.

Alle Benutzer/Konten/Telefone...

Für mich ist es nur ein Teil meiner Benutzer. Es scheint keinen einheitlichen Faktor wie Land, Betriebssystemversion oder Gerätehersteller zu geben. In BugSnag wird der Fehler „Billing is not available. Dies kann ein Problem mit Ihrem Gerät sein oder der Play Store ist möglicherweise nicht verfügbar. Woran kann das liegen?

Sie müssen eine Beta-Version einreichen, bevor Sie die In-App-Käufe laden können, und Sie können sie nur mit einem Release-Build debuggen.

Beta ist kein Muss. auch Closed Alpha ist ok

Ich habe auch das gleiche Problem, ich habe sogar Beta eingereicht und wurde vor 4 Tagen genehmigt

Wenn ich verstehe, was Sie sagen, funktioniert initConnection() nicht im Test, aber in der Beta?

@Kamsou Ja, obwohl hauptsächlich "getProducts()" in einem Debug-Build nicht funktioniert.

Weitere Informationen: https://medium.com/bleeding-edge/testing-in-app-purchases-on-android-a6de74f78878

Was bei mir vor sich geht, ist, dass ich, wenn ich sehen möchte, ob der Kauf getätigt wurde, Folgendes tue:
RNIap.getPurchaseHistory()
Auf iOS funktioniert alles normal.
Aber auf Android habe ich diesen einen Fehler: "Error: E_IAP_NOT_AVAILABLE"
_Ich bin auf meinem lokalen Emulator_

``` const initilizeIAPConnection = async () => { await initConnection() .then(async (connection) => { consumeAllItemsAndroid(); await getItems(); console.log('IAP result', connection); }) .catch((error) => { console.warn( IAP-FEHLER ${error.code}`, error.message);
});
};

const getItems = async () => {
Versuchen {
const Subscriptions = erwarten getSubscriptions(itemSkus);
console.log('Produkte', Abonnements);
setSubscriptions(Abonnements);
} fangen (irren) {
console.warn(err.code, err.message);
}
};
useEffect(() => {
initilizeIAPConnection();
}, []);

``` I just removed await for konsumierenAllItemsAndroid(); ` und es fing an zu arbeiten

@rizshivalli Freut mich zu hören, dass es bei dir funktioniert. Leider funktioniert es bei mir immer noch nicht, wenn ich wait for consumeAllItemsAndroid() entferne. Mein Problem ist, dass initConnection() nicht funktioniert. Wie können Sie das Teil zum Laufen bringen?

@damialajogun Ich habe try catch entfernt und .then und .catch hinzugefügt

@rizshivalli Das habe ich versucht und es funktioniert immer noch nicht :(. Entschuldigung für all die Fragen, aber können Sie tatsächlich "Produkte" von unten im Terminal gedruckt sehen? Ich denke, das Problem bei mir ist, dass es nicht zieht alle meine konfigurierten Produkte in der Spielkonsole, obwohl ich sie eingerichtet habe und sie aktiv sind.
const getItems = async () => { try { const subscriptions = await getSubscriptions(itemSkus); console.log('Products', subscriptions);

@damialajogun Ja, es funktioniert. Ich kann auch Zahlungen auf Android testen. Hast du den Build auf Android als Alpha oder Beta veröffentlicht?

@rizshivalli Nicht Alpha oder Beta, aber ich habe es in der Produktion veröffentlicht, damit es im Play Store live ist. Ich denke solange es auf einem echten Gerät ist (kein Emulator) sollte es funktionieren, leider ist es nichts für mich....

Hallo @rizshivalli kurze Frage - ist Ihre App bei Google Play als kostenlos oder kostenpflichtig aufgeführt? Meins ist kostenlos, aber mit In-App-Käufen (Benutzer können die App kostenlos herunterladen und Nicht-Verbrauchsmaterialien in der App kaufen), aber jetzt frage ich mich, ob es als bezahlt aufgeführt werden muss, damit der IAP funktioniert?

@damialajogun es wird als kostenlos aufgeführt, da Benutzer nicht für die Installation der App bezahlen müssen

Guten Morgen allerseits,
Hat jemand von euch eine Android-Anwendung, die gut mit Zahlungen funktioniert?
Denn bei mir funktioniert die initConnection nicht.

Ich tue, mit der neuesten Version. Ich glaube nicht, dass initConnection wirklich etwas tut, es startet nur die Verbindung, dann müssen Sie die Produkte holen

Irgendeine Lösung dafür?
Bei mir stürzt Android vor dem Starten der App ab. Aber iOS funktioniert wie erwartet.
Bitte helft

ich stehe (wahrscheinlich) vor dem gleichen Problem.

Ich habe meiner App zwei weitere Abonnements hinzugefügt, aber nur das alte funktioniert.
Wenn ich versuche, auf RNIap.getSubscriptions() zu warten, erhalte ich "Google gibt an, dass wir ein Problem mit der Verbindung zur Zahlung haben"

Wenn ich versuche, RNIap.requestSubscription(subId, true) aufzurufen, erhalte ich "Die Sku wurde nicht gefunden".

Skus sind in Google Play registriert und die IDs sind korrekt, das habe ich noch einmal überprüft. Getestet auf Emulator und realem Gerät, mit Debug- und Release-Modi.

Irgendeine Idee?

Hallo, anscheinend gab es in letzter Zeit keine Aktivitäten zu diesem Thema. Wurde das Problem behoben oder erfordert es immer noch die Aufmerksamkeit der Community? Dieses Problem kann geschlossen werden, wenn keine weitere Aktivität auftritt. Sie können dieses Problem auch als "Zur Diskussion" oder "Gute erste Ausgabe" kennzeichnen und ich werde es offen lassen. Vielen Dank für Ihre Beiträge.

Hallo, anscheinend gab es in letzter Zeit keine Aktivitäten zu diesem Thema. Wurde das Problem behoben oder erfordert es immer noch die Aufmerksamkeit der Community? Dieses Problem kann geschlossen werden, wenn keine weitere Aktivität auftritt. Sie können dieses Problem auch als "Zur Diskussion" oder "Gute erste Ausgabe" kennzeichnen und ich werde es offen lassen. Vielen Dank für Ihre Beiträge.

erfordert noch Aufmerksamkeit

Wir können schließen!

Le sam. 19 dez. 2020 à 11:03, damialajogun [email protected] a
schreiben:

Hallo, es sieht so aus, als ob es keine Aktivitäten zu diesem Thema gegeben hat
vor kurzem. Wurde das Problem behoben oder ist es noch erforderlich?
Aufmerksamkeit der Gemeinschaft? Dieses Problem kann geschlossen werden, wenn keine weiteren Aktivitäten erfolgen
tritt ein. Sie können dieses Problem auch als "Zur Diskussion" oder "Gut zuerst" kennzeichnen
Ausgabe" und ich lasse es offen. Vielen Dank für Ihre Beiträge.

erfordert noch Aufmerksamkeit


Sie erhalten dies, weil Sie erwähnt wurden.
Antworten Sie direkt auf diese E-Mail und zeigen Sie sie auf GitHub an
https://github.com/dooboolab/react-native-iap/issues/1040#issuecomment-748451922 ,
oder abmelden
https://github.com/notifications/unsubscribe-auth/AJ2B2AUIRMGWIHZSFYL6SWTSVR3AXANCNFSM4OSLGZSQ
.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen