¿Cuándo se llama a React native RNIap.purchaseErrorListener?
He integrado react-native-iap
para la compra dentro de la aplicación.
El flujo de pago en Android funciona correctamente (éxito en el pago, pago fallido y cancelación del pago por parte del usuario).
Pero tengo un problema cuando se muestra la tarjeta de compra y hago clic fuera de la tarjeta, la tarjeta se cierra pero no se recibe el evento dentro de RNIap.purchaseErrorListener
.
Por lo tanto, mi variable de estado no se actualiza.
Aquí tienes un ejemplo: Enlace a la imagen
Código del listener:
useEffect(() => {
initPurchase()
purchaseErrorSubscription = RNIap.purchaseErrorListener(
(error) => {
console.log('purchaseErrorListener INAPP>>>>', error);
if(error.code == "E_USER_CANCELLED") {
//for cancelled or refund sku
setSelectedPackage(null)
RNToasty.Show({
title: error.message,
});
} else if(error.code == "E_ITEM_UNAVAILABLE") {
//item not found
setSelectedPackage(null)
} else {
setSelectedPackage(null)
}
},
);
}, [])
El listener no se llama cuando realizo la acción anterior.
¿Alguien puede ayudarme a obtener este evento?
¡Gracias de antemano!
davy.ai
Problema con el evento de cierre de tarjeta de compra en la compra integrada de
react-native-iap
Como experto en TI especializado en Android, React Native, compras integradas y react-native-iap, proporcionaré algunos conocimientos sobre cómo resolver el problema que ocurre cuando se cierra la tarjeta de compra, pero el evento dentro de
RNIap.purchaseErrorListener
no se activa.El Problema
Según el GIF de muestra, el flujo de pago de Android funciona correctamente, con éxito en el pago, fallo en el pago y cancelación del pago por parte del usuario. Sin embargo, el problema surge cuando se cierra la tarjeta de compra al hacer clic fuera de la misma. La tarjeta se cierra, pero el evento dentro de
RNIap.purchaseErrorListener
no se activa. Como consecuencia, la variable de estado no se actualiza, lo que causa problemas.La Solución
El problema que se presenta al cerrar la tarjeta de compra se debe a que el evento
purchaseErrorListener
solo se activa cuando hay un error en el proceso de pago. Cuando los usuarios cierran la tarjeta de compra, no se registra como un error en el proceso, por lo tanto, el eventopurchaseErrorListener
no se activa.Para resolver este problema, debemos agregar otro evento para capturar las pulsaciones del botón
BACK
y detectar y manejar si el usuario presiona el botónBACK
en lugar de enviar la información de pago. Puede agregar el siguiente código a su ganchouseEffect
:Lo que hace este código es escuchar el evento del botón
BACK
y activar elpurchaseBackListener
. Si se presiona el botónBACK
antes de enviar la información de pago, se activa este escuchador. Luego puede ajustar su variable de estado en consecuencia.Aquí está el código actualizado del escuchador:
Con este evento agregado para el botón
BACK
, podrá capturar el evento de cancelación de compra y ajustar su variable de estado en consecuencia.