3.3.9
0,59,9
iOS und Android
Ich erwarte, eine Reihe von Produkten und Abonnements in der Play Console und im Appstore erstellen zu können.
Die Funktionen RNIap.getProducts
und RNIap.getSubscriptions
immer leere Arrays zurück.
iOS Simulator, Android Emulator und Android Real Device
Ich habe mehr als 24 Stunden gewartet. Ich habe auch die interne und Alpha-Version in der Google Play Console erstellt, erhalte aber immer noch nur leere Arrays zurück.
Ich denke, ich bin mir ein bisschen unklar, wann genau ich damit rechnen soll. Wenn mein Alpha-Test-Rollout beispielsweise noch in der Google Play Console veröffentlicht wird, bedeutet dies, dass react-native-iap
nicht funktioniert? Muss ich warten, bis die App veröffentlicht ist, um sie auszuprobieren?
Ich weiß auch, dass ich nicht einmal Testkäufe mit Simulator / Emulator tätigen kann, aber sollte getProducts
/ getSubscriptions
mit Emulatoren funktionieren oder brauche ich ein echtes Gerät, um es zu testen?
const itemSkus = Platform.select({
ios: ['product_1'],
android: ['1', '2']
});
const itemSubs = Platform.select({
ios: ['subscription_1'],
android: ['subscription_1', 'subscription_2']
});
let purchaseUpdateSubscription;
let purchaseErrorSubscription;
class App extends Component {
constructor(props) {
super(props);
this.state = {
productList: [],
receipt: '',
availableItemsMessage: ''
};
}
async componentDidMount() {
SplashScreen.hide();
try {
const result = await RNIap.initConnection();
await RNIap.consumeAllItemsAndroid();
console.log('result', result);
} catch (err) {
console.warn(err.code, err.message);
}
purchaseUpdateSubscription = purchaseUpdatedListener(async purchase => {
console.log('purchaseUpdatedListener', purchase);
if (purchase.purchaseStateAndroid === 1 && !purchase.isAcknowledgedAndroid) {
try {
const ackResult = await acknowledgePurchaseAndroid(purchase.purchaseToken);
console.log('ackResult', ackResult);
} catch (ackErr) {
console.warn('ackErr', ackErr);
}
}
this.setState({ receipt: purchase.transactionReceipt }, () => this.goNext());
});
purchaseErrorSubscription = purchaseErrorListener(error => {
console.log('purchaseErrorListener', error);
Alert.alert('purchase error', JSON.stringify(error));
});
}
componentWillMount() {
if (purchaseUpdateSubscription) {
purchaseUpdateSubscription.remove();
purchaseUpdateSubscription = null;
}
if (purchaseErrorSubscription) {
purchaseErrorSubscription.remove();
purchaseErrorSubscription = null;
}
}
goNext = () => {
Alert.alert('Receipt', this.state.receipt);
};
getItems = async () => {
try {
const products = await RNIap.getProducts(itemSkus);
console.log('Products', products);
this.setState({ productList: products });
} catch (err) {
console.warn(err.code, err.message);
}
};
getSubscriptions = async () => {
try {
const products = await RNIap.getSubscriptions(itemSubs);
console.log('Products', products);
this.setState({ productList: products });
} catch (err) {
console.warn(err.code, err.message);
}
};
getAvailablePurchases = async () => {
try {
console.info('Get available purchases (non-consumable or unconsumed consumable)');
const purchases = await RNIap.getAvailablePurchases();
console.info('Available purchases :: ', purchases);
if (purchases && purchases.length > 0) {
this.setState({
availableItemsMessage: `Got ${purchases.length} items.`,
receipt: purchases[0].transactionReceipt
});
}
} catch (err) {
console.warn(err.code, err.message);
Alert.alert(err.message);
}
};
requestPurchase = async sku => {
try {
RNIap.requestPurchase(sku);
} catch (err) {
console.warn(err.code, err.message);
}
};
requestSubscription = async sku => {
try {
RNIap.requestSubscription(sku);
} catch (err) {
Alert.alert(err.message);
}
};
render() {
const { productList, receipt, availableItemsMessage } = this.state;
const receipt100 = receipt.substring(0, 100);
return (
<View style={styles.container}>
<View style={styles.header}>
<Text style={styles.headerTxt}>react-native-iap V3</Text>
</View>
<View style={styles.content}>
<ScrollView style={{ alignSelf: 'stretch' }}>
<View style={{ height: 50 }} />
<NativeButton
onPress={this.getAvailablePurchases}
activeOpacity={0.5}
style={styles.btn}
textStyle={styles.txt}
>
Get available purchases
</NativeButton>
<Text style={{ margin: 5, fontSize: 15, alignSelf: 'center' }}>
{availableItemsMessage}
</Text>
<Text style={{ margin: 5, fontSize: 9, alignSelf: 'center' }}>
{receipt100}
</Text>
<NativeButton
onPress={() => this.getItems()}
activeOpacity={0.5}
style={styles.btn}
textStyle={styles.txt}
>
Get Products ({productList.length})
</NativeButton>
{productList.map((product, i) => {
return (
<View
key={i}
style={{
flexDirection: 'column'
}}
>
<Text
style={{
marginTop: 20,
fontSize: 12,
color: 'black',
minHeight: 100,
alignSelf: 'center',
paddingHorizontal: 20
}}
>
{JSON.stringify(product)}
</Text>
<NativeButton
// onPress={() => this.requestPurchase(product.productId)}
onPress={() => this.requestSubscription(product.productId)}
// onPress={() => this.buyItem(product.productId)}
// onPress={() => this.buySubscribeItem(product.productId)}
activeOpacity={0.5}
style={styles.btn}
textStyle={styles.txt}
>
Request purchase for above product
</NativeButton>
</View>
);
})}
</ScrollView>
</View>
</View>
);
}
}
Sie brauchen nicht real device
, um in ios
für getProducts
/ getSubscription
real device
zu testen, aber nicht in android
. Für android
benötigen Sie ein echtes Gerät, um es kaufen zu können.
Bei Google lesen Sie bitte meinen Leitfaden , um Ihr Problem zu beheben.
Sie müssen die App nicht zum Testen im Playstore veröffentlichen, sondern müssen die signierte apk hochladen.
Ich habe auch dieses Problem, ich habe bereits ein Produkt in Apple erstellt und kann scheinbar nicht darauf zugreifen.
const itemSkus = Platform.select({
ios: [
'product1'
],
android: []
});
RNIap.getProducts(itemSkus).then((products) => {
console.log(products); //<< returns empty array
}).catch((error) => console.log(error))
Braucht es Zeit, bis sich das Produkt in Ihrer Erfahrung widerspiegelt?
Vereinbarungen, Steuern und Bankgeschäfte sind alle aktiv
"react-native-iap": "^ 3.4.0",
Und die In-App befindet sich bereits im Status "Bereit zum Senden"
@nateblog Welche Art von Produkt haben Sie erstellt? Ein Abonnement oder etwas anderes?
Haben Sie auch eine Lokalisierung in App Store Connect für Ihr Produkt / Abonnement hinzugefügt? Versuchen Sie in diesem Fall, die auf Ihrem Gerät oder Simulator aktive Lokalisierung hinzuzufügen. Ich erinnere mich, dass ich vorher einige Probleme damit hatte. Mein Simulator und mein Gerätegebietsschema sind in Englisch, daher habe ich für meine Abonnements nur die Lokalisierung "Englisch (USA)" hinzugefügt.
@jvandenaardweg - Vielen Dank für die Antwort. Ja, ich habe die Lokalisierung bereits hinzugefügt, da der In-App-Status nicht auf "Bereit zum Senden" gesetzt wird, wenn ich die Lokalisierung überspringe. Ich habe die Lokalisierung auf "Englisch (USA)" gesetzt, da das von mir verwendete Gerät Englisch verwendet und das Produkt ein Abonnement ist.
AKTUALISIEREN
Ich habe bereits sichergestellt, dass ich die In-App unter Funktionen aktiviert und das Paket auf 2.4.0 heruntergestuft habe, aber immer noch das gleiche Ergebnis. . Ich kann die Produkte nicht erhalten, es wird nur ein leeres Array zurückgegeben.
Außerdem habe ich das Paket manuell verlinkt, da andere Beiträge vorgeschlagen haben, den reaktionsnativen Link nicht zu verwenden, aber immer noch das gleiche Ergebnis. Ich benutze sowohl Simulator als auch reales Gerät.
Entschuldigung, es ist jetzt behoben. Das Problem war die Bundle-ID in meinem Xcode. Ich verwende die falsche Bundle-ID. Jetzt funktioniert alles
Ich hatte eine ähnliche und musste den Verknüpfungsprozess der Bibliothek nur manuell durchführen. (ios)
Ich habe das gleiche Problem, lade keine Produkte von Itunes Connect und bin mir nicht sicher, wo ich nach einem Problem suchen soll. Die App verwendet eine alte Version von RN: 0.43.4. Ich habe die Versionen 3.3.7 und 2.5.5 von RN-IAP ausprobiert. Sollte ich eine ältere Version der Bibliothek verwenden, weil ich eine alte Version von React-Native verwende?
Die Fehlerbehebung scheint schwierig zu sein, da keine Fehlermeldungen und nur keine Daten vorliegen.
Entschuldigung, es ist jetzt behoben. Das Problem war die Bundle-ID in meinem Xcode. Ich verwende die falsche Bundle-ID. Jetzt funktioniert alles
Hey, @nateblog! Ich habe ein ähnliches Problem: Ich erhalte leere Arrays für Produkte und Abonnements und habe zwei Abonnementelemente in App Store Connect erstellt. Könnten Sie bitte näher erläutern, was mit Ihrer Bundle-ID nicht stimmte? Ich glaube nicht, dass ich die richtigen Artikel-SKUs einreiche, da ich keinen Hinweis darauf finden konnte, wie sie aufgebaut sind oder was sie sind - sind sie [Bundle-ID]. [Produkt-ID des Kaufartikels] oder nur [Produkt-ID des Kaufgegenstandes]?
Außerdem möchte ich hinzufügen, dass ich für meine Release- und Debug-Schemata leicht unterschiedliche Bundle-IDs habe:
Jeder Rat wäre sehr dankbar.
Ich hatte eine ähnliche und musste den Verknüpfungsprozess der Bibliothek nur manuell durchführen. (ios)
Du hast meinen Tag gerettet!
Ich habe das react-native-iap integriert und meine signierte apk zur Beta-Version im Play Store hochgeladen und außerdem ein Abonnement hinzugefügt. Ich versuche, die Liste der Abonnements anhand der Abonnement-ID im Debug-Modus abzurufen, der immer ein leeres Array zurückgibt. Kann ich das Abonnement tatsächlich im Debug-Modus testen?
@ ShridharCodewave Ich
React-Native-IAP: 3.3.2
Ich habe das gleiche Problem mit Android Emulator. Ich habe apk in den Google Play Store auf Beta Channel hochgeladen und Produkte hinzugefügt.
Zuerst Verbindung init, dann versuche ich Produkte abzurufen, aber auf console.warn wird nichts angezeigt
Keine Ergebnisse hier
Keine Fehler hier
@ismetsezer Die gesamte In-App-Abrechnung für Android funktioniert im Emulator nicht:
Sie können den Emulator nicht zum Testen von Google Play Billing verwenden. Sie müssen Ihre Anwendung auf einem Gerät installieren, um Google Play Billing zu testen.
https://developer.android.com/google/play/billing/billing_testing
Dafür benötigen Sie ein echtes Gerät.
Unter iOS können Sie Abonnementdaten im Simulator abrufen. Man kann es aber nicht kaufen, dafür braucht man auch ein echtes Gerät.
Für die anderen obigen Kommentare: Stellen Sie außerdem sicher, dass versionName
und versionCode
in android/app/build.gradle
mit dem in Google Play Console hochgeladenen
Aufgrund der neuen Überprüfungsrichtlinie von Android benötigen Sie außerdem eine aktiv überprüfte App in einem nicht produktiven Track:
Zuvor konnten Sie eine App testen, indem Sie eine unveröffentlichte "Entwurfs" -Version hochladen. Diese Funktionalität wird nicht mehr unterstützt. Stattdessen müssen Sie Ihre App auf der geschlossenen oder offenen Teststrecke veröffentlichen. Weitere Informationen finden Sie unter Entwürfe von Apps werden nicht mehr unterstützt.
https://developer.android.com/google/play/billing/billing_testing
"Veröffentlichen" in einer geschlossenen / offenen Teststrecke bedeutet, dass der neue Überprüfungsprozess von Google Play durchlaufen werden muss. Dies kann bei neuen Apps einige Tage und bei vorhandenen Apps nur einige Stunden dauern.
Ich weiß nicht genau, welche Schritte ich gemacht habe, aber für mich funktioniert es lokal mit einem Android-Gerät. Es handelt sich also wahrscheinlich nicht um ein React-Native-iap-Paket, sondern eher um eine Konfigurationssache.
Wenn jemand dies bestätigen kann, ist es möglicherweise eine gute Sache, die README-Datei über diese Änderung zu aktualisieren. Da dies seit letztem Monat etwas Neues ist.
Vielen Dank an @jvandenaardweg, als ich zu einem echten Gerät
Gut zu hören @ismetsezer . Können Sie mit einer überprüften / veröffentlichten Test-App bestätigen, ob es für Sie funktioniert? Denn dann können wir die Readme mit diesen neuen Informationen aktualisieren :-)
Natürlich. Nach der Veröffentlichung im Google Play Store werde ich hier bestätigen
AKTUALISIEREN
Nachdem meine App im Google Play Store veröffentlicht wurde, wurden Einkäufe getätigt und funktionierten. Die Genehmigung dauert 3 Tage. Danke an @jvandenaardweg
UPDATE 2
react-native-iap kann auf dem Android-Emulator verwendet werden, wenn der Emulator Google Play Store-Unterstützung bietet.
@kesepara Ich musste einige Stunden warten, nachdem ich das neue Abonnement im Play Store hinzugefügt hatte, damit es auf dem Gerät angezeigt wurde.
Hallo @ismetsezer und @kesepara ,
Ich würde mich sehr über Ihren Beitrag zu Ihrem Entwicklungsfluss freuen, da mir noch etwas nicht klar ist.
Ich habe RN IAP für iOS eingerichtet und es funktioniert jetzt einwandfrei.
Ich fange jetzt an, den Android-Teil zu machen, und ich habe hier festgestellt
Aber in Ihren Kommentaren sagen Sie, dass Sie es auf dem Android-Emulator testen konnten. Ist das richtig?
Wie können wir außerdem debuggen, wenn wir signierte APK im Store verwenden müssen?
Ihre Hilfe wäre sehr dankbar.
Hallo @beeremy, danke für deine guten Meinungen. Sie müssen iap auf einem realen Gerät oder Emulator testen, der Google Play-Unterstützung bietet, um Produkte abzurufen. IAP hat funktioniert, nachdem ich die App im Google Play Store veröffentlicht habe. Dies könnte sich ändern, aber Sie müssen zumindest einen Entwurf im Store hochladen oder erstellen, um diese Funktion zu testen. Die Arbeit dauert jedoch 2 bis 3 Stunden.
Hallo @ismetsezer , danke für dein Feedback.
Für jeden, der nützlich sein kann, konnte ich eine Debug-Konfiguration erstellen, nachdem ich diese Empfehlung befolgt habe :
Ich kann als @ismetsezer bestätigen, dass Abonnements und Produkte in Android funktionieren, nachdem die App in der Google Play Console veröffentlicht wurde. Der Versuch, Abonnements / Produkte zu erhalten, wenn die App noch nicht veröffentlicht wurde, funktioniert nicht für Android.
Unter iOS funktionieren Abonnements und Produkte, ohne dass die App veröffentlicht wurde.
Hey, es sieht so aus, als ob in letzter Zeit keine Aktivitäten zu diesem Thema stattgefunden haben. 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 diese Ausgabe auch als "Zur Diskussion" oder "Gute erste Ausgabe" bezeichnen, und ich werde sie offen lassen. Vielen Dank für Ihre Beiträge.
RN 0.59.1 auf Android dev hier und ich verwende iap Version 4.4.1
Mein Build befindet sich derzeit auf der Alpha-Spur. Danach habe ich wie gewohnt auf meinem Computer im Debug-Modus neu erstellt. In Platform.select ({}) habe ich die Abonnement-ID wie in der Play Console angegeben und getSubscriptions () aufgerufen, erhalte jedoch ein leeres Array. Liegt das daran, dass es in Alpha ist? Irgendwelche Ideen?
@edgaralienfoe Haben Sie Ihr Abonnement in der Google Play Console aktiviert?
@acostalima sollte aktiviert sein. Ich nahm an, dass es vielleicht ein paar Tage dauert, aber immer noch kein Glück.
@edgaralienfoe Ich
@edgaralienfoe Hast du die Lösung gefunden? Möglicherweise muss Ihre App-Version höher sein als die in Alpha Track
@edgaralienfoe Hast du die Lösung gefunden? Möglicherweise muss Ihre App-Version höher sein als die in Alpha Track
Alpha-Track funktioniert gut. Ich teste IAPs seit einiger Zeit mit Builds, die ohne Probleme auf Alpha bereitgestellt werden. Die interne Spur funktioniert dagegen nicht.
Für alle, die hier in Schwierigkeiten geraten könnten, war der Trick unter iOS für mich, das Projekt manuell zu verknüpfen, wie von @ Kuhne1 vorgeschlagen - es funktionierte nach dem Bereinigen des Build-Ordners und dem manuellen Installieren von Pods.
Hey, es sieht so aus, als ob in letzter Zeit keine Aktivitäten zu diesem Thema stattgefunden haben. 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 diese Ausgabe auch als "Zur Diskussion" oder "Gute erste Ausgabe" bezeichnen, und ich werde sie offen lassen. Vielen Dank für Ihre Beiträge.
Schließen dieses Problems nach längerer Inaktivität. Wenn dieses Problem in der neuesten Version noch vorhanden ist, können Sie ein neues Problem mit aktuellen Informationen erstellen.
Hilfreichster Kommentar
Natürlich. Nach der Veröffentlichung im Google Play Store werde ich hier bestätigen
AKTUALISIEREN
UPDATE 2