React-native-iap: RNIap.requestPurchase não está respondendo no iOS

Criado em 13 mai. 2020  ·  11Comentários  ·  Fonte: dooboolab/react-native-iap

Versão do react-native-iap

4.4.8

Versão do react-native

0,61,5

Plataformas que você enfrentou o erro (IOS ou Android ou ambos?)

iOS

Comportamento esperado

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

REQUEST OVER para ser impresso.

Comportamento real

No dispositivo eu uso a conta do testador sandbox, está respondendo e funcionando bem. Mas com qualquer outro dispositivo ou simulador não está respondendo ou resolvendo. Isso é vital, pois durante a revisão do aplicativo, a Apple continua rejeitando meu aplicativo com o motivo de tocar em COMPRAR não está respondendo.

Não há problema com RNIap.getProducts(itemSkus)

Ambiente testado (Emulador? Dispositivo Real?)

Dispositivo real e simulador

Passos para reproduzir o comportamento

 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

Comentários muito úteis

Eu tive o mesmo problema e a sugestão do @Panda313 para adicionar await RNIap.initConnection() em componentDidMount funcionou.
Pena que isso não está melhor documentado...

Todos 11 comentários

Mesmo aqui, no entanto, parece funcionar no Android.

Eu posso ter corrigido adicionando

const resultado = await RNIap.initConnection();
aguardar RNIap.consumeAllItemsAndroid();
console.log('resultado', resultado);

No início de componentDidMount ;

Deixe-me saber se isso ajuda

@hyochan Você encontrou uma solução para isso? Também estou enfrentando o mesmo problema no iOS. É extremamente frustrante e não consigo passar da revisão do aplicativo porque chamar RNIap.requestPurchase não responde com o alerta promovendo o usuário a concordar com os termos da assinatura ou confirmando que a assinatura já está ativa. Se eu forçar o fechamento do aplicativo e tentar novamente, às vezes funciona. Não sei se há um problema com o sandbox ou esta biblioteca.

@smarttouchtechnology Você ligou initConnection ? Isso é necessário a partir de 4.4.5 .

Pode ser difícil para @smarttouchtechnology ler a resposta abaixo que "resolve" o "problema" ;)

Eu tive o mesmo problema e a sugestão do @Panda313 para adicionar await RNIap.initConnection() em componentDidMount funcionou.
Pena que isso não está melhor documentado...

@Panda313 ... Você acabou de me salvar uma noite sem dormir de uma semana de rejeição de maçã

Alguém poderia adicionar isso à documentação para que mais pessoas não se deparem com esse problema? Não tenho certeza da melhor maneira de adicioná-lo.

EDIT: Adicionado aqui. #1088.

Sinta-se à vontade para revisar (não tenho certeza de que fiz certo.)

Eu posso ter corrigido adicionando

const resultado = await RNIap.initConnection();
aguardar RNIap.consumeAllItemsAndroid();
console.log('resultado', resultado);

No início de componentDidMount ;

Deixe-me saber se isso ajuda

Para iOS, não tive nenhuma resposta de requestSubscription . Eu tentei adicionar await RNIap.initConnection(); na frente de RNIap.requestSubscription e funcionou para mim. Agora estou recebendo objetos de compra em listeners na raiz do app. E também avança mais abaixo no código depois de resolver com erro ou com resposta bem-sucedida.

Olá, parece que não houve nenhuma atividade sobre este problema recentemente. O problema foi corrigido ou ainda requer a atenção da comunidade? Esse problema pode ser encerrado se nenhuma outra atividade ocorrer. Você também pode rotular esta questão como "Para discussão" ou "Boa primeira edição" e eu a deixarei em aberto. Obrigado por suas contribuições.

Fechando este problema após um período prolongado de inatividade. Se esse problema ainda estiver presente na versão mais recente, sinta-se à vontade para criar um novo problema com informações atualizadas.

Esta página foi útil?
0 / 5 - 0 avaliações