React-native-iap: Não é possível conectar à iTunes Store para usuários de sandbox

Criado em 2 out. 2018  ·  17Comentários  ·  Fonte: dooboolab/react-native-iap

Versão do react-native-iap

2.2.2

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

iOS

Comportamento esperado

await RNIap.buyProduct(MIXED_PACK); não deve falhar

Comportamento real

Recebo o erro Cannot connect to iTunes Store mesmo se usar um usuário sandbox

Ambiente testado (emulador? Dispositivo real?)

Dispositivo real, iPad e iPhone 7

Passos para reproduzir o comportamento

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

📱 iOS 🙏 help wanted

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.

Todos 17 comentários

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

  1. Você pode verificar o recibo de validação no ios, o que explica que a senha é "_Somente usada para recibos que contêm assinaturas auto-renováveis. O segredo compartilhado do seu aplicativo (uma string hexadecimal) ._".
  2. Eu não tentei isso na verdade. Desenvolvi esse recurso para que outros desenvolvedores possam contribuir facilmente, pois estão cientes dessas coisas. No entanto, acho que você pode obter accessToken via console de jogo. Você pode obter isso seguindo o processo.
    Selecione seu aplicativo> Serviços e APIs> "SUA CHAVE DE LICENÇA PARA ESTE APLICATIVO Chave pública RSA codificada em Base64 para incluir em seu binário". referência .

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

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