Cuando creo un nuevo proyecto usando react-native init
(RN versión 0.29.1) y pongo una búsqueda en el método de renderizado en la API pública de la película de demostración de Facebook, arroja un Network Request Failed
. Hay un seguimiento de pila muy inútil y no puedo depurar solicitudes de red en la consola de Chrome. Aquí está la búsqueda que estoy enviando:
fetch('http://facebook.github.io/react-native/movies.json')
.then((response) => response.json())
.then((responseJson) => {
return responseJson.movies;
})
.catch((error) => {
console.error(error);
});
javascript
react-native
fetch-api
Alek Hurst
fuente
fuente
http
->https
(si es posible) probablemente solucionará tu problema192.168.1.25:3000
desdeifconfig
sin vincular mi servidor a esa iprails server --binging=192.168.1.25 --port=3000
Respuestas:
El problema aquí es que iOS no permite solicitudes HTTP por defecto, solo HTTPS. Si desea habilitar las solicitudes HTTP, agregue esto a su
info.plist
:fuente
No se recomienda permitir todos los dominios para http. Haga una excepción solo para los dominios necesarios.
Fuente: Configuración de excepciones de seguridad de transporte de aplicaciones en iOS 9 y OSX 10.11
Agregue lo siguiente al archivo info.plist de su aplicación:
fuente
Estaba usando
localhost
la dirección, que obviamente estaba mal. Después de reemplazarlo con la dirección IP del servidor (en la red que es el emulador), funcionó perfectamente.Editar
En Android Emulator, la dirección de la máquina de desarrollo es
10.0.2.2
. Más explicaciones aquíPara Genymotion, la dirección es
10.0.3.2
. Más información aquí.fuente
http://<Network IP emulator connects to>:<port where API is served>/api/tasks
Para nosotros fue porque estábamos cargando un archivo y el RN filePicker no proporcionó el tipo mime adecuado. Simplemente nos dio 'imagen' como tipo. Necesitábamos cambiarlo a 'image / jpg' para que la búsqueda funcionara.
fuente
React Native Docs da la respuesta para esto.
Reaccionar documentos nativos -> Integración con aplicaciones existentes -> Probar su integración -> Agregar excepción de seguridad de transporte de aplicaciones
fuente
El problema puede estar en la configuración del servidor.
Android 7.0 tiene un error descrito aquí . Solución propuesta por Vicky Chijwani:
fuente
Tuve el mismo problema en Android, pero logré encontrar una solución. Android está bloqueando el tráfico de texto sin formato (solicitudes que no son https) desde el nivel 28 de API de forma predeterminada. Sin embargo, react-native agrega una configuración de seguridad de red a la versión de depuración (
android/app/src/debug/res/xml/react_native_config.xml
) que define algunos dominios (localhost y las IP de host para AVD / Genymotion), que se pueden usar sin SSL en modo dev. Puede agregar su dominio allí para permitir solicitudes http.fuente
Tengo el mismo problema en Android 9 debido a "http" y el problema se resolvió simplemente agregando android: usesCleartextTraffic = "true" en AndroidManifest.xml
fuente
Me encontré con el mismo problema en el emulador de Android, donde intenté acceder a una URL HTTPS externa con un certificado válido. Pero no se pudo recuperar esa URL en react-native
1) Para descubrir el error exacto en los registros, primero habilité 'Debug JS Remotely' usando Cmd + M en la aplicación
2) El error reportado fue
3) Agregué el certificado válido de la URL usando este método -> PASO 2
Este certificado se agrega a la pestaña Usuario.
4) Agregue el atributo de
android:networkSecurityConfig
atributo a AndroidManifest.xmlAgregar un archivo de configuración de seguridad de red
res/xml/network_security_config.xml:
Esto debería funcionar y darle una respuesta esperada.
fuente
Estaba teniendo este problema para Android
URL- localhost / authToken.json - no funcionó :(
URL- 10.106.105.103/authToken.json - no funcionó :(
URL- http://10.106.105.103/authToken.json - trabajado :): D
Nota: use
ifconfig
en Linux oipconfig
en Windows para encontrar la máquina IpAddressfuente
Para usuarios de Android:
Reemplace
localhost
s por una dirección IP de Lan porque cuando ejecuta el proyecto en un dispositivo Android, localhost apunta al dispositivo Android, en lugar de a su computadora, por ejemplo: cambiehttp://localost
ahttp://192.168.1.123
fuente
Para Android, es posible que no haya agregado el permiso en AndroidManifest.xml. Necesita agregar el siguiente permiso.
fuente
Tengo un problema similar En mi caso, las solicitudes a localhost funcionaban y de repente se detuvieron. Resultó que el problema era que estaba apagando mi wifi en mi teléfono Android.
fuente
Esto funcionó para mí, Android usa un tipo especial de dirección IP 10.0.2.2 y luego número de puerto
fuente
si utiliza cargador de muelle para la API REST, un caso de trabajo para mí fue la de sustituir el nombre de host:
http://demo.test/api
la dirección IP de la máquina:http://x.x.x.x/api
. Puede obtener la IP comprobando qué ipv4 tiene en su red inalámbrica. También debe tener el wifi del teléfono encendido.fuente
Debe manejar el caso de error en .then para buscar API.
Por ejemplo:
fuente
Agregar
android:usesCleartextTraffic="true"
línea en AndroidManifest.xml.Elimine toda la carpeta de depuración de su carpeta de Android.
fuente
Puedes manejarlo usando esto:
fuente
Solo tienes cambios en Fetch ...
fuente
Para dispositivos Android, vaya a la carpeta raíz del proyecto y ejecute el comando:
p.ej,
adb reverse tcp:8088 tcp:8088
Esto hará que su dispositivo físico (es decir, un teléfono Android) escuche el servidor localhost que se ejecuta en su máquina de desarrollo (es decir, su computadora) en la dirección http: // localhost: [your_own_server_port] .
Después de eso, puede usar directamente
http:localhost:[your_port] /your_api
en sufetch(
llamada react-native ).fuente
Para Android, agregue android: networkSecurityConfig = "@ xml / network_security_config" a la etiqueta de la aplicación en AndroidManifest.xml, de esta manera:
contenido del archivo network_security_config.xml:
fuente
Ejemplo:
fuente