React-native-iap: buySubscription no se resuelve al cambiar las suscripciones en iOS

Creado en 26 sept. 2018  ·  14Comentarios  ·  Fuente: dooboolab/react-native-iap

Versión de react-native-iap

2.2.2

Plataformas a las que se enfrentó el error (¿IOS o Android o ambos?)

iOS

Comportamiento esperado

buySubscription debería resolverse al cambiar de suscripción mensual a anual, en lugar de rechazar y devolver un error, lo que obliga a la cláusula de captura.

Comportamiento real

Si actualmente está suscrito a un plan, cambiar a otro hace que buySubscription detecte y devuelva el siguiente error:
screen shot 2018-09-27 at 1 21 10 am

Entorno probado (¿Emulador? ¿Dispositivo real?)

Dispositivo real, iPhone 6

Pasos para reproducir el comportamiento

Esto ocurre cuando los cuadros de diálogo de modificación de suscripción aparecen en la aplicación y le preguntan si desea cambiar su suscripción actual a la recién seleccionada. Al tocar este cuadro de diálogo, aparece el error en lugar de la promesa resuelta esperada. Parece que este caso de uso no se ha tenido en cuenta o algo así.

Esto me está rompiendo en este momento porque no hay forma de confirmar que realmente compraron o validar los recibos para estos casos. Por favor, avíseme si conoce alguna solución o arreglo, o si hay algo que pueda hacer para ayudar (aunque no tengo experiencia en Obj-C). La única solución posible en la que puedo pensar por ahora es si buySubscriptions devuelve un error, verificando este error y si coincide con este error, confirmando la compra. Pero esto es muy peligroso ya que imposibilita la validación del recibo y algún otro error (como la imposibilidad de conectarse al servidor o algo así) podría producir el mismo código de error, dando al usuario la suscripción sin tener que pagarla. En otras palabras, no puedo pensar en soluciones alternativas viables en este momento. ¿Me estoy perdiendo de algo? ¿Hay alguna razón por la que no necesite que se resuelva la promesa de buySubscriptions? Estaría muy agradecido de tener noticias de alguien.

EDITAR : Esto puede ser una consecuencia obvia de lo que ya he descrito, pero después de intentar modificar su suscripción, esta compra no se agrega a su historial de compras. No hay indicios por parte del usuario de que esta compra no se esté realizando correctamente; el usuario continúa con el flujo de compra de los cuadros de diálogo con éxito, y concluye con uno que dice "Ya está todo listo".

EDIT2 : A veces funciona, pero aún no estoy seguro de cómo reproducirlo, informaré si encuentro una manera. Cuando funciona, el primer cuadro de diálogo solicita mi contraseña y luego procede normalmente como si aún no tuviera otra suscripción, a diferencia de cuando el primer cuadro de diálogo es "Confirmar compra" y me pregunta si quiero modificar mi suscripción, que es lo que aparece cuando no funciona. Cuando funciona, la suscripción comprada se agrega a mi historial de compras como se esperaba.

EDIT3 : Tomé una foto del mensaje de error incorrecto antes. Ahora lo he corregido. El mensaje de error dice: "Error: se produjo un error desconocido o inesperado. Vuelva a intentarlo más tarde". También es posible que desee considerar el método utilizado para comprar productos en react-native-in-app-utils. Usan un método diferente y las diferencias podrían ayudar a explicar por qué sucede esto, aunque no he usado esa biblioteca y, por lo tanto, no puedo confirmar que no sucedería allí.

🍗 enhancement 🐛 bug 📱 iOS

Comentario más útil

Lo miré de nuevo hoy y creo que encontré algo notable. Lo que parece estar sucediendo es lo que se encontró en este error: https://github.com/bizz84/SwiftyStoreKit/issues/269. Al cambiar entre suscripciones de renovación automática en el mismo grupo, la transacción no se realiza porque no se facturará al usuario hasta que expire la suscripción actual. Pero se ha registrado correctamente y el pago se procesará una vez que finalice la suscripción actual, pero no hasta entonces. Por lo tanto, las devoluciones de transacciones fallaron porque todavía no se está produciendo ninguna transacción. Así que no creo que nada vaya mal en el proceso de pago, es solo que la transacción devuelta se registra como un error. Pero todavía tengo que probar esto ya que me encontré con él y mi depurador está actuando mal y se está haciendo tarde, así que no intentaré solucionarlo hasta mañana. Sería genial si alguien pudiera intentar confirmar mientras tanto (es decir, cambiando entre suscripciones y luego viendo si la transacción de la segunda aparece en su historial de compras una vez que la primera ha expirado, o algo así). Si esto ES lo que está pasando, sería genial si pudiéramos encontrar alguna forma de manejarlo. Si el error que genera es específico de este proceso, podríamos pasarlo como el valor de retorno de la promesa para que podamos manejarlo correctamente (por ejemplo, no generar un mensaje de error para el usuario, actualizar la información de suscripción del usuario). Me encantaría escuchar los pensamientos de alguien sobre si esto funciona y cómo proceder.

Todos 14 comentarios

¿Podrías probar la versión reciente ahora que es 2.3.15 ?

Sí, lo daré una vuelta en algún momento hoy

@kevinEsherick ¿Cuál es tu resultado para este?

Sigue sin funcionar. Si estoy suscrito mensualmente y cambio a anual, se cumple la cláusula de captura. Ha habido ocasiones en las que ha funcionado aleatoriamente, pero aún no se ha encontrado una forma de reproducirse. Los mantendré informados sobre lo que encuentre y, por favor, hagan lo mismo por mí. ¡Gracias!

@kevinEsherick ¿Cómo "

En iOS, ¿no puede cambiar una suscripción ingresando a la aplicación de configuración para administrar sus suscripciones y luego eligiendo un producto diferente dentro del mismo grupo?

@JJMoon No, simplemente compro la suscripción mensual en la aplicación y luego compro la suscripción anual en la aplicación. Son suscripciones de renovación automática en el mismo grupo de suscripción. Si dos suscripciones (A y B) están en el mismo grupo en iTunes Connect, se supone que comprar B mientras estás suscrito a A cancelará automáticamente A y te suscribirá a B. ¿Crees que es un problema que este paquete no admita esta funcionalidad? Si es así, ¿podemos encontrar una manera de implementar esto?

También me encuentro con este problema. ¿Cualquier progreso?

No. No he tenido mucho tiempo para abordarlo últimamente. Lo investigaré de nuevo pronto.

Mirándolo un poco y me he dado cuenta de que parece que Apple reconoce el cambio en la suscripción, al menos hasta cierto punto. Si cambio de, digamos, mensual a anual, se muestra el modal apropiado con el lenguaje sobre cómo modificar su suscripción. Cuando compro anualmente, hay un error y buySubscription no se resuelve. PERO, cuando vuelvo a realizar una compra nuevamente, esta vez volviendo a la suscripción mensual, la API de Apple sabe que estoy en la suscripción anual y muestra el modal "¿Quieres modificar tu suscripción ..." nuevamente. Aún no estoy seguro de cómo se manifiesta esto en la producción, ya que todo esto es un espacio aislado. Examinaré esto más a fondo en algún momento esta noche, pero esto podría significar que las cosas están bien por parte de Apple y que es solo un error del lado del cliente. Si este es el caso, es posible que ya no sea un error crítico, pero aún así justifica una solución.

Lo miré de nuevo hoy y creo que encontré algo notable. Lo que parece estar sucediendo es lo que se encontró en este error: https://github.com/bizz84/SwiftyStoreKit/issues/269. Al cambiar entre suscripciones de renovación automática en el mismo grupo, la transacción no se realiza porque no se facturará al usuario hasta que expire la suscripción actual. Pero se ha registrado correctamente y el pago se procesará una vez que finalice la suscripción actual, pero no hasta entonces. Por lo tanto, las devoluciones de transacciones fallaron porque todavía no se está produciendo ninguna transacción. Así que no creo que nada vaya mal en el proceso de pago, es solo que la transacción devuelta se registra como un error. Pero todavía tengo que probar esto ya que me encontré con él y mi depurador está actuando mal y se está haciendo tarde, así que no intentaré solucionarlo hasta mañana. Sería genial si alguien pudiera intentar confirmar mientras tanto (es decir, cambiando entre suscripciones y luego viendo si la transacción de la segunda aparece en su historial de compras una vez que la primera ha expirado, o algo así). Si esto ES lo que está pasando, sería genial si pudiéramos encontrar alguna forma de manejarlo. Si el error que genera es específico de este proceso, podríamos pasarlo como el valor de retorno de la promesa para que podamos manejarlo correctamente (por ejemplo, no generar un mensaje de error para el usuario, actualizar la información de suscripción del usuario). Me encantaría escuchar los pensamientos de alguien sobre si esto funciona y cómo proceder.

Espero que este problema se pueda solucionar con los métodos que mencioné.
Clausura...

¿Tiene el mismo comportamiento, algún paso para resolver esto?

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