React-native-iap: Não permite recomprar item Android na conta de teste

Criado em 13 abr. 2018  ·  16Comentários  ·  Fonte: dooboolab/react-native-iap

Versão do react-native-iap

0.3.10

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

Android

Comportamento esperado

Devo ser capaz de recomprar um item quantas vezes eu precisar, já que estou apenas testando

Comportamento real

Devoluções

Error: You already own this item.
    at createErrorFromErrorData (59522b9c-ca17-4e00-9e00-05cc989b1199:2016)
    at 59522b9c-ca17-4e00-9e00-05cc989b1199:1968
    at MessageQueue.__invokeCallback (59522b9c-ca17-4e00-9e00-05cc989b1199:2410)
    at 59522b9c-ca17-4e00-9e00-05cc989b1199:2155
    at MessageQueue.__guardSafe (59522b9c-ca17-4e00-9e00-05cc989b1199:2323)
    at MessageQueue.invokeCallbackAndReturnFlushedQueue (59522b9c-ca17-4e00-9e00-05cc989b1199:2154)
    at t (RNDebuggerWorker.js:1)

Passos para reproduzir o comportamento

Compre um item mais de uma vez usando uma conta de teste

🙏 help wanted

Comentários muito úteis

Eu estava tendo o mesmo problema que @ilyakar e, usando o código abaixo, consegui limpar a compra de não consumíveis e testá-la novamente.


async componentDidMount() {
    const { itemSkus } = this.props;
    try {
      const result = await RNIap.initConnection()
      console.log('initiated connection?', result)
      const consumed = await RNIap.consumeAllItems();
      console.log('consumed all items?', consumed)
      let products = await RNIap.getProducts(itemSkus);
      console.log('loaded products', products)
    } catch (err) {
      console.warn(err);
    }
  };

Todos 16 comentários

@ilyakar Este é um produto consumível? Você deve consumi-lo para recomprá-lo. Leia alguns guias sobre como o IAP funciona no Android.

Olá @dooboolab , não é um produto consumível. Os usuários têm para sempre. Existe uma maneira de restaurar o produto, por isso é bom informar aos usuários na produção que não podem comprar o mesmo produto novamente, pois já o compraram. Mas, para fins de teste, fica muito desconfortável ter que usar uma conta diferente cada vez que todas as compras são compradas.

Eu não acho que tive esse problema em 0.2.17

@ilyakar Ah .. Desculpe, eu estava confuso. Na verdade, se for non-consumable produto, você não pode recomprá-lo. Se isso fosse possível em 0.2.17 isso deve estar funcionando de forma inadequada. Somente produtos consumíveis podem recomprá-lo. É o mesmo em ambas as plataformas (iOS e Android). Se o usuário quiser restaurar o item, ele terá que fazê-lo opcionalmente, mas como em LINK , ele não cobrará do usuário novamente. Portanto, se você estiver projetando produtos no aplicativo que deseja cobrar dos usuários através da recompra, acho que você deve criar consumable produto.

@ilyakar Recebi feedback do meu amigo desenvolvedor e ele também enfrentou o mesmo problema. Portanto, eu vim com a solução para usar o método refreshItems que ocorre apenas em android . Você pode usar isso em [email protected] . Tente usá-lo após o método prepare . Meu amigo estava enfrentando esse problema porque não conseguia encontrar a ficha do produto comprado para consumir. Portanto, este method é apenas para sua comodidade se você não se preocupa com o histórico de compras que depende de playstore . Quando você tem seu próprio back-end para coletar o histórico de compras, isso o ajudará a resolver o problema. Eu tenho que dar uma olhada neste mais difícil. Além disso, seguir readme ajudaria você. Obrigado pelo seu relatório!

PS: Acho que o método acima também funcionará em non-consumable product. Além disso, este artigo o ajudará a entender o que refeshItems resolveria você.

Acho que isso já está resolvido, pois não acho que o IAP funciona com conta de teste

E a solução de @dooboolab de refreshItems é o caminho a percorrer

Uma pergunta noob @dooboolab, pois só implementei o IAP uma vez em um aplicativo Android, mas nunca tentei se funciona

Podemos comprar um produto sem gastar nenhum dinheiro como $ 0❓

Sim, @ deadcoder0904 , esse é todo o conceito de contas de teste Android (https://developer.android.com/google/play/billing/billing_testing.html). Que funcionam bem com o plug-in, mas, como indiquei, você não pode fazer a mesma compra duas vezes.

@ilyakar Você está dizendo que ainda não está funcionando. Você tentou ligar para refreshItems após comprar o produto? Conforme descrito aqui , isso pode causar algum atraso na playstore. No entanto, você pode forçar o consumo do produto para poder recomprá-lo novamente. Também estou curioso para saber por que isso funciona .. Também tome cuidado se você confia nas compras no histórico do Google Play e não na coleta em seu backend.

Olá @dooboolab , só estava respondendo a @ deadcoder0904 com meu conhecimento anterior. Infelizmente, não tentei sua solução e provavelmente não tentarei por algum tempo, pois não é uma solução urgente. Mas eu vou deixar você saber no futuro quando eu tiver.

@ilyakar tenha cuidado ao usar refreshItems porque irá consumir todos os produtos que o usuário comprou. Você só pode usá-lo se não se importar com as informações armazenadas na playstore porque você tem seu servidor won. Além disso, esse problema costuma ocorrer como eu postei 13 dias atrás a partir daqui , se o usuário reembolsou o item, ele não pode recomprar o mesmo item por 24 horas.

Eu estava tendo o mesmo problema que @ilyakar e, usando o código abaixo, consegui limpar a compra de não consumíveis e testá-la novamente.


async componentDidMount() {
    const { itemSkus } = this.props;
    try {
      const result = await RNIap.initConnection()
      console.log('initiated connection?', result)
      const consumed = await RNIap.consumeAllItems();
      console.log('consumed all items?', consumed)
      let products = await RNIap.getProducts(itemSkus);
      console.log('loaded products', products)
    } catch (err) {
      console.warn(err);
    }
  };

@TylerNoblett Esta solução não está funcionando no momento.

  • Tentei com consumeAllItemsAndroid vez de consumeAllItems .
    Qualquer ajuda adicional é apreciada.

A saída do console é:

setUpDeveloperTools.js:73 TypeError: _reactNativeIap.default.consumeAllItems is not a function
    at loadPurchases$ (NewGameScreen.js:167)
    at tryCatch (runtime.js:45)
    at Generator.invoke [as _invoke] (runtime.js:271)
    at Generator.prototype.<computed> [as next] (runtime.js:97)
    at tryCatch (runtime.js:45)
    at invoke (runtime.js:135)
    at runtime.js:145
    at tryCallOne (core.js:37)
    at core.js:123
    at JSTimers.js:289

Sobre:

    "react": "16.9.0",
    "react-native": "0.61.3",
    "react-native-iap": "^4.3.0",

@tulpn Parece que você não instalou corretamente nosso módulo, pois consumeAllItemsAndroid deve estar funcionando bem.

@hyochan Não funcionou para mim.

@ root-ai Qual versão você está usando? Além disso, consulte o código que fornecemos em example também.

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