React-native-iap: Agregar soporte para Amazon Appstore IAP

Creado en 26 feb. 2020  ·  35Comentarios  ·  Fuente: dooboolab/react-native-iap

Creo que sería bueno tener soporte para la API IAP de Amazon Appstore .

🎯 feature 📢 announcement 🚶🏻 stale

Comentario más útil

Vi que había un trabajo en el pasado para respaldarlo, pero parece estar desactualizado y no se puede usar con la biblioteca react-native-iap actual:
https://github.com/dooboolab/react-native-iap/issues/370
Así que comencé mi propia bifurcación en https://github.com/nochkin/react-native-iap/tree/amazon-iap

Parece estar funcionando en mi propio entorno de desarrollo. Pero antes de crear un PR para ello, sería bueno tener algunos probadores alfa/beta reales para revisar ciertos casos extremos y pulirlos correctamente, ya que es muy posible que no use todas las funciones en mi propia aplicación.

Traté de mantenerme dentro de la API react-native-iap original posible. Hay un par de métodos que aún no hago (puedo agregarlo si alguien tiene una forma de probarlo correctamente).

Una de las decisiones de diseño más importantes en mi bifurcación es cómo detectar Google vs Amazon. Creo que detectar el modelo/marca de un dispositivo no es un buen enfoque porque un usuario puede instalar Google Play en un Kindle y obtener la aplicación a través de Google (y viceversa, cuando puede instalar Amazon Appstore en un dispositivo basado en Play). Deberíamos hacer el IAP a través de la API correspondiente en este caso.
Mis bifurcaciones comprueban la fuente de instalación y actúan en consecuencia. En el entorno de desarrollo, la fuente de instalación no existe, por lo que puede configurar un respaldo para poder probarlo correctamente.
Documentaré esto si hay algún interés en que mi bifurcación se fusione con el repositorio ascendente.

Todos 35 comentarios

Vi que había un trabajo en el pasado para respaldarlo, pero parece estar desactualizado y no se puede usar con la biblioteca react-native-iap actual:
https://github.com/dooboolab/react-native-iap/issues/370
Así que comencé mi propia bifurcación en https://github.com/nochkin/react-native-iap/tree/amazon-iap

Parece estar funcionando en mi propio entorno de desarrollo. Pero antes de crear un PR para ello, sería bueno tener algunos probadores alfa/beta reales para revisar ciertos casos extremos y pulirlos correctamente, ya que es muy posible que no use todas las funciones en mi propia aplicación.

Traté de mantenerme dentro de la API react-native-iap original posible. Hay un par de métodos que aún no hago (puedo agregarlo si alguien tiene una forma de probarlo correctamente).

Una de las decisiones de diseño más importantes en mi bifurcación es cómo detectar Google vs Amazon. Creo que detectar el modelo/marca de un dispositivo no es un buen enfoque porque un usuario puede instalar Google Play en un Kindle y obtener la aplicación a través de Google (y viceversa, cuando puede instalar Amazon Appstore en un dispositivo basado en Play). Deberíamos hacer el IAP a través de la API correspondiente en este caso.
Mis bifurcaciones comprueban la fuente de instalación y actúan en consecuencia. En el entorno de desarrollo, la fuente de instalación no existe, por lo que puede configurar un respaldo para poder probarlo correctamente.
Documentaré esto si hay algún interés en que mi bifurcación se fusione con el repositorio ascendente.

@nochkin Suena muy bien. Me gustaría saber el paso para probar esto. No tengo ningún dispositivo amazon . ¿Todavía puedo probarlo? Espero que pueda traer algún documento para aquellos que tengan interés en hacer un seguimiento de esta integración.

Utilizo un dispositivo real de Amazon para fines de prueba. Supongo que si instala Amazon Appstore en un dispositivo que no es de Amazon, eso debería funcionar.
Crearé algo de documentación más tarde hoy para comenzar. Me alegro de que haya interés por ello.

Aquí está la guía sobre cómo agregar el soporte de Amazon IAP a la aplicación existente:
https://github.com/nochkin/react-native-iap/blob/amazon-iap/README_AMAZON.md
Avíseme si algo necesita una aclaración adicional.

para tu información,
Anoche impulsé algunos cambios más en mi bifurcación y también lancé mi aplicación a producción usándola.
Se ve bien hasta ahora.
Me interesaría recibir comentarios de otros en caso de que haya alguna necesidad de funcionalidad adicional o casos de uso que no estén cubiertos en mi propia aplicación.

@hyochan ¿Hay algún plan para agregar esto a un lanzamiento?

@polvocurioso ,
Puedes usar mi tenedor para probar y recibir comentarios:
https://github.com/nochkin/react-native-iap/tree/amazon-iap
Estoy seguro de que sus casos de uso son diferentes a los míos, por lo que puede proporcionar comentarios adicionales para obtener más cambios.

@nochkin , ¿su bifurcación incluye soporte para IAP de suscripción de Amazon?

@polvocurioso ,
A pesar de que ha pasado mucho tiempo desde la implementación, creo que sí. Simplemente no lo he probado con suscripciones.
Aún deberá implementar la verificación en el lado del servidor, ya que nunca valido nada en un cliente.

Amazon no genera tanto tráfico, por lo que mis pruebas en la vida real son un poco lentas. Si pudieras contribuir en este aspecto, sería bueno.

Ok, probablemente probaré esto. Actualmente estoy usando mi propia bifurcación en producción, pero esto fue antes de los principales cambios relacionados con el ciclo de vida. Realmente me gustaría aprovechar todas las excelentes actualizaciones desde entonces.

Bonito. Todavía estoy en el proceso de implementar suscripciones para mi propia aplicación (lógica interna relacionada con la aplicación, no la rn-iap), así que avísenme si hay algo.

La API de suscripciones de Amazon es un poco extraña cuando se consulta. Por ejemplo, tengo suscripción mensual y anual del mismo servicio, pero Amazon los informa de forma idéntica. La única diferencia es el precio, así que estaba pensando en averiguar cuál es cuál basándome únicamente en el precio.

¿Tiene muchos usuarios suscritos y nuevos usuarios de suscripción?

Sí, la aplicación para la que estoy usando tiene cientos de suscripciones nuevas cada mes. Además, cualquier actualización que use esto se someterá a un control de calidad exhaustivo antes del lanzamiento.

También tenemos opciones mensuales y anuales. Como usted describió, ambos están bajo una sola identificación para Amazon. En nuestro caso estamos confirmando la suscripción a través de la API de Amazon, que nos da información sobre el periodo.

Esto suena genial. Me alegro de que mi bifurcación tenga una prueba adecuada en un escenario diferente.

Necesito mostrar el período de suscripción en la interfaz de usuario para que el usuario lo seleccione.
Es extraño que Amazon Developer Console tenga esos campos como obligatorios, pero la API no tiene acceso a ellos.

Esto puede haber cambiado, pero encontramos que incluso si presentas 2 opciones al usado, una vez que inician el flujo de compra, Amazon mostrará las opciones de período con la primera preseleccionada. Por lo tanto, tuvimos que implementar una nueva interfaz de usuario para Amazon, en la que el usuario no selecciona el período hasta que se encuentra en la interfaz de usuario del flujo de compra de Amazon.

Interesante idea en realidad. Mi interfaz de usuario no se ajustará a este modelo, pero puedo considerar esta opción si decido cambiarla. Todavía puedo llegar a usarlo de todos modos. Gracias.

@curiousdustin @nochkin
Hola, tengo entendido que hiciste mucho por este problema, ¡guau! Estoy en el proceso de implementar suscripciones también. ¿Cómo sabes que la suscripción ha sido actualizada? ¿Y necesitas actualizarlo en el servidor? ¿Cómo funciona con RVS? Me refiero a que el recibo de Amazon no tiene la fecha de finalización de la suscripción, entonces, cómo actualizar la suscripción específica para el usuario en el servidor. Sería bueno saber de usted si sabe algo sobre todas estas cosas)

En realidad, aún no he comenzado a implementar esta bifurcación en mi proyecto. Es probable que lo haga el próximo mes.

Lo siento, no tengo mucha información sobre cómo funcionan las cosas de Amazon del lado del servidor. Una persona diferente en mi equipo manejó el backend. Sé que actualmente solo entregamos la identificación del producto y la identificación del recibo a nuestro servidor y maneja todo lo demás en cuanto a verificar y actualizar la validez de la suscripción según sea necesario.

@kostiantyn-solianyk
Mi propia aplicación actualmente solo implementó Google Play y App Store, todavía no hice Amazon RVS para suscripciones.
Hago una verificación regular de compras en la aplicación para Amazon y eso fue lo suficientemente fácil de implementar, por lo que asumiría que las suscripciones deberían ser de alguna manera similares.

sí, en el modo de prueba, todo está bien, y con tu bifurcación también, funciona según sea necesario (en los casos que verifiqué).

Estamos atascados en el problema de actualizar la suscripción porque el recibo de Amazon no tiene la fecha de finalización de la suscripción, y en realidad es extraño.

Veré si puedo volver a priorizar mis tareas para poder jugar con las verificaciones de Amazon en sus suscripciones.
Supongo que también tiene problemas para usar su servidor de prueba, ¿verdad?

@nochkin Por cierto, noté que los métodos getAvailablePurchases y getPurchaseHistory devuelven errores. Creo que estos 2 aún no se han implementado para Amazon IAP en su bifurcación.

Tienes razón. Mi propio modelo de aplicación no los usa.
Le daré un vistazo. Gracias.

Similar a @kostiantyn-solianyk, descubrí que los siguientes métodos deben implementarse para Amazon:

RNIapAmazonModule.endConnection() llamado por RNIap.endConnection()

Creo que esto solo necesita resolver la promesa. También requiere cambios en index.ts , o nunca se usa.

RNIapAmazonModule.refreshItems() llamado por RNIap.consumeAllItemsAndroid()

Mi aplicación no usa consumeAllItemsAndroid , por lo que no he investigado lo que hay que hacer.

RNIapAmazonModule.getPurchaseHistoryByType() llamado por RNIap.getPurchaseHistory()

Mi aplicación no usa getPurchaseHistory , por lo que no he investigado lo que hay que hacer.

RNIapAmazonModule.getAvailableItemsByType() llamado por RNIap.getAvailablePurchases()

Esto es necesario para proporcionar un flujo de _Restaurar compras_ en su aplicación. Tengo esto funcionando, pero lo que entiendo se siente un poco raro. Publicaré la solución aquí si la limpio un poco.

Aparte de estos, las pruebas hasta ahora van bien. ¡Gracias por esto @nochkin !

@nochkin , ¿podría describir cómo está instalando esta bifurcación en su proyecto de aplicación?

Cuando hago algo como esto:

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

El módulo no se resuelve porque espera que el js compilado a partir de mecanografiado esté allí, pero la versión compilada del proyecto no existe en github. Solo se crea para el paquete de lanzamiento del módulo. De hecho, al instalar con npm y la línea anterior, ni siquiera descarga index.ts, creo que debido al archivo .npmignore.

¿Esto tiene sentido?

Muchas gracias por el resumen de las implementaciones de métodos que faltan. No implementé "endConnection" porque no era necesario, pero estoy de acuerdo en que debe tener el método por motivos de compatibilidad.
Buscaré en otros. Lo siento, tomó algún tiempo, pero las cosas se están aclarando ahora y espero verificarlo/implementarlo pronto.

Instalé localmente, algo como esto:
"react-native-iap": "../react-native-iap"
Mientras que el directorio "react-native-iap" simplemente sea un clon de mi repositorio.

¡No hay problema!

Ok, sí, pensé que la referencia del archivo local funcionaría, pero no hace que el proyecto sea muy portátil.

La solución que estoy usando en este momento para hacer referencia a mi propia bifurcación/rama es definir la dependencia de esta manera:

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

Y en mi sucursal he cambiado la propiedad main en react-native-iap 's package.json a index.ts en lugar de .js . También eliminé las entradas relacionadas con TypeScript en .npmignore .

Esto funciona por ahora, supongo porque mi configuración de RN está creando automáticamente módulos basados ​​en TS...

Otra pieza importante que parece faltar es el manejo de errores.

La implementación de Amazon nunca ejecuta ningún código para emitir eventos de error, como este de la versión de Google:

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

Esto significa que nunca se llamará a purchaseErrorListener .

Señalado. Buen punto. Gracias.

Hola, parece que no ha habido actividad en este tema recientemente. ¿Se solucionó el problema o aún requiere la atención de la comunidad? Este problema puede cerrarse si no se produce más actividad. También puede etiquetar este problema como "Para discusión" o "Buen primer problema" y lo dejaré abierto. Gracias por sus aportaciones.

¡Protuberancia!

Sería genial tener el soporte de Amazon en este complemento también. He estado usando la implementación de Amazon hecha por @nochkin para suscripciones de renovación automática y la cosa es bastante confiable. ¡Sería increíble integrar esta bifurcación en el repositorio y tener una base más grande de colaboradores que mantengan la implementación!

¿Habrá alguna noticia sobre esto más adelante o se abandonará la idea?

No creo que se descarte. Creo que el principal punto de estancamiento son algunas características que faltan (menores para mis casos de uso, pero tal vez importantes para otra persona). Mi propia aplicación también está contenta con el estado actual.
Las piezas restantes del rompecabezas todavía están en mi radar y comencé a trabajar en ellas. Desafortunadamente, la finalización/prueba demora más de lo esperado debido a otras prioridades.

Sí, entiendo la situación, ¡estaré pendiente de esto entonces!

Gracias por la respuesta y espero que tengas un poco de tiempo extra para ello 🤣

¡Envié un PR (# 1134) basado en su gran trabajo @nochkin @curiousdustin ! 👏
¡Pruebas realizadas, funcionando muy bien de nuestro lado! Agregaremos el soporte de Amazon en react-native-iaphub cuando se fusione el PR.
Es funcional, pero como dijo @nochkin , todavía hay algunas mejoras que podemos hacer en el futuro.

Hola, parece que no ha habido actividad en este tema recientemente. ¿Se solucionó el problema o aún requiere la atención de la comunidad? Este problema puede cerrarse si no se produce más actividad. También puede etiquetar este problema como "Para discusión" o "Buen primer problema" y lo dejaré abierto. Gracias por sus aportaciones.

Resuelto y ahora parte de la versión 5.0.0:
https://github.com/dooboolab/react-native-iap/releases/tag/5.0.0

¿Fue útil esta página
0 / 5 - 0 calificaciones