React-native-iap: [Android] getProducts devuelve siempre una matriz vacía

Creado en 25 abr. 2018  ·  19Comentarios  ·  Fuente: dooboolab/react-native-iap

Versión de react-native-iap

0.3.15

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

Androide

Comportamiento esperado

Obtener todos los productos

Comportamiento real

Todos funcionan bien en iOS, pero getProducts siempre devuelve una matriz vacía en Android.
Creo que es un problema de configuración, sin embargo, seguí cada paso ...

Carga de APK con permiso de facturación / cuenta de comerciante configurada / Crear en la compra de la aplicación ...

🙏 help wanted

Comentario más útil

@vadermemo @martinberbesson Hola ~ ¿Podrías compartir tu código js por itemSkus ? ¿Lo configuró como el siguiente código?

export const PURCHASE_ITEMS = Platform.select({
  ios: [
    'productid_1',
    'productid_2',
  ],
  android: [
    'productid_1',
    'productid_2',
  ],
});

Además, ya no se admite la prueba de borradores de aplicaciones. Por favor, consulte la guía . Asegúrese de publicar su aplicación en el canal alfa o beta.

Todos 19 comentarios

Mismo problema aquí

Mi fragmento:

  RNIap.prepare().then(responsePrepare => {
    console.log("=============>responsePrepare:" + responsePrepare);
    RNIap.getProducts(itemSkus).then(response => {
        this.setState({ items  : response});
        console.log("=============>response:" + JSON.stringify(response));
    });
  });

Mi respuesta en adb.logcat (Android)

208 28473 28524 I ReactNativeJS: Ejecución de la aplicación "testingIap" con appParams: {"rootTag": 11}. __DEV__ === verdadero, las advertencias de nivel de desarrollo están activadas, las optimizaciones de rendimiento están desactivadas
04-25 17: 04: 04.228 1140 1150 I AccountManagerService: getTypesVisibleToCaller: ¿está permitido? cierto
04-25 17: 04: 04.230 1140 2059 I AccountManagerService: getTypesVisibleToCaller: ¿está permitido? cierto
04-25 17: 04: 04.232 24842 24933 I Finsky: [4061] com.google.android.finsky.billing.iab.ab.b (46): com.projectbundle: Cuenta de la primera cuenta - [uuAJBL1tLX2MAj69S-olEslXXXX]
04-25 17: 04: 04.233 28473 28473 D RNIapModule: cliente de facturación listo
04-25 17: 04: 04.303 28473 28524 I ReactNativeJS: =============> responsePrepare: null
04-25 17: 04: 04.308 28473 28524 I ReactNativeJS: =============> responsePrepare: null
04-25 17: 04: 04.328 1140 2107 I AccountManagerService: getTypesVisibleToCaller: ¿está permitido? cierto
04-25 17: 04: 04.330 1140 1896 I AccountManagerService: getTypesVisibleToCaller: ¿está permitido? cierto
04-25 17: 04: 04.339 1140 2095 I AccountManagerService: getTypesVisibleToCaller: ¿está permitido? cierto
04-25 17: 04: 04.340 1140 1679 I AccountManagerService: getTypesVisibleToCaller: ¿está permitido? cierto
04-25 17: 04: 04.343 24842 24854 I Finsky: [4020] com.google.android.finsky.billing.iab.ab.b (46): com.projectbundle: Cuenta de la primera cuenta - [uuAJBL1tLX2MAj69S-olEslXXXX]
04-25 17: 04: 04.347 24842 24853 I Finsky: [4019] com.google.android.finsky.billing.iab.ab.b (46): com.projectbundle: Cuenta de la primera cuenta - [uuAJBL1tLX2MAj69S-olEslXXXX]
04-25 17: 04: 04.626 28473 28525 D RNIapModule: responseCode: 0
04-25 17: 04: 04.628 28473 28525 D RNIapModule: responseCode: 0
04-25 17: 04: 04.669 28473 28524 I ReactNativeJS: =============> respuesta: []
04-25 17: 04: 04.693 28473 28524 I ReactNativeJS: =============> respuesta: []

Pero con iOS obtengo la matriz con el formato de pozo de datos.

PD1 Recibo la recomendación de https://medium.com/@dooboolab/react -native-in-app-purchase-121622d26b67

PD2 "Ayúdame Obi Wan Kenobi, eres mi única esperanza"

Fragmento de Package.json:
"dependencias": {
"reaccionar": "16.3.1",
"react-native": "0.55.3",
"react-native-iap": "^ 0.3.18"
},

@vadermemo @martinberbesson Hola ~ ¿Podrías compartir tu código js por itemSkus ? ¿Lo configuró como el siguiente código?

export const PURCHASE_ITEMS = Platform.select({
  ios: [
    'productid_1',
    'productid_2',
  ],
  android: [
    'productid_1',
    'productid_2',
  ],
});

Además, ya no se admite la prueba de borradores de aplicaciones. Por favor, consulte la guía . Asegúrese de publicar su aplicación en el canal alfa o beta.

Hola @dooboolab

Estos son mis datos
const itemSkus = Platform.select ({
iOS: [
'com.iap.cart',
'com.iap.doublecoins'
],
Android: [
'doble',
'cart_1500'
],
});

Atentamente

PD1 Mi aplicación está en versión alfa, incluso no obtengo los productos.
PD2 Con otros npm, como react-native-billing, puedo obtener los productos :(

@vadermemo esto me

Creo que necesito tener una versión alfa ... Cargar una apk con permiso de facturación no es suficiente

@dooboolab Bueno, si existe algo de ayuda para ti, tal vez sea el siguiente punto:

cuando puse la configuración en react-native-billing, puse en el archivo de recursos "string.xml" el parámetro string name = "RNB_GOOGLE_PLAY_LICENSE_KEY"
pero en react-native-iap no puedo ver este parámetro en acción.

El try-catch que requirió arroja el siguiente registro:

  1. Cambiar mis artículos

const itemSkus = Platform.select ({
iOS: [
'predictorcart_1500',
],
Android: [
'predictorcart_1500',
'android.test.purchased',
'android.test.canceled',
'android.test.refunded',
'android.test.item_unavailable',
],
});

  1. cambio en componentDidMount

    async componentDidMount () {
    tratar {
    espera RNIap.prepare ();
    espere this.getItems ();

    }
    catch (err) {
    console.warn (código de error, mensaje de error);
    }
    }

  2. Cambiar la obtención de datos

    getProductDetails = async () => {
    tratar {
    productos const = aguardan RNIap.getProducts (itemSkus);
    console.log ('=======> Productos ::::', productos);
    this.setState ({productDetails: productos});
    } atrapar (err) {
    console.warn (código de error, mensaje de error);
    }
    }

  3. Poner un botón
    \

  4. Pon la aplicación en el dispositivo
    react-native ejecutar-android --variant = release

6.Finalmente el log es el siguiente:
04-26 12: 53: 11.335 16749 16759 I Finsky: [11707] com.google.android.finsky.billing.iab.ab.b (46): com.projectbundle: Cuenta de la primera cuenta - [uuAJBL1tLX2MAj69S-olEl331212]
04-26 12: 53: 11.401 226 1177 V audio_hw_primary: do_output_standby in
04-26 12: 53: 11.409 20362 20432 D RNIapModule: responseCode: 0
04-26 12: 53: 11.426 226 1177 W audio_hw_primary: do_output_standby.mode: 0
04-26 12: 53: 11.426 226 1177 V audio_hw_primary: do_output_standby in out
04-26 12: 53: 11.427 1140 2106 D PowerManagerService: releaseWakeLockInternal: lock = 87714678 [AudioMix], flags = 0x0, total_time = 3166ms
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: '=======> Products ::::', [{description: 'Descripción de muestra para el producto: android.test.canceled.',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: title: 'Título de muestra',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: localizedPrice: '$ 18.65',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: escriba: 'inapp',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: moneda: 'MXN',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: precio: '18 .65 ',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: productId: 'android.test.canceled'},
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: {description: 'Descripción de muestra para el producto: android.test.item_unavailable.',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: title: 'Título de muestra',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: localizedPrice: '$ 18.65',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: escriba: 'inapp',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: moneda: 'MXN',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: precio: '18 .65 ',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: productId: 'android.test.item_unavailable'},
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: {description: 'Descripción de muestra para el producto: android.test.purchased.',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: title: 'Título de muestra',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: localizedPrice: '$ 18.65',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: escriba: 'inapp',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: moneda: 'MXN',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: precio: '18 .65 ',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: productId: 'android.test.purchased'},
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: {description: 'Descripción de muestra para el producto: android.test.refunded.',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: title: 'Título de muestra',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: localizedPrice: '$ 18.65',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: escriba: 'inapp',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: moneda: 'MXN',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: precio: '18 .65 ',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: productId: 'android.test.refunded'}]

@martinberbesson Tengo una aplicación en versión alfa, ni siquiera yo puedo obtener los productos. Creo que es otra cosa, tal vez una configuración en react-native-iap o google console.

@martinberbesson @dooboolab ¡¡Increíble !!

Hice otra aplicación con los mismos pasos y la aplicación está funcionando en iOS y Android. No puedo creerlo.

No sé cuál es la razón, pero creo que es algo de configuración en el código o en la consola de Google.

PD Estuve esperando 5 horas para obtener el itemSkus correcto.
PD2 La aplicación anterior no consigue itemsSkus incluso con 24 horas.
PD3 @dooboolab Ahora puedes dormir tranquilo. :)
PD4 Desarrollaré el proceso de compra, espero que sea fácil

Atentamente,

@vadermemo Me alegro de que esté funcionando. Además, para el módulo iap más nuevo para Android, que es v3, no es necesario que coloques nada más en string.xml .

Según el n. ° 124, creo que esto todavía está ocurriendo, al menos para las aplicaciones existentes, para las que también sería bueno tener una solución para esto.

Para cualquiera que todavía tenga este problema, primero debe leer https://stackoverflow.com/a/35132936/1374827 y asegurarse de haber cumplido con todos los requisitos descritos en esa publicación.

Si todo eso está bien, verifique que esté llamando a la función adecuada. Para mí, tenía una aplicación en la que solo usaba compras de suscripción dentro de la aplicación, pero estaba llamando por error a RNIap.getProducts y, por supuesto, obtenía una matriz vacía. En su lugar, tuve que llamar RNIap.getSubscriptions y luego se devolvieron las suscripciones.

En la misma línea, asegúrese de llamar a RNIap.buySubscription si está comprando una suscripción, y RNIap.buyProduct si está comprando un producto.

Bien, después de luchar con esto, mi problema resultó ser mi inexperiencia con Android. Había estado jugando con el nombre del paquete en dev y, si bien funcionaba bien en el dispositivo, el nombre del paquete que no se configuraba perfectamente es la razón por la que devolvía una matriz vacía. Después de seguir estos pasos y estos , todo se ve bien.

También obtengo una matriz vacía,
Y estoy confundido con https://developer.android.com/google/play/billing/billing_testing#draft_apps doc, que necesito una cuenta de prueba y agregar un probador, así que cualquiera puede ayudarme con esto.

¡Gracias!

mismo

@bharatidudhjiya @tmjordan Si están enfrentando problemas de configuración, me gustaría que probaran primero el proyecto iap android puro y ver si funciona correctamente. Eso también lo ayudaría a comprender mejor el iap sdk de Android.

@hyochan gracias, es una buena idea. lo haré

@tmjordan Esto es bastante viejo, pero esto podría ayudar a que la configuración básica.

gracias hombre @hyochan

¡Lo resolví! Estoy usando estas versiones,

react-native-iap: ^4.3.0
react-native: 0.60.5

solo hazlo así

const itemSkus = Platform.select({
    ios: [
        '100coins' // just remove bundle id from product id
    ],
    android: [
        '100coins' // just remove bundle id from product id
    ]
});

Asegúrese de tener el nombre de paquete correcto para su aplicación.

y en caso de que lo haya cambiado del comando react-native. todavía no funcionará.

Tienes que hacerlo manualmente y luego limpiar el proyecto usando ./gradlew clean en la carpeta de Android.

después de eso, pruébalo.

Codificación feliz.

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