2.2.2
iOS
await RNIap.buyProduct(MIXED_PACK);
não deve falhar
Recebo o erro Cannot connect to iTunes Store
mesmo se usar um usuário sandbox
Dispositivo real, iPad e iPhone 7
Apenas tente executar esse trecho de código. Li completamente o Blog para criar um ambiente sandbox aqui https://medium.com/@dooboolab/react -native-in-app-purchase-121622d26b67
Acho que é um link antigo. https://developer.apple.com/system-status/
@ raynor85 Você ainda está enfrentando esse problema?
@dooboolab Ainda estou enfrentando o problema, mas acho que é um problema da Apple. Tentei comprar um produto com meu usuário Apple ID pessoal (que era usado anteriormente para compras reais) e consegui obter uma resposta bem-sucedida após executar RNIap.buyProduct(“my.sku.product”)
.
O engraçado é que no modal que aparece pouco antes da compra está escrito environment: sandbox
, provavelmente porque eu estava executando uma compilação de desenvolvimento e, o mais importante, acho que não fui cobrado pela compra. Verificando o histórico de compras, não há nada relacionado a isso, e se eu executar RNIap.getAvailablePurchases()
e RNIap.getPurchaseHistory()
, recebo respostas vazias de ambos. Por que é que?
@dooboolab você pode me ajudar com isso? Existe uma razão pela qual, com um ID de maçã real, eu consegui comprar um consumível sem ser cobrado, mas RNIap.getPurchaseHistory()
é sempre um array vazio?
@ raynor85 Você conectou o resultado da transação ao seu servidor?
@dooboolab Eu tentei usar RNIap.buyProduct(sku)
e RNIap.buyProductWithoutFinishTransaction(sku)
com RNIap.finishTransaction()
, e para ambos usei RNIap.validateReceiptIos(receiptBody, true);
, com const receiptBody = {'receipt-data': purchase.transactionReceipt, password: '[apple-id-password]'};
, mas sem sorte. Também é importante notar que qualquer que seja a senha que eu coloquei em '[apple-id-password]', validateReceiptIos
resposta é sempre a mesma.
Isto é um exemplo:
{ receipt:
{ receipt_type: 'ProductionSandbox',
adam_id: 0,
app_item_id: 0,
bundle_id: 'io.fantastec.swap',
application_version: '8',
download_id: 0,
version_external_identifier: 0,
receipt_creation_date: '2018-10-09 19:16:09 Etc/GMT',
receipt_creation_date_ms: '1539112569000',
receipt_creation_date_pst: '2018-10-09 12:16:09 America/Los_Angeles',
request_date: '2018-10-09 19:16:10 Etc/GMT',
request_date_ms: '1539112570436',
request_date_pst: '2018-10-09 12:16:10 America/Los_Angeles',
original_purchase_date: '2013-08-01 07:00:00 Etc/GMT',
original_purchase_date_ms: '1375340400000',
original_purchase_date_pst: '2013-08-01 00:00:00 America/Los_Angeles',
original_application_version: '1.0',
in_app:
[ { quantity: '1',
product_id: 'basic_pack',
transaction_id: '1000000455003078',
original_transaction_id: '1000000455003078',
purchase_date: '2018-10-09 19:16:09 Etc/GMT',
purchase_date_ms: '1539112569000',
purchase_date_pst: '2018-10-09 12:16:09 America/Los_Angeles',
original_purchase_date: '2018-10-09 19:16:09 Etc/GMT',
original_purchase_date_ms: '1539112569000',
original_purchase_date_pst: '2018-10-09 12:16:09 America/Los_Angeles',
is_trial_period: 'false' } ] },
status: 0,
environment: 'Sandbox' }
Como você deve ter notado, receipt_type: 'ProductionSandbox'
, que deve ser causado pelo fato de eu estar usando um nome de usuário Apple ID real em um ambiente sandbox (não consigo criar um usuário sandbox de teste funcional, obrigado Apple por fazer nossa vida um inferno).
@ raynor85 Na verdade, não sei por que isso está acontecendo. Eu posso ter que tentar isso em um futuro próximo. Além disso, você tentou testar isso durante o voo de teste? Se você não enviou o aplicativo para test flight
, acho que isso pode acontecer. Além disso, concordo com sua última citação!
Não tentei fazer upload do aplicativo no testFlight, porque gostaria de ter uma versão dev para trabalhar antes de fazer o upload de uma versão beta quebrada. Talvez o codepush possa ser útil neste caso. De qualquer forma, você pode explicar o significado de const receiptBody = {'receipt-data': purchase.transactionReceipt, password: '[apple-id-password]'}
? Tentei colocar qualquer senha e ainda obtenho o mesmo resultado. password
representa a senha da apple id do usuário? Se for esse o caso, como posso obter essas informações sem pedir ao usuário para inseri-las?
Além disso, que tal accessToken
necessários para validateReceiptAndroid
? Eu verifiquei a postagem incrível sobre estouro de pilha que você mencionou, mas não há um guia claro sobre como posso obter o accessToken. Você recomenda uma maneira bem simples de obter esse access_token sem necessariamente criar um servidor? O documento diz que é possível fazer a verificação de recebimento diretamente no dispositivo: https://developer.android.com/google/play/billing/billing_library_overview
@ raynor85
accessToken
via console de jogo. Você pode obter isso seguindo o processo.Além disso, tente 2.3.5
como uma validação de recibo no Android. O parâmetro estava enviando identidade incorreta em transactionReceipt
para o Android. Espero que você possa praticar um pouco com este e compartilhar sua história de sucesso em nosso leia-me. Felicidades!
@ raynor85 Também não consigo obter uma resposta de purchaseHistory () ou getAvailablePurchases (). Estou me perguntando se essas funções não funcionarão até que o aplicativo esteja em produção. @JJMoon Essas funções devem funcionar no modo sandbox?
Percebi isso, eu não estava chamando "finishTransaction ()", então fiquei preso em um loop na minha conta de teste de sandbox "A compra foi bem-sucedida", mas não processou totalmente do lado da Apple, eles chamaram de loop morto.
Este tópico saiu um pouco do caminho, mas estou vendo o mesmo erro original ao executar o aplicativo por meio do xcode no meu dispositivo com uma conta sandbox ( Error: Cannot connect to iTunes Store
). Estou no 2.3.19, que acredito ser o mais recente.
Uma observação da apple em relação a este erro: https://developer.apple.com/library/archive/technotes/tn2413/_index.html#//apple_ref/doc/uid/DTS40016228 -CH1-ERROR_MESSAGES-CANNOT_CONNECT_TO_ITUNES_STORE
Acho que, no meu caso, recebo este erro ao tentar assinar um produto quando já estou assinando. Ele também aparece quando estou inscrito e tento alterar minha inscrição (iniciando uma nova solicitação RNIAP.buySubscription
.
Para qualquer outra pessoa que tenha problemas, observe também "Seu aplicativo está sendo executado no Simulador, que não oferece suporte para compra dentro do aplicativo." é outro motivo pelo qual você pode receber esse erro. Deve fazer isso em um dispositivo real.
Acho que, no meu caso, recebo este erro ao tentar assinar um produto quando já estou assinando. Ele também aparece quando estou inscrito e tento alterar minha inscrição (iniciando uma nova solicitação RNIAP.buySubscription.
Então, o que você deve fazer neste caso? Como posso saber se o produto foi realmente comprado pelo usuário? .. Tentei restaurar as compras, mas nada parece mudar
Comentários muito úteis
Para qualquer outra pessoa que tenha problemas, observe também "Seu aplicativo está sendo executado no Simulador, que não oferece suporte para compra dentro do aplicativo." é outro motivo pelo qual você pode receber esse erro. Deve fazer isso em um dispositivo real.