React-native-iap: RNIap.requestPurchase no responde en iOS

Creado en 13 may. 2020  ·  11Comentarios  ·  Fuente: dooboolab/react-native-iap

Versión de react-native-iap

4.4.8

Versión de react-native

0.61.5

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

iOS

Comportamiento esperado

await RNIap.requestPurchase(sku, false)
console.log('REQUEST OVER') 

SOLICITAR MÁS para imprimir.

Comportamiento real

En el dispositivo que uso la cuenta del probador de sandbox, responde y funciona bien. Pero con cualquier otro dispositivo o simulador no responde ni resuelve. Esto es vital ya que durante la revisión de la aplicación, Apple sigue rechazando mi aplicación con el motivo de tocar COMPRAR y no responde.

No hay problema con RNIap.getProducts(itemSkus)

Entorno probado (¿Emulador? ¿Dispositivo real?)

Dispositivo Real y Simulador

Pasos para reproducir el comportamiento

 async componentDidMount() {
    RNIap.getProducts(itemSkus)
      .then((products) => {
        this.setState({ products: products })
      })
      .catch((error) => {
        console.log(error.message)
      })
  }
requestPurchase = async (sku) => {
    try {
      await RNIap.requestPurchase(sku, false)
      console.log('REQUESTED OVER')
    } catch (err) {
      console.warn(err.code, err.message)
    }
}

render() {
 const { products } = this.state
 return (
  <View>
    {products.map((p, i) => { return (
       <TouchableWithoutFeedback onPress={() => this.requestPurchase(p.productId)}>
          <Text> BUY </Text>
       </TouchableWithoutFeedback> ) })}
 </View>)
🚶🏻 stale

Comentario más útil

Tuve el mismo problema y la sugerencia de @ Panda313 de agregar await RNIap.initConnection() en componentDidMount funcionó.
Lástima que no esté mejor documentado...

Todos 11 comentarios

Lo mismo aquí, sin embargo, parece funcionar en Android.

Puede que lo haya arreglado añadiendo

const resultado = esperar RNIap.initConnection();
esperar RNIap.consumeAllItemsAndroid();
consola.log('resultado', resultado);

Al principio de componentDidMount ;

Déjame saber si eso ayuda

@hyochan ¿Ha encontrado una solución a esto? También estoy experimentando el mismo problema en iOS. Es extremadamente frustrante y no puedo pasar la revisión de la aplicación porque llamar a RNIap.requestPurchase no responde con la alerta, ya sea promoviendo al usuario para que acepte los términos de la suscripción o confirmando que la suscripción ya está activa. Si fuerzo el cierre de la aplicación y lo intento de nuevo, a veces funciona. No sé si hay un problema con el sandbox o esta biblioteca.

@smarttouchtechnology ¿Ha llamado a initConnection ? Esto es necesario desde 4.4.5 .

Puede ser difícil para @smarttouchtechnology leer la respuesta a continuación que "resuelve" el "problema";)

Tuve el mismo problema y la sugerencia de @ Panda313 de agregar await RNIap.initConnection() en componentDidMount funcionó.
Lástima que no esté mejor documentado...

@Panda313 ... Me acabas de salvar 1 semana de insomnio de rechazo a la manzana

¿Alguien podría agregar esto a la documentación para que más personas no se encuentren con este problema? No estoy seguro de cuál es la mejor manera de agregarlo.

EDITAR: Agregado aquí. #1088.

Siéntase libre de revisar (no estoy seguro de haberlo hecho bien).

Puede que lo haya arreglado añadiendo

const resultado = esperar RNIap.initConnection();
esperar RNIap.consumeAllItemsAndroid();
consola.log('resultado', resultado);

Al principio de componentDidMount ;

Déjame saber si eso ayuda

Para iOS, no obtuve ninguna respuesta de requestSubscription . Intenté agregar await RNIap.initConnection(); delante de RNIap.requestSubscription y funcionó para mí. Ahora recibo objetos de compra en oyentes en la raíz de la aplicación. Y también avanza más abajo en el código después de que se resuelve por error o con una respuesta exitosa.

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.

Cerrando este problema después de un período prolongado de inactividad. Si este problema aún está presente en la última versión, no dude en crear un nuevo problema con información actualizada.

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