React-native-iap: No se puede conectar a iTunes Store para usuarios de sandbox

Creado en 2 oct. 2018  ·  17Comentarios  ·  Fuente: dooboolab/react-native-iap

Versión de react-native-iap

2.2.2

Plataformas a las que se enfrentó el error (¿IOS o Android o ambos?)

iOS

Comportamiento esperado

await RNIap.buyProduct(MIXED_PACK); no debería fallar

Comportamiento real

Recibo el error Cannot connect to iTunes Store incluso si uso un usuario de espacio aislado

Entorno probado (¿Emulador? ¿Dispositivo real?)

Dispositivo real, iPad y iPhone 7

Pasos para reproducir el comportamiento

Intenta ejecutar ese fragmento de código. He leído detenidamente el Blog para crear un entorno sandbox aquí https://medium.com/@dooboolab/react -native-in-app-purchase-121622d26b67

📱 iOS 🙏 help wanted

Comentario más útil

Para cualquier otra persona que tenga problemas, también tenga en cuenta "Su aplicación se está ejecutando en el Simulador, que no admite la compra desde la aplicación". es otra razón por la que puede recibir este error. Debe hacer esto en un dispositivo real.

Todos 17 comentarios

Creo que es un enlace antiguo. https://developer.apple.com/system-status/

@ raynor85 ¿

@dooboolab Todavía me enfrento al problema, pero creo que es un problema de Apple. Intenté comprar un producto con mi usuario de ID de Apple personal (que se ha utilizado anteriormente para compras reales) y pude obtener una respuesta exitosa después de ejecutar RNIap.buyProduct(“my.sku.product”) .
Lo curioso es que en el modal que aparece justo antes de la compra está escrito environment: sandbox , probablemente porque estaba ejecutando una compilación de desarrollo y, lo más importante, creo que no me cobraron nada por la compra. Al verificar el historial de compras, no hay nada relacionado con eso, y si ejecuto RNIap.getAvailablePurchases() y RNIap.getPurchaseHistory() , obtengo respuestas vacías de ambos. ¿Porqué es eso?

@dooboolab, ¿puedes ayudarme con eso? ¿Hay alguna razón por la que con una ID de Apple real pude comprar con éxito un consumible sin que me cobren, pero RNIap.getPurchaseHistory() siempre es una matriz vacía?

@ raynor85 ¿

@dooboolab He intentado usar RNIap.buyProduct(sku) y RNIap.buyProductWithoutFinishTransaction(sku) con RNIap.finishTransaction() , y para ambos he usado RNIap.validateReceiptIos(receiptBody, true); , con const receiptBody = {'receipt-data': purchase.transactionReceipt, password: '[apple-id-password]'}; , pero sin suerte. También vale la pena señalar que cualquiera que sea la contraseña que coloque en '[apple-id-password]', la respuesta validateReceiptIos es siempre la misma.
Esto es un ejemplo:

{ 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 habrás notado, receipt_type: 'ProductionSandbox' , que debería deberse al hecho de que estoy usando un nombre de usuario de ID de Apple real en un entorno de zona de pruebas (no puedo crear un usuario de zona de pruebas de prueba, gracias Apple por hacer nuestra vida un infierno viviente).

@ raynor85 En realidad, no sé por qué está pasando esto. Puede que tenga que probar esto en un futuro próximo. Además, ¿intentó probar esto a través del vuelo de prueba? Si no ha subido la aplicación a test flight , creo que puede suceder. Además, ¡estoy de acuerdo con tu última cotización!

No he intentado cargar la aplicación en testFlight, porque me gustaría tener una versión de desarrollo con la que trabajar antes de cargar potencialmente una versión beta rota. Quizás codepush podría ser útil en este caso. De todos modos, ¿podría explicar el significado de const receiptBody = {'receipt-data': purchase.transactionReceipt, password: '[apple-id-password]'} ? Intenté poner cualquier contraseña y todavía obtengo el mismo resultado. ¿ password representa la contraseña de id de Apple del usuario? Si ese es el caso, ¿cómo puedo obtener esa información sin pedirle al usuario que la inserte?

Además, ¿qué pasa con accessToken necesarios para validateReceiptAndroid ? He revisado la increíble publicación sobre el desbordamiento de pila que mencionaste, pero no hay una guía clara sobre cómo puedo obtener el accessToken, ¿me recomiendas una forma muy simple de obtener ese access_token sin necesariamente construir un servidor? El documento dice que es posible realizar la verificación de recepción directamente en el dispositivo: https://developer.android.com/google/play/billing/billing_library_overview

@ raynor85

  1. Puede verificar la validación del recibo en ios, que explica que la contraseña "_Sólo se usa para recibos que contienen suscripciones renovables automáticamente. El secreto compartido de su aplicación (una cadena hexadecimal) ._".
  2. En realidad, no he probado esto. He desarrollado esta función para que otros desarrolladores contribuyan fácilmente que están al tanto de estas cosas. Sin embargo, creo que puedes obtener accessToken través de la consola de juegos. Puede obtener esto siguiendo el proceso.
    Seleccione su aplicación> Servicios y API> "SU LICENCIA DE LICENCIA PARA ESTA APLICACIÓN Clave pública RSA codificada en Base64 para incluir en su binario". referencia .

Además, intente 2.3.5 como una validación de recibo en Android. El parámetro enviaba una identidad incorrecta en transactionReceipt para Android. Espero que pueda practicar con este y compartir su historia de éxito en nuestro archivo Léame. ¡Salud!

@ raynor85 Tampoco puedo obtener una respuesta de purchaseHistory () o getAvailablePurchases (). Me pregunto si esas funciones simplemente no funcionarán hasta que la aplicación esté en producción. @JJMoon ¿Deberían esas funciones funcionar en modo sandbox?

Lo descubrí, no estaba llamando a "finishTransaction ()", así que me quedé atrapado en un bucle en mi cuenta de prueba de sandbox "La compra fue exitosa" pero no se procesó completamente por parte de Apple, lo llamaron un bucle muerto.

Este hilo se desvió un poco, pero veo el mismo error original cuando ejecuto la aplicación a través de xcode en mi dispositivo con una cuenta de zona de pruebas ( Error: Cannot connect to iTunes Store ). Estoy en 2.3.19, que creo que es el más reciente.

Una nota de Apple en relación con este error: https://developer.apple.com/library/archive/technotes/tn2413/_index.html#//apple_ref/doc/uid/DTS40016228 -CH1-ERROR_MESSAGES-CANNOT_CONNECT_TO_ITUNES_STORE

Creo que en mi caso, obtengo este error cuando intento suscribirme a un producto cuando ya estoy suscrito a él. También parece aparecer cuando estoy suscrito e intento cambiar mi suscripción (iniciando una nueva solicitud RNIAP.buySubscription .

Para cualquier otra persona que tenga problemas, también tenga en cuenta "Su aplicación se está ejecutando en el Simulador, que no admite la compra desde la aplicación". es otra razón por la que puede recibir este error. Debe hacer esto en un dispositivo real.

Creo que en mi caso, obtengo este error cuando intento suscribirme a un producto cuando ya estoy suscrito a él. También parece aparecer cuando estoy suscrito e intento cambiar mi suscripción (al iniciar una nueva solicitud RNIAP.buySubscription.

Entonces, ¿qué se supone que debes hacer en este caso? ¿Cómo sé si el usuario realmente compró el producto? Intenté restaurar las compras, pero nada parece cambiar.

¿Fue útil esta página
0 / 5 - 0 calificaciones