React-native-iap: [Android] getProducts gibt immer ein leeres Array zurück

Erstellt am 25. Apr. 2018  ·  19Kommentare  ·  Quelle: dooboolab/react-native-iap

Version von react-native-iap

0.3.15

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

Android

Erwartetes Verhalten

Holen Sie sich alle Produkte

Tatsächliches Verhalten

Alle funktionieren gut unter iOS, aber getProducts gibt auf Android immer ein leeres Array zurück.
Ich denke, es ist ein Konfigurationsproblem, aber ich habe jeden Schritt befolgt ...

APK-Upload mit Abrechnungserlaubnis / Händlerkonto eingerichtet / In App-Kauf erstellen ...

🙏 help wanted

Hilfreichster Kommentar

@vadermemo @martinberbesson Hi ~ Könnten Sie Ihren js-Code für itemSkus teilen? Haben Sie den folgenden Code eingerichtet?

export const PURCHASE_ITEMS = Platform.select({
  ios: [
    'productid_1',
    'productid_2',
  ],
  android: [
    'productid_1',
    'productid_2',
  ],
});

Außerdem werden Entwurfs-App-Tests nicht mehr unterstützt. Bitte beziehen Sie sich auf die Anleitung . Stellen Sie sicher, dass Sie Ihre App auf dem Alpha- oder Betakanal veröffentlichen.

Alle 19 Kommentare

Gleiches Problem hier

Mein Ausschnitt:

  RNIap.prepare().then(responsePrepare => {
    console.log("=============>responsePrepare:" + responsePrepare);
    RNIap.getProducts(itemSkus).then(response => {
        this.setState({ items  : response});
        console.log("=============>response:" + JSON.stringify(response));
    });
  });

Meine Antwort auf adb.logcat (Android)

208 28473 28524 I ReactNativeJS: Ausführen der Anwendung "testingIap" mit appParams: {"rootTag": 11}. __DEV__ === true, Warnung auf Entwicklungsebene ist aktiviert, Leistungsoptimierungen sind deaktiviert
04-25 17: 04: 04.228 1140 1150 I AccountManagerService: getTypesVisibleToCaller: isPermitted? wahr
04-25 17: 04: 04.230 1140 2059 I AccountManagerService: getTypesVisibleToCaller: isPermitted? wahr
04-25 17: 04: 04.232 24842 24933 I Finsky: [4061] com.google.android.finsky.billing.iab.ab.b (46): com.projectbundle: Konto vom ersten Konto - [uuAJBL1tLX2MAj69S-olEslXXXX]
04-25 17: 04: 04.233 28473 28473 D RNIapModule: Abrechnungsclient bereit
04-25 17: 04: 04.303 28473 28524 I ReactNativeJS: =============> responsePrepare: null
04-25 17: 04: 04.308 28473 28524 I ReactNativeJS: =============> responsePrepare: null
04-25 17: 04: 04.328 1140 2107 I AccountManagerService: getTypesVisibleToCaller: isPermitted? wahr
04-25 17: 04: 04.330 1140 1896 I AccountManagerService: getTypesVisibleToCaller: isPermitted? wahr
04-25 17: 04: 04.339 1140 2095 I AccountManagerService: getTypesVisibleToCaller: isPermitted? wahr
04-25 17: 04: 04.340 1140 1679 I AccountManagerService: getTypesVisibleToCaller: isPermitted? wahr
04-25 17: 04: 04.343 24842 24854 I Finsky: [4020] com.google.android.finsky.billing.iab.ab.b (46): com.projectbundle: Konto vom ersten Konto - [uuAJBL1tLX2MAj69S-olEslXXXX]
04-25 17: 04: 04.347 24842 24853 I Finsky: [4019] com.google.android.finsky.billing.iab.ab.b (46): com.projectbundle: Konto vom ersten Konto - [uuAJBL1tLX2MAj69S-olEslXXXX]
04-25 17: 04: 04.626 28473 28525 D RNIapModule: responseCode: 0
04-25 17: 04: 04.628 28473 28525 D RNIapModule: responseCode: 0
04-25 17: 04: 04.669 28473 28524 I ReactNativeJS: =============> Antwort: []
04-25 17: 04: 04.693 28473 28524 I ReactNativeJS: =============> Antwort: []

Aber mit iOS bekomme ich das Array mit dem Daten-Well-Format.

PD1 Ich erhalte die Empfehlung von https://medium.com/@dooboolab/react -native-in-app-purchase-121622d26b67

PD2 "Hilf mir, Obi Wan Kenobi, du bist meine einzige Hoffnung"

Package.json-Snippet:
"Abhängigkeiten": {
"reagieren": "16.3.1",
"reaktionsnativ": "0,55,3",
"react-native-iap": "^ 0.3.18"
},

@vadermemo @martinberbesson Hi ~ Könnten Sie Ihren js-Code für itemSkus teilen? Haben Sie den folgenden Code eingerichtet?

export const PURCHASE_ITEMS = Platform.select({
  ios: [
    'productid_1',
    'productid_2',
  ],
  android: [
    'productid_1',
    'productid_2',
  ],
});

Außerdem werden Entwurfs-App-Tests nicht mehr unterstützt. Bitte beziehen Sie sich auf die Anleitung . Stellen Sie sicher, dass Sie Ihre App auf dem Alpha- oder Betakanal veröffentlichen.

Hallo @dooboolab

Das sind meine Daten
const itemSkus = Platform.select ({
ios: [
'com.iap.cart',
'com.iap.doublecoins'
],
Android: [
'doppelt',
'cart_1500'
],
});

Freundliche Grüße

PD1 Meine App ist in der Alfa-Version, auch wenn ich die Produkte nicht bekomme.
PD2 Mit anderen npm, wie React-Native-Billing, kann ich die Produkte erhalten :(

@vadermemo das souds wirklich schlecht für mich .. sorry dafür. Es funktioniert gut in meiner Umgebung. Ich werde morgen mehr debuggen und sicher morgen zurückkommen! Könnten Sie auch versuchen, die Aussage zu fangen und zu sehen, was dort erscheint?

Ich denke, ich brauche eine Alpha-Version ... Das Hochladen einer Apk mit Abrechnungsberechtigung reicht nicht aus

@dooboolab Nun, wenn es etwas gibt, das dir hilft, ist vielleicht der nächste Punkt:

Wenn ich die Konfiguration auf reaktionsnative Abrechnung setze, habe ich in die Ressourcendatei "string.xml" den Parameter string name = "RNB_GOOGLE_PLAY_LICENSE_KEY" eingegeben.
aber in react-native-iap kann ich diesen Parameter nicht in Aktion sehen.

Der von Ihnen benötigte Try-Catch löst das nächste Protokoll aus:

  1. Ändere meine itemsSkus

const itemSkus = Platform.select ({
ios: [
'Predictorcart_1500',
],
Android: [
'Predictorcart_1500',
'android.test.purchased',
'android.test.canceled',
'android.test.refunded',
'android.test.item_unavailable',
],
});

  1. Änderung auf componentDidMount

    async componentDidMount () {
    Versuchen {
    warte auf RNIap.prepare ();
    warte auf this.getItems ();

    }}
    catch (err) {
    console.warn (err.code, err.message);
    }}
    }}

  2. Ändern Sie die Get-Daten

    getProductDetails = async () => {
    Versuchen {
    const products = warte auf RNIap.getProducts (itemSkus);
    console.log ('=======> Produkte ::::', Produkte);
    this.setState ({productDetails: products});
    } catch (err) {
    console.warn (err.code, err.message);
    }}
    }}

  3. Drücken Sie einen Knopf
    \.

  4. Stellen Sie die App auf das Gerät
    React-Native Run-Android - Variante = Release

6. Schließlich ist das Protokoll das nächste:
04-26 12: 53: 11.335 16749 16759 I Finsky: [11707] com.google.android.finsky.billing.iab.ab.b (46): com.projectbundle: Konto vom ersten Konto - [uuAJBL1tLX2MAj69S-olEl331212]
04-26 12: 53: 11.401 226 1177 V audio_hw_primary: do_output_standby in
04-26 12: 53: 11.409 20362 20432 D RNIapModule: responseCode: 0
04-26 12: 53: 11.426 226 1177 W audio_hw_primary: do_output_standby.mode: 0
04-26 12: 53: 11.426 226 1177 V audio_hw_primary: do_output_standby in out
04-26 12: 53: 11.427 1140 2106 D PowerManagerService: releaseWakeLockInternal: lock = 87714678 [AudioMix], flags = 0x0, total_time = 3166ms
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: '=======> Produkte ::::', [{Beschreibung: 'Beschreibung des Produkts: android.test.cancelled.',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: Titel: 'Título de muestra',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: localizedPrice: '$ 18.65',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: Typ: 'inapp',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: Währung: 'MXN',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: Preis: '18 .65 ',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: productId: 'android.test.canceled'},
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: {Beschreibung: 'Beschreibung des Produkts: android.test.item_unavailable.',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: Titel: 'Título de muestra',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: localizedPrice: '$ 18.65',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: Typ: 'inapp',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: Währung: 'MXN',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: Preis: '18 .65 ',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: productId: 'android.test.item_unavailable'},
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: {Beschreibung: 'Beschreibung des Produkts: android.test.purchased.',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: Titel: 'Título de muestra',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: localizedPrice: '$ 18.65',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: Typ: 'inapp',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: Währung: 'MXN',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: Preis: '18 .65 ',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: productId: 'android.test.purchased'},
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: {Beschreibung: 'Beschreibung des Produkts für android.test.refunded.',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: Titel: 'Título de muestra',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: localizedPrice: '$ 18.65',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: Typ: 'inapp',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: Währung: 'MXN',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: Preis: '18 .65 ',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: productId: 'android.test.refunded'}]

@martinberbesson Ich habe eine App auf Alpha Release, auch ich kann die Produkte nicht bekommen. Ich denke, ist eine andere Sache, vielleicht eine Konfiguration in React-Native-IAP oder Google Console.

@martinberbesson @dooboolab Unglaublich !!

Ich habe eine andere App mit den gleichen Schritten erstellt und die App funktioniert unter iOS und Android !!. Ich kann es nicht glauben.

Ich weiß nicht, was der Grund ist, aber ich denke, es ist eine Konfiguration auf Code oder Google Console.

PD Ich habe 5 Stunden gewartet, um den richtigen itemSkus zu bekommen.
PD2 Die alte App bekommt auch innerhalb von 24 Stunden keine itemsSkus.
PD3 @dooboolab Jetzt können Sie ruhig schlafen. :) :)
PD4 Ich werde den Kaufprozess entwickeln, ich hoffe das ist einfach

Freundliche Grüße,

@vadermemo Schön, dass es funktioniert. Für das neuere iap-Modul für Android, das v3 ist, müssen Sie nichts anderes in string.xml .

Per # 124 denke ich, dass dies immer noch vorkommt - zumindest für vorhandene Apps, für die es auch gut wäre, eine Lösung zu haben.

Für alle, die immer noch auf dieses Problem stoßen, sollten Sie zunächst https://stackoverflow.com/a/35132936/1374827 lesen und sicherstellen, dass Sie alle in diesem Beitrag beschriebenen Anforderungen erfüllt haben.

Wenn das alles gut ist, überprüfen Sie, ob Sie die entsprechende Funktion aufrufen. Für mich hatte ich eine App, in der ich nur In-App-Käufe für Abonnements verwendete, aber ich habe fälschlicherweise RNIap.getProducts angerufen und natürlich ein leeres Array zurückbekommen. Ich musste stattdessen RNIap.getSubscriptions anrufen und die Abonnements wurden dann zurückgegeben.

Stellen Sie auf die gleiche Weise sicher, dass Sie RNIap.buySubscription anrufen, wenn Sie ein Abonnement kaufen, und RNIap.buyProduct wenn Sie ein Produkt kaufen.

Ok, nachdem ich damit gerungen hatte, stellte sich heraus, dass mein Problem meine Unerfahrenheit mit Android war. Ich habe mit dem Paketnamen in dev herumgespielt und obwohl er auf dem Gerät einwandfrei lief, ist der Paketname, der nicht perfekt eingerichtet wurde, der Grund, warum ein leeres Array zurückgegeben wurde. Nachdem Sie diese und befolgt haben, sieht alles gut aus.

Ich bekomme auch ein leeres Array,
Und ich bin verwirrt mit https://developer.android.com/google/play/billing/billing_testing#draft_apps doc, dass ich ein Testkonto benötige und einen Tester hinzufüge. Bitte jeder kann mir dabei helfen.

Vielen Dank!

gleich

@bharatidudhjiya @tmjordan Wenn Sie mit Konfigurationsproblemen konfrontiert sind, möchte ich, dass Sie zuerst das reine Android iap -Projekt ausprobieren und prüfen, ob es richtig funktioniert. Das würde dir auch helfen, das iap sdk von Android besser zu verstehen.

@ Hyochan danke, es ist eine gute Idee. ich werde das tun

@tmjordan Dies ist ziemlich alt, aber dies könnte Ihnen bei der Grundeinstellung helfen.

Danke Mann @hyochan

Ich habe es gelöst! Ich benutze diese Versionen,

react-native-iap: ^4.3.0
react-native: 0.60.5

mach es einfach so

const itemSkus = Platform.select({
    ios: [
        '100coins' // just remove bundle id from product id
    ],
    android: [
        '100coins' // just remove bundle id from product id
    ]
});

Stellen Sie sicher, dass Sie den richtigen Paketnamen für Ihre Anwendung haben.

und falls Sie es vom reaktionsnativen Befehl geändert haben. es wird nicht noch funktionieren.

Sie müssen es manuell tun und dann das Projekt mit ./gradlew clean im Android-Ordner bereinigen.

danach probieren Sie es aus.

Viel Spaß beim Codieren.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen