React-native-iap: Ajouter la prise en charge d'Amazon Appstore IAP

Créé le 26 févr. 2020  ·  35Commentaires  ·  Source: dooboolab/react-native-iap

Je pense que ce serait bien d'avoir un support pour l' API Amazon Appstore IAP .

🎯 feature 📢 announcement 🚶🏻 stale

Commentaire le plus utile

J'ai vu qu'il y avait un travail dans le passé pour le supporter, mais il semble être obsolète et ne peut pas être utilisé avec la bibliothèque react-native-iap actuelle :
https://github.com/dooboolab/react-native-iap/issues/370
J'ai donc lancé mon propre fork sur https://github.com/nochkin/react-native-iap/tree/amazon-iap

Il semble fonctionner dans mon propre environnement de développement. Mais avant de créer un PR pour cela, ce serait bien d'avoir de vrais testeurs alpha/bêta pour examiner certains cas limites et les peaufiner correctement car il est très possible que je n'utilise pas toutes les fonctionnalités de ma propre application.

J'ai essayé de rester dans l'API originale de react-native-iap autant que possible. Il y a quelques méthodes que je ne fais pas encore (je peux l'ajouter si quelqu'un a un moyen de tester correctement).

L'une des décisions de conception les plus décisives dans mon fork est de savoir comment détecter Google contre Amazon. Je pense que la détection d'un modèle/marque d'appareil n'est pas une bonne approche car un utilisateur peut installer Google Play sur un Kindle et obtenir l'application via Google (et vice versa lorsque vous pouvez installer Amazon Appstore sur un appareil basé sur Play). Nous devrions obtenir l'IAP via l'API correspondante dans ce cas.
Mes fourches vérifient la source d'installation et agissent en conséquence. Dans l'environnement de développement, la source d'installation n'existe pas, vous pouvez donc définir une solution de secours pour pouvoir la tester correctement.
Je documenterai cela s'il y a un intérêt à ce que mon fork soit fusionné dans le dépôt en amont.

Tous les 35 commentaires

J'ai vu qu'il y avait un travail dans le passé pour le supporter, mais il semble être obsolète et ne peut pas être utilisé avec la bibliothèque react-native-iap actuelle :
https://github.com/dooboolab/react-native-iap/issues/370
J'ai donc lancé mon propre fork sur https://github.com/nochkin/react-native-iap/tree/amazon-iap

Il semble fonctionner dans mon propre environnement de développement. Mais avant de créer un PR pour cela, ce serait bien d'avoir de vrais testeurs alpha/bêta pour examiner certains cas limites et les peaufiner correctement car il est très possible que je n'utilise pas toutes les fonctionnalités de ma propre application.

J'ai essayé de rester dans l'API originale de react-native-iap autant que possible. Il y a quelques méthodes que je ne fais pas encore (je peux l'ajouter si quelqu'un a un moyen de tester correctement).

L'une des décisions de conception les plus décisives dans mon fork est de savoir comment détecter Google contre Amazon. Je pense que la détection d'un modèle/marque d'appareil n'est pas une bonne approche car un utilisateur peut installer Google Play sur un Kindle et obtenir l'application via Google (et vice versa lorsque vous pouvez installer Amazon Appstore sur un appareil basé sur Play). Nous devrions obtenir l'IAP via l'API correspondante dans ce cas.
Mes fourches vérifient la source d'installation et agissent en conséquence. Dans l'environnement de développement, la source d'installation n'existe pas, vous pouvez donc définir une solution de secours pour pouvoir la tester correctement.
Je documenterai cela s'il y a un intérêt à ce que mon fork soit fusionné dans le dépôt en amont.

@nochkin Ça a l'air vraiment sympa. J'aimerais connaître la marche à suivre pour tester cela. Je n'ai aucun appareil amazon . Puis-je encore le tester ? J'espère que vous pourrez afficher un document pour ceux qui souhaitent suivre cette intégration.

J'utilise un véritable appareil Amazon à des fins de test. Je suppose que si vous installez Amazon Appstore sur un appareil non Amazon, cela devrait le faire.
Je créerai de la documentation plus tard dans la journée pour commencer. Je suis content qu'il y ait un intérêt pour ça.

Voici le guide sur la façon d'ajouter la prise en charge d'Amazon IAP à l'application existante :
https://github.com/nochkin/react-native-iap/blob/amazon-iap/README_AMAZON.md
Faites-moi savoir si quelque chose nécessite des éclaircissements supplémentaires.

POUR VOTRE INFORMATION,
J'ai apporté quelques modifications supplémentaires à mon fork hier soir et j'ai également publié mon application en production en l'utilisant.
Ça a l'air bien jusqu'à présent.
Je serais intéressé d'obtenir un retour d'autres personnes au cas où il y aurait besoin de fonctionnalités supplémentaires ou de cas d'utilisation qui ne sont pas couverts dans ma propre application.

@hyochan Est-il prévu d'ajouter ceci à une version ?

@curiousdustin ,
Vous pouvez utiliser mon fork pour tester et un retour :
https://github.com/nochkin/react-native-iap/tree/amazon-iap
Je suis sûr que vos cas d'utilisation sont différents des miens, vous pouvez donc fournir des commentaires supplémentaires pour obtenir plus de modifications.

@nochkin votre fork inclut-il la prise en charge des IAP d'abonnement Amazon ?

@curiousdustin ,
Même si cela fait longtemps depuis la mise en œuvre, mais je crois que oui. Je ne l'ai juste pas testé avec les abonnements.
Vous devrez toujours implémenter la vérification côté serveur car je ne valide jamais rien sur un client.

Amazon n'apporte pas beaucoup de trafic, donc mes tests dans la vraie vie sont un peu lents. Si vous pouviez contribuer à cet aspect, ce serait bien.

Ok, je vais probablement tester ça. J'utilise actuellement mon propre fork en production, mais c'était avant les changements majeurs liés au cycle de vie. J'aimerais vraiment profiter de toutes les grandes mises à jour depuis lors.

Agréable. Je suis toujours en train de mettre en œuvre des abonnements pour ma propre application (logique interne liée à l'application, pas le rn-iap), alors faites-moi savoir si quelque chose.

L'API des abonnements Amazon est un peu bizarre lorsqu'elle est interrogée. Par exemple, j'ai un abonnement mensuel et annuel au même service, mais Amazon les signale de manière identique. La seule différence est le prix, donc je pensais que je trouverais lequel est lequel en fonction du prix uniquement.

Avez-vous beaucoup d'utilisateurs abonnés et de nouveaux abonnés ?

Oui, l'application pour laquelle j'utilise ceci a des centaines de nouveaux abonnements chaque mois. De plus, toute mise à jour qui l'utilise sera soigneusement vérifiée avant sa sortie.

Nous avons également des options mensuelles et annuelles. Comme vous l'avez décrit, ils sont tous deux sous un seul identifiant pour Amazon. Dans notre cas, nous confirmons l'abonnement via l'API Amazon, qui nous donne des informations sur la période.

Cela sonne bien. Je suis content que ma fourche ait un test approprié dans un scénario différent.

Je dois afficher la période d'abonnement dans l'interface utilisateur pour que l'utilisateur puisse la sélectionner.
C'est bizarre qu'Amazon Developer Console ait ces champs comme requis, mais l'API n'y a pas accès.

Cela a peut-être changé, mais nous avons constaté que même si vous présentez 2 options aux utilisateurs, une fois qu'ils lancent le flux d'achat, Amazon affichera les options de période avec la première présélectionnée. Nous avons donc dû implémenter une nouvelle interface utilisateur pour amazon, où l'utilisateur ne sélectionne pas réellement la période, jusqu'à ce qu'il soit dans l'interface utilisateur du flux d'achat Amazon.

Idée intéressante en fait. Mon interface utilisateur ne correspond pas à ce modèle, mais je peux envisager cette option si je décide de la modifier. Je peux encore l'utiliser de toute façon. Merci.

@curiousdustin @nochkin
Salut, comme je l'ai compris, vous avez fait beaucoup pour ce problème, wow ! Je suis également en train de mettre en place des abonnements. Comment savez-vous que l'abonnement a été mis à jour ? Et avez-vous besoin de le mettre à jour sur le serveur ? Comment cela fonctionne-t-il avec RVS, je veux dire que le reçu amazon n'a pas de date de fin d'abonnement, alors, comment mettre à jour un abonnement spécifique pour l'utilisateur sur le serveur. Ce serait bien d'avoir de vos nouvelles si vous savez quelque chose sur toutes ces choses)

Je n'ai pas encore commencé à implémenter ce fork dans mon projet. Je le ferai probablement le mois prochain.

Désolé, je n'ai pas beaucoup d'informations sur le fonctionnement des éléments Amazon côté serveur. Une autre personne de mon équipe s'est occupée du backend. Je sais qu'actuellement, nous transmettons simplement l'identifiant du produit et l'identifiant du reçu à notre serveur et il gère tout le reste en ce qui concerne la vérification et la mise à jour de la validité de l'abonnement si nécessaire.

@kostiantyn-solianyk
Ma propre application implémente actuellement Google Play et App Store uniquement, je n'ai pas encore fait Amazon RVS pour les abonnements.
Je vérifie régulièrement les achats intégrés à l'application pour Amazon et c'était assez facile à mettre en œuvre, donc je suppose que les abonnements devraient être similaires.

oui, en mode test, tout va bien, et avec votre fork en fait aussi, fonctionnant selon les besoins (dans les cas que j'ai vérifiés).

Nous sommes bloqués sur le problème de mise à jour de l'abonnement car le reçu amazon n'a pas de date de fin d'abonnement, et c'est en fait bizarre.

Je vais voir si je peux redéfinir la priorité de mes tâches afin de pouvoir jouer avec les vérifications Amazon sur leurs abonnements.
Je suppose que vous avez également le problème d'utiliser leur serveur de test, n'est-ce pas ?

@nochkin Au fait, j'ai remarqué que les méthodes getAvailablePurchases et getPurchaseHistory renvoient des erreurs. Je pense que ces 2 n'ont pas encore été implémentés pour amazon IAP dans votre fork ?

Vous avez raison. Mon propre modèle d'application ne les utilise pas.
Je regarderai. Merci.

Semblable à @kostiantyn-solianyk , j'ai constaté que les méthodes suivantes doivent être implémentées pour Amazon :

RNIapAmazonModule.endConnection() suivi par RNIap.endConnection()

Je pense que cela doit juste résoudre la promesse. Il nécessite également des modifications de index.ts , sinon il n'est jamais utilisé.

RNIapAmazonModule.refreshItems() suivi par RNIap.consumeAllItemsAndroid()

Mon application n'utilise pas consumeAllItemsAndroid , donc je n'ai pas examiné ce qui doit être fait.

RNIapAmazonModule.getPurchaseHistoryByType() suivi par RNIap.getPurchaseHistory()

Mon application n'utilise pas getPurchaseHistory , donc je n'ai pas examiné ce qui doit être fait.

RNIapAmazonModule.getAvailableItemsByType() suivi par RNIap.getAvailablePurchases()

Cela est nécessaire pour fournir un flux _Restaurer les achats_ dans votre application. Je l'ai fait fonctionner, mais ce que je nave semble un peu hacky. Je posterai la solution ici si je la nettoie un peu.

En dehors de ceux-ci, les tests se déroulent bien jusqu'à présent. Merci pour ça @nochkin !

@nochkin , Pourriez-vous décrire comment vous installez ce fork dans votre projet d'application ?

Quand je fais quelque chose comme ça :

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

Le module ne se résout pas car il s'attend à ce que le js construit à partir de dactylographie soit là, mais la version construite du projet n'existe pas sur github. Il n'est créé que pour le package de version du module. En fait, en installant avec npm et la ligne ci-dessus, il ne télécharge même pas index.ts, à cause du fichier .npmignore, je pense.

Est-ce que ça a du sens?

Merci beaucoup pour le résumé sur les implémentations de méthodes manquantes. Je n'ai pas implémenté "endConnection" car ce n'était pas nécessaire, mais je suis d'accord qu'il doit avoir la méthode à des fins de compatibilité.
Je vais voir les autres. Désolé, cela a pris du temps, mais les choses sont en train de s'éclaircir maintenant et je m'attends à le vérifier/le mettre en œuvre bientôt.

J'ai installé localement, quelque chose comme ceci:
"react-native-iap": "../react-native-iap"
Tout en ayant le répertoire "react-native-iap", soyez simplement un clone de mon dépôt.

Pas de soucis!

Ok, oui, j'ai pensé que la référence de fichier local fonctionnerait, mais ne rend pas le projet très portable.

La solution de contournement que j'utilise actuellement pour référencer mon propre fork/branch consiste à définir la dépendance comme ceci :

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

Et dans ma branche, j'ai changé la propriété main dans react-native-iap package.json en index.ts au lieu de .js . J'ai également supprimé les entrées liées à TypeScript dans .npmignore .

Cela fonctionne pour l'instant, je suppose parce que ma configuration RN construit automatiquement des modules basés sur TS ...

Un autre élément important qui semble manquer est la gestion des erreurs.

L'implémentation d'Amazon n'exécute jamais de code pour émettre des événements d'erreur, comme celui-ci dans la version Google :

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

Cela signifie que le purchaseErrorListener ne sera jamais appelé.

Noté. Bon point. Merci.

Salut, il semble qu'il n'y ait eu aucune activité sur ce problème récemment. Le problème a-t-il été résolu ou nécessite-t-il toujours l'attention de la communauté ? Ce problème peut être fermé si aucune autre activité ne se produit. Vous pouvez également étiqueter ce problème comme "Pour discussion" ou "Bon premier numéro" et je le laisserai ouvert. Merci pour vos contributions.

Cogner!

Ce serait formidable d'avoir également le support Amazon dans ce plugin. J'utilise l'implémentation d'Amazon faite par @nochkin pour les abonnements à renouvellement automatique et la chose est assez fiable. Ce serait génial d'intégrer ce fork dans le dépôt et d'avoir une plus grande base de contributeurs pour maintenir l'implémentation !

Y aura-t-il des nouvelles à ce sujet plus tard ou l'idée va-t-elle être abandonnée?

Je ne pense pas qu'il sera abandonné. Je crois que le principal point de blocage est quelques fonctionnalités manquantes (mineures pour mes cas d'utilisation, mais peut-être majeures pour quelqu'un d'autre). Ma propre application est également satisfaite de l'état actuel.
Ces pièces restantes du puzzle sont toujours sur mon radar et j'ai commencé à travailler dessus. Malheureusement, l'achèvement/les tests prennent plus de temps que prévu en raison d'autres priorités.

Ouais, je comprends la situation, je vais surveiller ça alors!

Merci pour la réponse et j'espère que vous aurez un peu plus de temps pour cela 🤣

J'ai poussé un PR (#1134 ) basé sur votre excellent travail @nochkin @curiousdustin ! 👏
Tests effectués, ça marche très bien de notre côté ! Nous ajouterons le support d'Amazon sur react-native-iaphub lorsque le PR sera fusionné.
C'est fonctionnel mais comme @nochkin l' a dit, il y a encore quelques améliorations que nous pouvons faire à l'avenir.

Salut, il semble qu'il n'y ait eu aucune activité sur ce problème récemment. Le problème a-t-il été résolu ou nécessite-t-il toujours l'attention de la communauté ? Ce problème peut être fermé si aucune autre activité ne se produit. Vous pouvez également étiqueter ce problème comme "Pour discussion" ou "Bon premier numéro" et je le laisserai ouvert. Merci pour vos contributions.

Résolu et maintenant intégré à la version 5.0.0 :
https://github.com/dooboolab/react-native-iap/releases/tag/5.0.0

Cette page vous a été utile?
0 / 5 - 0 notes