React-native-iap: Como cancelar manualmente uma compra pendente?

Criado em 29 jul. 2019  ·  8Comentários  ·  Fonte: dooboolab/react-native-iap

Versão do react-native-iap

3.3.7

Versão do react-native

0,59,8

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

Android

Comportamento esperado

quando eu solicito uma compra, então eu valido o recibo no meu servidor, se a validação falhou eu quero poder cancelar a compra manualmente, ao invés da função purchaseUpdatedListener acionada toda vez, caso não chameknowledgepurchase ou consumepurchase.

Comportamento real

ao não terminar a compra, não posso cancelar a compra pendente. No Android, tenho que esperar que ele seja cancelado automaticamente.

Ambiente testado (emulador? Dispositivo real?)

Dispositivo real

Passos para reproduzir o comportamento

Faça uma compra e não chame reconhecimento de compra ou compra de consumo.

1️⃣ good first issue ❓ question 🙏 help wanted 🤖 android

Comentários muito úteis

@hyochan , existe uma funcionalidade como a do iOS, para cancelar uma compra que não foi concluída ligando para finishTransactionIOS e, em seguida, removendo essa compra do histórico de compras. Não sei se existe outra forma de verificar se uma assinatura ainda está ativa, mas o que faço agora é verificar a data de validade da última transação no histórico de recebimento. Portanto, se uma compra não foi concluída, não quero que seja registrada no histórico de compras. Infelizmente, no momento, é exatamente o que está acontecendo. E, ao contrário do Android, a compra incompleta não será cancelada após algum tempo e nunca deixará de ser acionada por purchaseUpdateListener .

Portanto, tenho o mesmo problema no iOS e no Android, preciso cancelar uma compra que não foi concluída. E especificamente no iOS, não ter essa compra sendo registrada no histórico a menos que haja uma forma mais eficiente de verificar a validade de uma assinatura.

Todos 8 comentários

Mesmo o resultado da falha, você ainda deve chamar acknowledgePurchase e consumePurchase para a transação concluída. Você apenas não segue a lógica, como não dar uma recompensa em seu próprio banco de dados. Além disso, você deve consmePurchase para que ele não permaneça em seu aplicativo.

@hyochan se eu fizer isso, o pagamento será aprovado e a conta do usuário será cobrada sem ser recompensada.

@tmjordan Oh, entendo o que você quis dizer. E se você seguir a lógica dando uma recompensa?

@hyochan quando um usuário compra um produto, o recibo fornecido é enviado aos servidores do Google para validar o recibo e obter o status da compra (se o pagamento foi aprovado, ou está pendente, ou cancelado).
Digamos que eu tenha um erro durante o processo de validação que não vem do servidor do Google (meu back-end, por exemplo), então não posso validar o recibo e quero cancelar a compra manualmente em vez de esperar que seja cancelado pelo Google ( durante esse tempo, não posso fazer outra compra) se eu não chamar uma compra de conhecimento ou consuma compra.
Não sei se é possível, talvez seja assim que funciona o processo de compra no google.

Seria bom se pudéssemos cancelar manualmente uma compra que ainda não foi confirmada ou consumida. Nesse cenário, o usuário será reembolsado se o pagamento tiver sido aprovado.
Em vez de ter a mesma compra acionada todas as vezes até ser cancelada pelo Google.

@tmjordan Obrigado pelo seu bom ponto de vista. Parece muito razoável, mas não tenho certeza se pending compras são realmente cobradas. Acho que as compras de pending não devem nem mesmo ser cobradas quando acknowledged e, ao contrário, devem ser removidos. Espero que possamos repassar mais detalhes sobre quaisquer outras experiências.

@hyochan , existe uma funcionalidade como a do iOS, para cancelar uma compra que não foi concluída ligando para finishTransactionIOS e, em seguida, removendo essa compra do histórico de compras. Não sei se existe outra forma de verificar se uma assinatura ainda está ativa, mas o que faço agora é verificar a data de validade da última transação no histórico de recebimento. Portanto, se uma compra não foi concluída, não quero que seja registrada no histórico de compras. Infelizmente, no momento, é exatamente o que está acontecendo. E, ao contrário do Android, a compra incompleta não será cancelada após algum tempo e nunca deixará de ser acionada por purchaseUpdateListener .

Portanto, tenho o mesmo problema no iOS e no Android, preciso cancelar uma compra que não foi concluída. E especificamente no iOS, não ter essa compra sendo registrada no histórico a menos que haja uma forma mais eficiente de verificar a validade de uma assinatura.

Eu gostaria de lidar com um cenário semelhante

  1. Usuário Inicie a compra de um produto (sensível ao tempo). Este produto deve ser devolvido imediatamente
  2. O servidor não devolve o produto. e pode ser tarde para devolver o produto tentando novamente
  3. o purchaseUpdateListener é disparado muitas vezes até que finishTransactionIOS seja chamado, entretanto, este não é o resultado desejável. A transação deve ser cancelada nesta fase.

Existe um método para cancelar a transação.

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

Questões relacionadas

jvandenaardweg picture jvandenaardweg  ·  4Comentários

Gribadze picture Gribadze  ·  4Comentários

schumannd picture schumannd  ·  3Comentários

makarsky picture makarsky  ·  3Comentários

iutin picture iutin  ·  4Comentários