React-native-iap: RNIap no funciona en Android pero funciona en iOS con el mismo código

Creado en 7 jul. 2020  ·  33Comentarios  ·  Fuente: dooboolab/react-native-iap

Versión de react-native-iap
4.4.7

Versión de react-native
0,60,6

Plataformas en las que enfrentó el error (¿IOS o Android o ambos?)
Androide

Comportamiento esperado

     async componentDidMount() {
        try {
            const result = await RNIap.initConnection();
            await RNIap.consumeAllItemsAndroid();
            console.log('result', result);
            const products: Product[] = await RNIap.getProducts(itemSkus);
            this.setState({ products }, () => {console.log(this.state.products)});
        } catch (err) {
            console.warn(err.code, err.message);
        }

El comportamiento esperado es una lista de productos extraídos de la consola de juegos por .getProducts () impresos en la terminal

Comportamiento real
La promesa no se devuelve. Error "la facturación no está disponible"

Entorno probado (¿Emulador? ¿Dispositivo real?)
Dispositivo real (la aplicación está actualmente en producción)

Pasos para reproducir el comportamiento
const itemSkus = Platform.select({ ios: [ 'com.example.1' ], android: [ 'com.example.1' ] });

     async componentDidMount() {
        try {
            const result = await RNIap.initConnection();
            await RNIap.consumeAllItemsAndroid();
            console.log('result', result);
            const products: Product[] = await RNIap.getProducts(itemSkus);
            this.setState({ products }, () => {console.log(this.state.products)});
        } catch (err) {
            console.warn(err.code, err.message);
        }
    this.purchaseUpdateSubscription = purchaseUpdatedListener(async (purchase: InAppPurchase | SubscriptionPurchase | ProductPurchase) => {
        console.log('purchaseUpdatedListener', purchase);
        const receipt = purchase.transactionReceipt;
        if (receipt) {
            try {
                // if (Platform.OS === 'ios') {
                //   finishTransactionIOS(purchase.transactionId);
                // } else if (Platform.OS === 'android') {
                //   // If consumable (can be purchased again)
                //   consumePurchaseAndroid(purchase.purchaseToken);
                //   // If not consumable
                //   acknowledgePurchaseAndroid(purchase.purchaseToken);
                // }
                const ackResult = await finishTransaction(purchase);
            } catch (ackErr) {
                console.warn('ackErr', ackErr);
            }

            this.setState({ receipt }, () => this.goNext());
        }
    },
    );

    this.purchaseErrorSubscription = purchaseErrorListener(
        (error: PurchaseError) => {
            console.log('purchaseErrorListener', error);
        },
    );
}
componentWillUnmount() {
    if (this.purchaseUpdateSubscription) {
        this.purchaseUpdateSubscription.remove();
        this.purchaseUpdateSubscription = null;
    }
    if (this.purchaseErrorSubscription) {
        this.purchaseErrorSubscription.remove();
        this.purchaseErrorSubscription = null;
    }
}

Parece que no puedo entender por qué es esto. Estoy usando este código exacto para iOS y funciona perfectamente. Configuré todos los productos en la consola de juegos, agregué permisos de facturación al archivo de manifiesto y vinculé el paquete IAP (estoy usando AndroidX, por lo que el paquete está vinculado automáticamente). He iniciado sesión en Play Store y tengo la última versión de Play Store, pero initConnection () todavía no funciona. No sé que más hacer. ¡Cualquier ayuda es muy apreciada! Gracias por leer.

🙏 help wanted 🤖 android

Todos 33 comentarios

¿Ayudaría esto ?

¿Ayudaría esto ?

Desafortunadamente, no ayudó :(. ¿Tendría esto algo que ver con la migración de AndroidX? Por alguna razón, initConnection () no funciona y no sé la razón.

@damialajogun ¿Descubriste lo que estaba mal? Tengo exactamente el mismo error y no entiendo de dónde vino ... initConnection () no está definido.

@hyochan ¿Tienes una idea?

@damialajogun ¿Descubriste lo que estaba mal? Tengo exactamente el mismo error y no entiendo de dónde vino ... initConnection () no está definido.

Oye, no, aún no lo he descubierto :(

¿Agregó <uses-permission android:name="com.android.vending.BILLING" /> a su archivo AndroidManifest.xml?

@hakkikonu Sí, tengo

En mi registro de errores, puedo ver que se produce el mismo error para una pequeña parte de mis usuarios en varios países como EE. UU. Y Nueva Zelanda. Sin embargo, parece ocurrir de manera muy inconsistente. ¿Alguna idea de por qué puede ser causado esto?

@ joris1995 También tengo este problema, una pequeña parte de los usuarios no pueden realizar compras en la aplicación, el error es "No se encontró el sku. Primero, busque los productos llamando a getItems", pero el sku está presente porque en la ventana emergente de compra I muestra el precio del objeto tomado de getProducts, getItems ni siquiera está en la API

¿Tu aplicación de Google Play Store tiene la última versión? ¿Este problema solo ocurre en su teléfono o en todos los usuarios?

También puede intentar iniciar sesión en Google Play Store con una cuenta de Gmail diferente.

asegúrese de limpiar sus servicios de Google Play y los archivos de caché de la aplicación de Google Play Store desde la configuración / aplicaciones / Google Play en su dispositivo.

Todos los usuarios / cuentas / teléfonos ...

Para mí, es solo una parte de mis usuarios. No parece haber ningún factor consistente como el país, la versión del sistema operativo o el fabricante del dispositivo. En BugSnag, muestra el error 'La facturación no está disponible. Esto puede ser un problema con su dispositivo, o la Play Store podría estar inactiva '. ¿Por qué puede ser causado esto?

Debe enviar una versión beta antes de poder cargar las compras en la aplicación y solo puede depurarlo utilizando una versión de lanzamiento.

beta no es imprescindible. también alfa cerrado está bien

También tengo el mismo problema, incluso envié la versión beta y me aprobaron hace 4 días

Si entiendo lo que está diciendo, ¿es que initConnection () no funciona en prueba sino en beta?

@Kamsou Sí, aunque es principalmente "getProducts ()" lo que no funciona en una compilación de depuración.

Más información: https://medium.com/bleeding-edge/testing-in-app-purchases-on-android-a6de74f78878

Lo que me pasa es que, es que cuando quiero ver si se ha realizado la compra, hago:
RNIap.getPurchaseHistory ()
En iOs, todo funciona normalmente.
Pero en Android tengo este error: "Error: E_IAP_NOT_AVAILABLE"
_Estoy en mi emulador local_

`` ` const initilizeIAPConnection = async () => { await initConnection() .then(async (connection) => { consumeAllItemsAndroid(); await getItems(); console.log('IAP result', connection); }) .catch((error) => { console.warn( IAP ERROR $ {error.code}`, error.message);
});
};

const getItems = async () => {
tratar {
suscripciones const = aguardar getSubscriptions (itemSkus);
console.log ('Productos', suscripciones);
setSubscriptions (suscripciones);
} atrapar (err) {
console.warn (código de error, mensaje de error);
}
};
useEffect (() => {
initilizeIAPConnection ();
}, []);

`` ` I just removed await for consumeAllItemsAndroid (); `y empezó a funcionar

@rizshivalli Me alegra saber que está funcionando para usted. Desafortunadamente, todavía no me funciona cuando elimino la espera por consumeAllItemsAndroid() . Mi problema es que initConnection() no funciona. ¿Cómo puede hacer que esa parte funcione?

@damialajogun Eliminé try catch y agregué .then y .catch

@rizshivalli Lo intenté y todavía no me funciona :(. Perdón por todas las preguntas, pero ¿puedes ver realmente los 'productos' impresos en la terminal desde abajo? Creo que el problema con el mío es que no está tirando todos mis productos configurados en la consola de juegos a pesar de que los configuré y están activos.
const getItems = async () => { try { const subscriptions = await getSubscriptions(itemSkus); console.log('Products', subscriptions);

@damialajogun Sí, está funcionando. También puedo probar pagos en Android. ¿Ha lanzado la compilación a alfa o beta en Android?

@rizshivalli No es alfa ni beta, pero lo

Hola @rizshivalli, pregunta rápida: ¿su aplicación figura como gratuita o de pago en Google Play? El mío es gratis pero con compras dentro de la aplicación (los usuarios pueden descargar la aplicación gratis y elegir comprar no consumibles en la aplicación), pero ahora me pregunto si tiene que aparecer como pagado para que el IAP funcione.

@damialajogun aparece como gratuito porque los usuarios no necesitan pagar para instalar la aplicación

Buenos días a todos,
¿Alguno de ustedes tiene su aplicación de Android que funciona bien con el pago?
Porque conmigo el initConnection no funciona.

Lo hago, usando la última versión. No creo que initConnection haga nada en realidad, solo inicia la conexión, luego necesitas buscar los productos

¿Alguna solución para esto?
Para mí, Android se bloquea antes de iniciar la aplicación. Pero Ios funciona como se esperaba.
Por favor ayuda

Estoy enfrentando (probablemente) el mismo problema.

Agregué dos suscripciones más a mi aplicación, pero solo la anterior funciona.
Cuando intento esperar RNIap.getSubscriptions (), aparece "Google indica que tenemos algún problema para conectarnos al pago".

Cuando intento RNIap.requestSubscription (subId, true) obtengo "No se encontró el sku".

Los skus están registrados en Google Play y los identificadores son correctos, lo verificamos dos veces. Probado en emulador y dispositivo real, usando modos de depuración y liberación.

¿Alguna idea?

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

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

todavía requiere atención

¡Podemos cerrar!

Le sam. 19 déc. 2020 à 11:03, damialajogun [email protected] a
écrit:

Hola, parece que no ha habido actividad en este tema.
recientemente. ¿Se ha solucionado el problema o aún requiere la
la atención de la comunidad? Este problema puede cerrarse si no hay más actividad
ocurre. También puede etiquetar este problema como "Para debate" o "Bueno primero
tema "y lo dejaré abierto. Gracias por sus contribuciones.

todavía requiere atención

-
Recibes esto porque te mencionaron.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/dooboolab/react-native-iap/issues/1040#issuecomment-748451922 ,
o darse de baja
https://github.com/notifications/unsubscribe-auth/AJ2B2AUIRMGWIHZSFYL6SWTSVR3AXANCNFSM4OSLGZSQ
.

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