React-native-iap: Unterstützung für Amazon Appstore IAP hinzufügen

Erstellt am 26. Feb. 2020  ·  35Kommentare  ·  Quelle: dooboolab/react-native-iap

Ich denke, es wäre schön, Unterstützung für die Amazon Appstore IAP API zu haben.

🎯 feature 📢 announcement 🚶🏻 stale

Hilfreichster Kommentar

Ich habe gesehen, dass es in der Vergangenheit eine Arbeit gab, die es unterstützt, aber es scheint veraltet zu sein und kann nicht mit der aktuellen React-native-iap-Bibliothek verwendet werden:
https://github.com/dooboolab/react-native-iap/issues/370
Also startete ich meinen eigenen Fork unter https://github.com/nochkin/react-native-iap/tree/amazon-iap

Es scheint in meiner eigenen Entwicklungsumgebung zu funktionieren. Aber bevor ich eine PR dafür erstelle, wäre es schön, einige echte Alpha-/Beta-Tester dazu zu bringen, bestimmte Grenzfälle zu überprüfen und diese richtig zu polieren, da es sehr wahrscheinlich ist, dass ich nicht alle Funktionen in meiner eigenen App verwende.

Ich habe versucht, so weit wie möglich innerhalb der ursprünglichen React-native-iap-API zu bleiben. Es gibt einige Methoden, die ich noch nicht mache (ich kann sie hinzufügen, wenn jemand eine Möglichkeit hat, richtig zu testen).

Eine der bahnbrechenden Designentscheidungen in meinem Fork ist die Erkennung von Google vs. Amazon. Ich denke, das Erkennen eines Gerätemodells / einer Gerätemarke ist kein guter Ansatz, da ein Benutzer Google Play auf einem Kindle installieren und die App über Google herunterladen kann (und umgekehrt, wenn Sie Amazon Appstore auf einem Play-basierten Gerät installieren können). In diesem Fall sollten wir das IAP über die entsprechende API erledigen lassen.
Meine Gabeln suchen nach Installationsquellen und handeln entsprechend. In der Entwicklungsumgebung ist die Installationsquelle nicht vorhanden, sodass Sie einen Fallback festlegen können, um sie ordnungsgemäß testen zu können.
Ich werde dies dokumentieren, wenn Interesse daran besteht, dass mein Fork mit dem Upstream-Repo zusammengeführt wird.

Alle 35 Kommentare

Ich habe gesehen, dass es in der Vergangenheit eine Arbeit gab, die es unterstützt, aber es scheint veraltet zu sein und kann nicht mit der aktuellen React-native-iap-Bibliothek verwendet werden:
https://github.com/dooboolab/react-native-iap/issues/370
Also startete ich meinen eigenen Fork unter https://github.com/nochkin/react-native-iap/tree/amazon-iap

Es scheint in meiner eigenen Entwicklungsumgebung zu funktionieren. Aber bevor ich eine PR dafür erstelle, wäre es schön, einige echte Alpha-/Beta-Tester dazu zu bringen, bestimmte Grenzfälle zu überprüfen und diese richtig zu polieren, da es sehr wahrscheinlich ist, dass ich nicht alle Funktionen in meiner eigenen App verwende.

Ich habe versucht, so weit wie möglich innerhalb der ursprünglichen React-native-iap-API zu bleiben. Es gibt einige Methoden, die ich noch nicht mache (ich kann sie hinzufügen, wenn jemand eine Möglichkeit hat, richtig zu testen).

Eine der bahnbrechenden Designentscheidungen in meinem Fork ist die Erkennung von Google vs. Amazon. Ich denke, das Erkennen eines Gerätemodells / einer Gerätemarke ist kein guter Ansatz, da ein Benutzer Google Play auf einem Kindle installieren und die App über Google herunterladen kann (und umgekehrt, wenn Sie Amazon Appstore auf einem Play-basierten Gerät installieren können). In diesem Fall sollten wir das IAP über die entsprechende API erledigen lassen.
Meine Gabeln suchen nach Installationsquellen und handeln entsprechend. In der Entwicklungsumgebung ist die Installationsquelle nicht vorhanden, sodass Sie einen Fallback festlegen können, um sie ordnungsgemäß testen zu können.
Ich werde dies dokumentieren, wenn Interesse daran besteht, dass mein Fork mit dem Upstream-Repo zusammengeführt wird.

@nochkin Klingt wirklich gut. Ich würde gerne den Schritt wissen, um dies zu testen. Ich habe kein amazon Gerät. Kann ich es trotzdem testen? Ich hoffe, Sie können ein Dokument für diejenigen hervorbringen, die ein Interesse daran haben, diese Integration weiterzuverfolgen.

Ich verwende zu Testzwecken ein echtes Amazon-Gerät. Ich denke, wenn Sie Amazon Appstore auf einem Nicht-Amazon-Gerät installieren, sollte das reichen.
Ich werde später heute eine Dokumentation erstellen, um loszulegen. Ich freue mich, dass dafür Interesse besteht.

Hier ist die Anleitung zum Hinzufügen von Amazon IAP-Unterstützung zur vorhandenen App:
https://github.com/nochkin/react-native-iap/blob/amazon-iap/README_AMAZON.md
Lassen Sie mich wissen, wenn etwas zusätzlicher Klärung bedarf.

Zu Ihrer Information,
Ich habe letzte Nacht ein paar weitere Änderungen an meinem Fork vorgenommen und meine App damit auch für die Produktion freigegeben.
Sieht soweit gut aus.
Ich wäre daran interessiert, Feedback von anderen zu erhalten, falls Bedarf für zusätzliche Funktionen oder Anwendungsfälle besteht, die in meiner eigenen App nicht abgedeckt sind.

@hyochan Gibt es einen Plan, dies zu einer Veröffentlichung hinzuzufügen?

@Curiousdustin ,
Sie können meine Gabel zum Testen und Feedback verwenden:
https://github.com/nochkin/react-native-iap/tree/amazon-iap
Ich bin mir sicher, dass sich Ihre Anwendungsfälle von meinen unterscheiden, daher können Sie zusätzliches Feedback geben, um weitere Änderungen daran zu erhalten.

@nochkin enthält Ihr Fork Unterstützung für Amazon-Abonnement-IAPs?

@Curiousdustin ,
Auch wenn die Implementierung schon lange her ist, aber ich glaube schon. Ich habe es nur nicht mit Abonnements getestet.
Sie müssen immer noch eine Überprüfung auf der Serverseite implementieren, da ich niemals etwas auf einem Client validiere.

Amazon bringt nicht so viel Verkehr, daher sind meine Tests im wirklichen Leben etwas langsam. Wenn Sie dazu etwas beitragen könnten, wäre das schön.

Ok, das werde ich wohl mal testen. Ich verwende derzeit meinen eigenen Fork in der Produktion, aber das war vor den großen Änderungen im Zusammenhang mit dem Lebenszyklus. Ich würde wirklich gerne all die großartigen Updates seitdem nutzen.

Schön. Ich bin immer noch dabei, Abonnements für meine eigene App zu implementieren (interne App-bezogene Logik, nicht das rn-iap), also lassen Sie es mich wissen, wenn etwas passiert.

Die API für Amazon-Abonnements ist etwas seltsam, wenn sie abgefragt wird. Zum Beispiel habe ich ein monatliches und ein jährliches Abonnement desselben Dienstes, aber Amazon meldet sie identisch. Der einzige Unterschied ist der Preis, also dachte ich, ich werde nur anhand des Preises herausfinden, welches welches ist.

Haben Sie viele abonnierte und neue Abonnementbenutzer?

Ja, die App, für die ich das verwende, hat jeden Monat Hunderte von neuen Abonnements. Außerdem wird jedes Update, das dies verwendet, vor der Veröffentlichung einer gründlichen QA unterzogen.

Wir haben auch monatliche und jährliche Optionen. Wie Sie beschrieben haben, befinden sich beide unter einer einzigen ID für Amazon. In unserem Fall bestätigen wir das Abonnement über die Amazon-API, die uns Informationen über den Zeitraum gibt.

Das klingt großartig. Ich bin froh, dass meine Gabel in einem anderen Szenario ordnungsgemäß getestet wird.

Ich muss die Abonnementdauer in der Benutzeroberfläche anzeigen, damit der Benutzer sie auswählen kann.
Es ist seltsam, dass die Amazon Developer Console diese Felder als erforderlich hat, aber die API keinen Zugriff darauf hat.

Dies hat sich möglicherweise geändert, aber wir haben festgestellt, dass Amazon, selbst wenn Sie den Gebrauchten 2 Optionen präsentieren, sobald sie den Kaufvorgang einleiten, die Zeitraumoptionen mit der ersten vorausgewählten Option anzeigt. Daher mussten wir eine neue Benutzeroberfläche für Amazon implementieren, bei der der Benutzer den Zeitraum nicht wirklich auswählt, bis er sich in der Benutzeroberfläche des Amazon-Kaufablaufs befindet.

Interessante Idee eigentlich. Meine Benutzeroberfläche passt nicht zu diesem Modell, aber ich kann diese Option in Betracht ziehen, wenn ich mich entscheide, sie zu ändern. Vielleicht kann ich es trotzdem benutzen. Danke.

@curiousdustin @nochkin
Hi, wie ich gehört habe, hast du viel für diese Ausgabe getan, wow! Ich bin auch dabei, Abonnements zu implementieren. Woher wissen Sie, dass das Abonnement aktualisiert wurde? Und müssen Sie es auf dem Server aktualisieren? Wie funktioniert es mit RVS, ich meine, der Amazon-Beleg hat kein Enddatum des Abonnements, also, wie man ein bestimmtes Abonnement für Benutzer auf dem Server aktualisiert. Wäre nett, von Ihnen zu hören, wenn Sie etwas über all diese Dinge wissen)

Ich habe noch nicht begonnen, diesen Fork in meinem Projekt zu implementieren. Werde das wahrscheinlich nächsten Monat machen.

Tut mir leid, ich habe nicht viele Informationen darüber, wie das serverseitige Amazon-Zeug funktioniert. Eine andere Person in meinem Team kümmerte sich um das Backend. Ich weiß, dass wir derzeit nur die Produkt-ID und die Quittungs-ID an unseren Server weitergeben und dieser alles andere übernimmt, soweit es erforderlich ist, die Gültigkeit des Abonnements zu überprüfen und zu aktualisieren.

@kostiantyn-solianyk
Meine eigene App implementiert derzeit nur Google Play und App Store, ich habe Amazon RVS noch nicht für Abonnements gemacht.
Ich verifiziere regelmäßig In-App-Käufe für Amazon und das war einfach genug zu implementieren, also würde ich davon ausgehen, dass Abonnements irgendwie ähnlich sein sollten.

Ja, im Testmodus ist alles in Ordnung, und mit Ihrer Gabel funktioniert sie auch nach Bedarf (in den Fällen, die ich überprüft habe).

Wir stecken bei dem Problem fest, das Abonnement zu aktualisieren, weil die Amazon-Quittung kein Enddatum des Abonnements hat, und es ist eigentlich seltsam.

Ich werde sehen, ob ich meine Aufgaben neu priorisieren kann, damit ich mit Amazon-Verifizierungen für ihre Abonnements spielen kann.
Ich nehme an, Sie haben das Problem auch mit ihrem Testserver, oder?

@nochkin Übrigens ist mir aufgefallen, dass die Methoden getAvailablePurchases und getPurchaseHistory Fehler zurückgeben. Ich denke, diese 2 wurden noch nicht für Amazon IAP in Ihrem Fork implementiert?

Sie haben Recht. Mein eigenes App-Modell verwendet diese nicht.
Ich werde einen Blick darauf werfen. Danke schön.

Ähnlich wie bei @kostiantyn-solianyk habe ich festgestellt, dass die folgenden Methoden für Amazon implementiert werden müssen:

RNIapAmazonModule.endConnection() wird von RNIap.endConnection() $ aufgerufen

Ich denke, das muss nur das Versprechen lösen. Es erfordert auch Änderungen an index.ts , oder es wird nie verwendet.

RNIapAmazonModule.refreshItems() wird von RNIap.consumeAllItemsAndroid() $ aufgerufen

Meine App verwendet nicht consumeAllItemsAndroid , daher habe ich nicht untersucht, was getan werden muss.

RNIapAmazonModule.getPurchaseHistoryByType() wird von RNIap.getPurchaseHistory() $ aufgerufen

Meine App verwendet getPurchaseHistory nicht, daher habe ich nicht untersucht, was getan werden muss.

RNIapAmazonModule.getAvailableItemsByType() wird von RNIap.getAvailablePurchases()

Dies ist erforderlich, um einen _Käufe wiederherstellen_-Flow in Ihrer App bereitzustellen. Ich habe das zum Laufen gebracht, aber was ich fühle, fühlt sich ein bisschen hackig an. Ich werde die Lösung hier posten, wenn ich sie etwas aufgeräumt bekomme.

Abgesehen davon laufen die Tests bisher gut. Danke dafür @nochkin !

@nochkin , könnten Sie beschreiben, wie Sie diesen Fork in Ihrem App-Projekt installieren?

Wenn ich so etwas mache:

"react-native-iap": "github:nochkin/react-native-iap.git#amazon-iap"

Das Modul wird nicht aufgelöst, weil es erwartet, dass das aus Typoskript erstellte js vorhanden ist, aber die erstellte Version des Projekts existiert nicht auf GitHub. Es wird nur für das Modul-Release-Paket erstellt. Tatsächlich wird bei der Installation mit npm und der obigen Zeile nicht einmal die index.ts heruntergeladen, wegen der .npmignore-Datei, denke ich.

Macht das Sinn?

Vielen Dank für die Zusammenfassung zu den fehlenden Methodenimplementierungen. Ich habe "endConnection" nicht implementiert, weil es nicht benötigt wurde, aber ich stimme zu, dass es die Methode aus Kompatibilitätsgründen haben muss.
Ich werde mich nach anderen umsehen. Entschuldigung, es hat einige Zeit gedauert, aber die Dinge werden jetzt aufgeklärt und ich gehe davon aus, dass ich es bald überprüfen / implementieren werde.

Ich habe lokal installiert, etwa so:
"react-native-iap": "../react-native-iap"
Während das Verzeichnis "react-native-iap" einfach ein Klon meines Repos ist.

Keine Bange!

Ok, ja, ich dachte, dass die lokale Dateireferenz funktionieren würde, aber das Projekt nicht sehr portabel macht.

Die Problemumgehung, die ich gerade verwende, um auf meinen eigenen Fork/Zweig zu verweisen, besteht darin, die Abhängigkeit wie folgt zu definieren:

"react-native-iap": "github:curiousdustin/react-native-iap.git#curious-amazon-iap-ts"

Und in meinem Zweig habe ich die Eigenschaft main in react-native-iap 's package.json in index.ts statt in .js geändert. Ich habe auch die TypeScript-bezogenen Einträge in .npmignore entfernt.

Das funktioniert vorerst, denke ich, weil mein RN-Setup automatisch TS-basierte Module erstellt ...

Ein weiterer wichtiger Teil, der zu fehlen scheint, ist die Fehlerbehandlung.

Die Amazon-Implementierung führt niemals Code aus, um Fehlerereignisse auszugeben, wie z. B. diesen aus der Google-Version:

sendEvent(reactContext, "purchase-error", error);

Das bedeutet, dass purchaseErrorListener niemals aufgerufen wird.

Notiert. Guter Punkt. Danke.

Hallo, es sieht so aus, als ob in letzter Zeit keine Aktivität zu diesem Thema stattgefunden hat. Wurde das Problem behoben oder erfordert es noch die Aufmerksamkeit der Community? Dieses Problem kann geschlossen werden, wenn keine weiteren Aktivitäten stattfinden. Sie können dieses Problem auch als "Zur Diskussion" oder "Gutes erstes Problem" kennzeichnen, und ich werde es offen lassen. Vielen Dank für Ihre Beiträge.

Stoßen!

Es wäre toll, auch die Amazon-Unterstützung in diesem Plugin zu haben. Ich habe die Amazon-Implementierung von @nochkin für Abonnements mit automatischer Verlängerung verwendet, und das Ding ist ziemlich zuverlässig. Es wäre großartig, diesen Fork in das Repo zu integrieren und eine größere Basis von Mitwirkenden zu haben, die die Implementierung pflegen!

Gibt es dazu später Neuigkeiten oder wird die Idee fallen gelassen?

Ich glaube nicht, dass es fallen gelassen wird. Ich glaube, der Haupthindernispunkt sind ein paar fehlende Funktionen (geringfügig für meine Anwendungsfälle, aber vielleicht wichtig für jemand anderen). Auch meine eigene App ist mit dem aktuellen Stand zufrieden.
Diese verbleibenden Teile des Puzzles sind immer noch auf meinem Radar und ich habe begonnen, daran zu arbeiten. Leider dauert die Fertigstellung/Prüfung aufgrund anderer Prioritäten länger als erwartet.

Ja, ich verstehe die Situation, ich werde das dann im Auge behalten!

Danke für die Antwort und ich hoffe du bekommst ein wenig mehr Zeit dafür 🤣

Ich habe eine PR (#1134) veröffentlicht, basierend auf deiner großartigen Arbeit @nochkin @curiousdustin ! 👏
Tests durchgeführt, funktioniert großartig auf unserer Seite! Wir werden die Unterstützung von Amazon auf „react-native-iaphub“ hinzufügen, wenn die PR zusammengeführt wird.
Es ist funktional, aber wie @nochkin sagte, gibt es noch einige Verbesserungen, die wir in Zukunft vornehmen können.

Hallo, es sieht so aus, als ob in letzter Zeit keine Aktivität zu diesem Thema stattgefunden hat. Wurde das Problem behoben oder erfordert es noch die Aufmerksamkeit der Community? Dieses Problem kann geschlossen werden, wenn keine weiteren Aktivitäten stattfinden. Sie können dieses Problem auch als "Zur Diskussion" oder "Gutes erstes Problem" kennzeichnen, und ich werde es offen lassen. Vielen Dank für Ihre Beiträge.

Gelöst und jetzt Teil der Version 5.0.0:
https://github.com/dooboolab/react-native-iap/releases/tag/5.0.0

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen