React-native-iap: iOS: esta compra no aplicativo já foi comprada.

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

Versão do react-native-iap

"react-native-iap": "^2.0.3",

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

iOS

Comportamento esperado

Faz uma compra

const compra = espera RNIap.buyProductWithoutFinishTransaction (productId)
const {transactionReceipt, purchaseToken} = compra
sendToServer (transactionReceipt, {
onSuccess: () => {
RNIap.finishTransaction ()
RNIap.consumeAllItems ()
}})

Comportamento real

Diálogo: “Esta compra dentro do aplicativo já foi comprada”. Isso está acontecendo apenas para um SKU, outros estão funcionando bem. Acho que o aplicativo está em um estado ruim e não vejo uma maneira de corrigi-lo. Eu cansei de chamar finishTransaction e consumeAllItems na inicialização, mas isso não resolveu. Posso comprar outros SKUs várias vezes sem problemas. Nada é retornado para getPurchaseHistory .

Ambiente testado (emulador? Dispositivo real?)

Dispositivo (sandbox)

Passos para reproduzir o comportamento

Não tenho certeza.

📱 iOS 🙏 help wanted

Comentários muito úteis

Eu estava chamando esse código nativo.

Quando o chamei em didFinishLaunchingWithOptions currentQueue.transactions estava vazio, mas chamá-lo em applicationDidBecomeActive funcionou.

Funcionou:

- (void)applicationDidBecomeActive:(UIApplication *)application
{
  // take current payment queue
  SKPaymentQueue* currentQueue = [SKPaymentQueue defaultQueue];
  [currentQueue restoreCompletedTransactions];
  // finish ALL transactions in queue
  //  [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
  [currentQueue.transactions enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    [currentQueue finishTransaction:(SKPaymentTransaction *)obj];
  }]; 
}

Não sei como, mas talvez possamos expor essa funcionalidade na biblioteca?

Todos 16 comentários

@siderakis Sim, estranho. Eu já corrigi esse problema como informado no stackoverflow, mas ainda ocorre em alguns dispositivos. Também estou disposto a consertar isso. Qual dispositivo você está usando?

@siderakis Isso pode resolver seu aplicativo em mau estado, eu acho. Você poderia tentar?

Eu tentei e não funcionou. Eu também reinstalei o aplicativo e isso não ajudou. Ele está sendo executado em um iPad.

Eu defino um ponto de interrupção e parece que currentQueue.transactions está vazio

De SKPaymentQueue.h

// Array of unfinished SKPaymentTransactions.  Only valid while the queue has observers.  Updated asynchronously.
@property(nonatomic, readonly) NSArray<SKPaymentTransaction *> *transactions NS_AVAILABLE_IOS(3_0);

<strong i="6">@end</strong>

Talvez eu tenha ligado muito cedo

Chamei o código mais tarde na execução do programa e ele corrigiu o problema.

@siderakis Desculpe por incomodar. Mas, qual código você chamou?
O array transactions é uma propriedade, não um método, que não está em nosso código.
Você quis dizer finishTransaction ?

Eu estava chamando esse código nativo.

Quando o chamei em didFinishLaunchingWithOptions currentQueue.transactions estava vazio, mas chamá-lo em applicationDidBecomeActive funcionou.

Funcionou:

- (void)applicationDidBecomeActive:(UIApplication *)application
{
  // take current payment queue
  SKPaymentQueue* currentQueue = [SKPaymentQueue defaultQueue];
  [currentQueue restoreCompletedTransactions];
  // finish ALL transactions in queue
  //  [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
  [currentQueue.transactions enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    [currentQueue finishTransaction:(SKPaymentTransaction *)obj];
  }]; 
}

Não sei como, mas talvez possamos expor essa funcionalidade na biblioteca?

@siderakis Sim. Isso é o que eu quis dizer na edição # 259.
Acho que a ação pode estar em qualquer lugar após applicationDidBecomeActive.
Então, vou expor esse método ao lado do JS, que o usuário pode chamá-lo a qualquer momento.
Obrigado pelo seu conselho.

@JJMoon , tenho o mesmo problema, quando podemos esperar uma resolução para expor um método como você mencionou acima. Obrigado.

@sivrihuseyin O problema é bem conhecido agora. Faremos o patch neste fim de semana. Obrigado a todos os emissores.

Lançamos a solução esperada em 2.2.0 . Você poderia seguir o readme e tentar esta linha de códigos?

Olá Hyo Chan,

Obrigado pela informação.

Instalei a versão 2.2.0 e tentei o código. Infelizmente, o
o problema ainda não foi corrigido. acho que a função * clearTransaction * não
foram exportados. No ambiente reactNative não há clearTransaction
função dentro do RNIap.

Verifiquei o arquivo index.d.ts e não consegui ver a função como
clearTransaction neste. Arquivo.

Atenciosamente,

Huseyin

No domingo, 16 de setembro de 2018 às 14h25 Hyo Chan Jang [email protected]
escreveu:

Fechado # 257 https://github.com/dooboolab/react-native-iap/issues/257
via a5f225d
https://github.com/dooboolab/react-native-iap/commit/a5f225d470af0a85417325d24357667e54aa7078
.

-
Você está recebendo isso porque foi mencionado.
Responda a este e-mail diretamente, visualize-o no GitHub
https://github.com/dooboolab/react-native-iap/issues/257#event-1848183078 ,
ou silenciar o tópico
https://github.com/notifications/unsubscribe-auth/AiH7bOp96EzsoX82UVxKHK2LkN7PNWVAks5ubjUogaJpZM4WmG_0
.

Olá Hyo Chan,

Lamento pela informação errada. ESTÁ CORRIGIDO. Não tem problema
mais.

Obrigado por sua resposta rápida e ótima solução.

Atenciosamente,

Huseyin

Domingo, 16 de setembro de 2018 às 14h56 Huseyin Sivri [email protected]
escreveu:

Olá Hyo Chan,

Obrigado pela informação.

Instalei a versão 2.2.0 e tentei o código. Infelizmente, o
o problema ainda não foi corrigido. acho que a função * clearTransaction * tem
não foi exportado. No ambiente reactNative não há clearTransaction
função dentro do RNIap.

Verifiquei o arquivo index.d.ts e não consegui ver a função como
clearTransaction neste. Arquivo.

Atenciosamente,

Huseyin

No domingo, 16 de setembro de 2018 às 14h25 Hyo Chan Jang [email protected]
escreveu:

Fechado # 257 https://github.com/dooboolab/react-native-iap/issues/257
via a5f225d
https://github.com/dooboolab/react-native-iap/commit/a5f225d470af0a85417325d24357667e54aa7078
.

-
Você está recebendo isso porque foi mencionado.
Responda a este e-mail diretamente, visualize-o no GitHub
https://github.com/dooboolab/react-native-iap/issues/257#event-1848183078 ,
ou silenciar o tópico
https://github.com/notifications/unsubscribe-auth/AiH7bOp96EzsoX82UVxKHK2LkN7PNWVAks5ubjUogaJpZM4WmG_0
.

Foi corrigido com a versão 2.2.0 aplicando a função clearTransaction. Obrigado
@JJMoon

Para Googlers futuros que farão upgrade da v2 para v3-5, achei isso útil

https://github.com/dooboolab/react-native-iap/blob/de0fc084966fc4d36a9c45f4e27cb166243d4319/README_DEPRECATED.md

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