Lorsque je crée un tout nouveau projet en utilisant react-native init
(RN version 0.29.1) et que je mets une extraction dans la méthode de rendu sur l'API publique du film de démonstration Facebook, cela lance un fichier Network Request Failed
. Il y a une trace de pile très inutile et je ne peux pas déboguer les requêtes réseau dans la console Chrome. Voici la récupération que j'envoie:
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
la source
la source
http
->https
(si possible) résoudra très probablement votre problème192.168.1.25:3000
deifconfig
sans lier mon serveur à cette adresse IPrails server --binging=192.168.1.25 --port=3000
Réponses:
Le problème ici est qu'iOS n'autorise pas les requêtes HTTP par défaut, uniquement HTTPS. Si vous souhaitez activer les requêtes HTTP, ajoutez ceci à votre
info.plist
:la source
Il n'est pas recommandé d'autoriser tous les domaines pour http. Faites une exception uniquement pour les domaines nécessaires.
Source: Configuration des exceptions de sécurité de transport d'application dans iOS 9 et OSX 10.11
Ajoutez ce qui suit au fichier info.plist de votre application:
la source
J'utilisais
localhost
pour l'adresse, ce qui était évidemment faux. Après l'avoir remplacé par l'adresse IP du serveur (dans le réseau de l'émulateur), cela a parfaitement fonctionné.Éditer
Dans Android Emulator, l'adresse de la machine de développement est
10.0.2.2
. Plus d'explications iciPour Genymotion, l'adresse est
10.0.3.2
. Plus d'infos icila source
http://<Network IP emulator connects to>:<port where API is served>/api/tasks
Pour nous, c'était parce que nous téléchargions un fichier et que RN filePicker ne donnait pas le type de mime approprié. Cela nous a juste donné une «image» en tant que type. Nous devions le changer en 'image / jpg' pour que la récupération fonctionne.
la source
React Native Docs donne la réponse à cela.
React Native Docs -> Intégration avec des applications existantes -> Tester votre intégration -> Ajouter une exception de sécurité de transport d'application
la source
Le problème peut provenir de la configuration du serveur.
Android 7.0 a un bogue décrit ici . Solution de contournement proposée par Vicky Chijwani:
la source
J'ai eu le même problème sur Android mais j'ai réussi à trouver une solution. Android bloque le trafic en texte clair (demandes non https) depuis le niveau d'API 28 par défaut. Cependant, react-native ajoute une configuration de sécurité réseau à la version de débogage (
android/app/src/debug/res/xml/react_native_config.xml
) qui définit certains domaines (localhost et les adresses IP de l'hôte pour AVD / Genymotion), qui peuvent être utilisés sans SSL en mode dev. Vous pouvez y ajouter votre domaine pour autoriser les requêtes http.la source
J'ai eu le même problème sur Android 9 à cause du "http" et le problème a été résolu en ajoutant simplement android: usesCleartextTraffic = "true" dans AndroidManifest.xml
la source
Je suis tombé sur le même problème sur l'émulateur Android, où j'ai essayé d'accéder à une URL HTTPS externe avec un certificat valide. Mais la récupération de cette URL dans React-Native a échoué
1) Pour trouver l'erreur exacte dans les journaux, j'ai d'abord activé `` Debug JS Remotely '' en utilisant Cmd + M sur l'application
2) L'erreur signalée était
3) J'ai ajouté le certificat valide de l'URL en utilisant cette méthode -> ÉTAPE 2
Ce certificat est ajouté à l'onglet Utilisateur.
4) Ajoutez l'attribut d'
android:networkSecurityConfig
attribut à AndroidManifest.xmlAjouter un fichier de configuration de sécurité réseau
res/xml/network_security_config.xml:
Cela devrait fonctionner et vous donner une réponse attendue.
la source
J'avais ce problème pour Android-
URL- localhost / authToken.json - n'a pas fonctionné :(
URL- 10.106.105.103/authToken.json - n'a pas fonctionné :(
URL- http://10.106.105.103/authToken.json - a fonctionné :): D
Remarque - Utiliser
ifconfig
sous Linux ouipconfig
sous Windows pour trouver la machine IpAddressla source
Pour l'utilisateur Android:
Remplacez
localhost
s par une adresse IP LAN car lorsque vous exécutez le projet sur un appareil Android, localhost pointe vers l'appareil Android, au lieu de votre ordinateur, exemple: changezhttp://localost
enhttp://192.168.1.123
la source
Pour Android, vous avez peut-être manqué d'ajouter l'autorisation dans AndroidManifest.xml. Vous devez ajouter l'autorisation suivante.
la source
J'ai un problème similaire. Dans mon cas, les demandes à localhost fonctionnaient et se sont soudainement arrêtées. Il s'est avéré que le problème était que je désactivais mon wifi sur mon téléphone Android.
la source
Cela a fonctionné pour moi, Android utilise un type spécial d'adresse IP 10.0.2.2 puis le numéro de port
la source
si vous utilisez docker pour le reste api, un cas de travail pour moi était de remplacer le nom d' hôte:
http://demo.test/api
l'adresse IP de la machine:http://x.x.x.x/api
. Vous pouvez obtenir l'IP en vérifiant quel ipv4 vous avez sur votre réseau sans fil. Vous devriez également avoir le wifi du téléphone.la source
Vous devez gérer le cas d'erreur dans .then pour extraire l'API.
Par exemple:
la source
Ajoutez une
android:usesCleartextTraffic="true"
ligne dans AndroidManifest.xml.Supprimez tous les dossiers de débogage de votre dossier Android.
la source
Vous pouvez le gérer en utilisant ceci:
la source
Juste vous avez des changements dans Fetch ...
la source
Pour les appareils Android, accédez au dossier racine de votre projet et exécutez la commande:
par exemple,
adb reverse tcp:8088 tcp:8088
Cela permettra à votre appareil physique (par exemple, téléphone Android) d'écouter le serveur localhost exécuté sur votre machine de développement (c'est-à-dire votre ordinateur) à l'adresse http: // localhost: [your_own_server_port] .
Après cela, vous pouvez directement utiliser
http:localhost:[your_port] /your_api
dans votrefetch(
appel react-native ).la source
Pour Android, ajoutez android: networkSecurityConfig = "@ xml / network_security_config" à la balise d'application dans AndroidManifest.xml, comme ceci:
Contenu du fichier network_security_config.xml:
la source
Exemple:
la source