React-native-iap: purchaseUpdatedListener sendo chamado várias vezes, às vezes mais de 20 vezes

Criado em 8 set. 2020  ·  12Comentários  ·  Fonte: dooboolab/react-native-iap

Versão do react-native-iap

"react-native-iap": "^ 4.5.3"

Versão do react-native

"react-native": "0.62.0"

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

iOS (ainda não testei no Android)

Comportamento esperado

purchaseUpdatedListener só deve ser chamado quantas vezes o componente for montado

Comportamento real

purchaseUpdatedListener foi chamado 20 vezes em alguns segundos, de vez em quando, quando eu abro o aplicativo, ele é chamado várias vezes

Ambiente testado (emulador? Dispositivo real?)

Dispositivo real, ambiente sandbox

Passos para reproduzir o comportamento

Siga as instruções conforme a página principal

Atualmente, tenho purchaseUpdatedListener sendo anexado a um ouvinte em componentDidMount (), às vezes, quando eu abro meu aplicativo, ele dispara várias vezes. Isso está acontecendo em txns que chamei de finishTransaction on. Alguém está vendo algo assim?

🕵️‍♂️ need more investigation 🙏 help wanted 🤖 android

Comentários muito úteis

Mesmo aqui. Em cada evento de renovação automática, recebo a assinatura de renovação automática real e alguns segundos depois recebo um grande pedaço de 135 objetos de compra de purchaseUpdatedListener . Sinto que esse é todo o meu histórico de compras. Tentei chamar finishTransaction e finishTransactionIOS para consumir as transações, mas isso não mudou nada.

No próximo evento de renovação automática, essa grande parte das transações está aumentando (136, 137, ...). As transações são apenas minhas assinaturas de renovação automática. Nenhum dos meus produtos consumíveis / não consumíveis aparece na lista.

Todos 12 comentários

O mesmo para mim, mas eu chamo o fluxo de compra em ação

const { productId } = args
purchaseUpdatedListener(async (purchase) => {
    if (!purchase.transactionReceipt) {
        Alert("Error")
    }
    ...
})
purchaseErrorListener(error => {
    ...
})
await requestPurchase(productId, false)

Tenho 4 produtos de teste e recebo purchaseUpdatedListener 4 vezes, mas a compra foi solicitada apenas para um deles

Tentei concluir essas transações, mas ainda assim várias chamadas

O item é uma renovação automática? Acho que o que está acontecendo é porque está na caixa de areia o período de renovação é de apenas 5 minutos para minha assinatura mensal. Então, a apple enviará um evento a cada renovação, então se o aplicativo foi fechado por 10 minutos, são 2 notificações que receberei quando o aplicativo for aberto.

Alguém pode confirmar que esse é o comportamento esperado para receber notificações em uma renovação automática e não apenas na compra?

Minha compra é consumível uma vez

Mesmo aqui. Em cada evento de renovação automática, recebo a assinatura de renovação automática real e alguns segundos depois recebo um grande pedaço de 135 objetos de compra de purchaseUpdatedListener . Sinto que esse é todo o meu histórico de compras. Tentei chamar finishTransaction e finishTransactionIOS para consumir as transações, mas isso não mudou nada.

No próximo evento de renovação automática, essa grande parte das transações está aumentando (136, 137, ...). As transações são apenas minhas assinaturas de renovação automática. Nenhum dos meus produtos consumíveis / não consumíveis aparece na lista.

Mesmo aqui, confirmo que ele liga para o listener a mesma quantidade de vezes que o número de compras no histórico de compras.

Eu tenho alguns problemas. Isso está acontecendo apenas quando a assinatura está habilitada.

Tive uma experiência semelhante com o iOS 14.

Meu aplicativo vende uma assinatura de renovação automática.
Acho que esse problema ocorreu desde que comprei a mesma assinatura novamente.

O link a seguir pode ser relevante para este problema.
https://developer.apple.com/forums/thread/659529

dê uma olhada neste post
o problema é que o finishTransaction e o finishTransactionIOS não funcionam para iOS agora, eles sempre retornam indefinidos, de modo que você não pode terminar a transação e eles travaram na transação pendente. Quando você abre seu aplicativo, TODAS as transações pendentes serão tratadas em purchaseUpdatedListener ... é por isso que você obteve mais de 20 vezes.
: (((alguém consertar isso plsssssss

dê uma olhada neste post
o problema é que o finishTransaction e o finishTransactionIOS não funcionam para iOS agora, eles sempre retornam indefinidos, de modo que você não pode terminar a transação e eles travaram na transação pendente. Quando você abre seu aplicativo, TODAS as transações pendentes serão tratadas em purchaseUpdatedListener ... é por isso que você obteve mais de 20 vezes.
: (((alguém consertar isso plsssssss

https://github.com/dooboolab/react-native-iap/issues/1160#issuecomment -716525603
Eu postei uma resposta aqui e atualmente é esperado que finishTransaction não resolva a promessa.
Precisamos verificar se ele realmente termina a transação, colocando log no lado iOS e verificar se ele insere uma instrução if .

Estou vendo o mesmo mencionado aqui: https://github.com/dooboolab/react-native-iap/issues/1172#issuecomment -721676878.

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