es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La aplicación Expo no recupera los datos de la API local en el Emulador de Android, pero funciona en el navegador del emulador.

Estoy utilizando Expo para crear una aplicación de React Native. Estoy consumiendo una API local alojada con .Net.

La versión web funciona correctamente, pero cuando intento consumir la API con mi aplicación en un emulador de Android, obtengo el siguiente error:

Network request failed
at node_modules\whatwg-fetch\dist\fetch.umd.js:535:17 in setTimeout$argument_0
at node_modules\react-native\Libraries\Core\Timers\JSTimers.js:123:14 in _callTimer
at node_modules\react-native\Libraries\Core\Timers\JSTimers.js:379:16 in callTimers
at node_modules\react-native\Libraries\BatchedBridge\MessageQueue.js:414:4 in __callFunction
at node_modules\react-native\Libraries\BatchedBridge\MessageQueue.js:113:6 in __guard$argument_0
at node_modules\react-native\Libraries\BatchedBridge\MessageQueue.js:365:10 in __guard
at node_modules\react-native\Libraries\BatchedBridge\MessageQueue.js:112:4 in callFunctionReturnFlushedQueue

Estoy utilizando `https://10.0.2.2:7203/api/payments` y he probado tanto las versiones HTTPS como HTTP. Puedo obtener la respuesta en el navegador del emulador después de aceptar la advertencia de que la conexión no es segura. Sospecho que tiene algo que ver con el certificado SSL, pero no puedo entender cómo hacer que funcione en la aplicación.

Aquí está la solicitud fetch:

const fetchData = fetch(this.props.api)
            .then(res => res.json())
            .then(result => this.setState({ items: result }))
            .catch(reason => console.log(reason));
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está relacionado con el certificado SSL. Cuando se ejecuta en un emulador de Android, debes usar https://10.0.2.2` en lugar delocalhost`.

    Para solucionar el problema, puedes intentar desactivar la verificación SSL agregando el siguiente código antes de la solicitud fetch:

    import { Platform } from 'react-native';
    
    if (Platform.OS === 'android') {
      // ignorar el error de certificado autofirmado
      fetch.enableSslVerification(false);
    }
    

    Esto desactivará la verificación SSL para dispositivos Android. Si esto no funciona, es posible que necesites configurar el certificado SSL en el servidor para permitir la conexión desde la aplicación.

Comments are closed.