Quando crio um projeto react-native init
totalmente novo usando (RN versão 0.29.1) e coloco uma busca no método de renderização na API pública de filme de demonstração do facebook, ele lança a Network Request Failed
. Há um rastreamento de pilha muito inútil e não consigo depurar solicitações de rede no console do chrome. Aqui está a busca que estou 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
fonte
fonte
http
->https
(se possível) provavelmente irá corrigir o problema192.168.1.25:3000
deifconfig
sem vincular meu servidor a esse iprails server --binging=192.168.1.25 --port=3000
Respostas:
O problema aqui é que o iOS não permite solicitações HTTP por padrão, apenas HTTPS. Se você deseja ativar solicitações HTTP, adicione isso ao seu
info.plist
:fonte
Não recomendado para permitir todos os domínios para http. Faça uma exceção apenas para os domínios necessários.
Fonte: Configurando exceções de segurança do App Transport no iOS 9 e OSX 10.11
Adicione o seguinte ao arquivo info.plist do seu aplicativo:
fonte
Eu estava usando
localhost
o endereço, o que obviamente estava errado. Depois de substituí-lo pelo endereço IP do servidor (na rede em que está o emulador), funcionou perfeitamente.Editar
No Android Emulator, o endereço da máquina de desenvolvimento é
10.0.2.2
. Mais explicações aquiPara Genymotion, o endereço é
10.0.3.2
. Mais informações aquifonte
http://<Network IP emulator connects to>:<port where API is served>/api/tasks
Para nós, foi porque estávamos carregando um arquivo e o RN filePicker não forneceu o tipo mime adequado. Apenas nos deu 'imagem' como o tipo. Precisávamos alterá-lo para 'image / jpg' para que a busca funcionasse.
fonte
O React Native Docs fornece a resposta para isso.
Reagir documentos nativos -> integração com aplicativos existentes -> testar sua integração -> exceção Adicionar segurança de transporte de aplicativos
fonte
O problema pode estar na configuração do servidor.
O Android 7.0 tem um bug descrito aqui . Solução proposta por Vicky Chijwani:
fonte
Eu tive o mesmo problema no Android, mas consegui encontrar uma solução para ele. O Android está bloqueando o tráfego de texto não criptografado (sem solicitações https) desde o nível 28 da API, por padrão. No entanto, o react-native adiciona uma configuração de segurança de rede à versão de depuração (
android/app/src/debug/res/xml/react_native_config.xml
) que define alguns domínios (host local e os IPs do host para AVD / Genymotion), que podem ser usados sem SSL no modo dev. Você pode adicionar seu domínio lá para permitir solicitações http.fonte
Eu tive o mesmo problema no Android 9 por causa do "http" e o problema foi resolvido com a adição do android: usesCleartextTraffic = "true" no AndroidManifest.xml
fonte
Me deparei com o mesmo problema no Android Emulator, onde tentei acessar um URL HTTPS externo com um certificado válido. Mas a busca desse URL no react-native falhou
1) Para descobrir o erro exato nos logs, ativei primeiro 'Debug JS Remotamente' usando Cmd + M no aplicativo
2) O erro relatado foi
3) Adicionei o certificado válido da URL usando este método -> ETAPA 2
Este certificado é adicionado à guia Usuário.
4) Adicione o atributo
android:networkSecurityConfig
attribute ao AndroidManifest.xmlAdicionar um arquivo de configuração de segurança de rede
res/xml/network_security_config.xml:
Isso deve funcionar e fornecer uma resposta esperada.
fonte
Eu estava tendo esse problema no Android-
URL- localhost / authToken.json - não funcionou :(
URL- 10.106.105.103/authToken.json - não funcionou :(
URL- http://10.106.105.103/authToken.json - trabalhou :): D
Nota- Use
ifconfig
no Linux ouipconfig
no Windows para encontrar a máquina IpAddressfonte
Para usuário do Android:
Substitua
localhost
s por endereços IP de uma LAN porque, quando você executa o projeto em um dispositivo Android, o host local está apontando para o dispositivo Android, em vez do computador, por exemplo: mudehttp://localost
parahttp://192.168.1.123
fonte
Para Android, você pode ter esquecido de adicionar permissão no AndroidManifest.xml É necessário adicionar a seguinte permissão.
fonte
Eu tenho um problema semelhante. No meu caso, as solicitações para o host local estavam funcionando e de repente pararam. Acontece que o problema era que eu estava desligando meu wifi no meu telefone Android.
fonte
Isso funcionou para mim, o Android usa um tipo especial de endereço IP 10.0.2.2 e número da porta
fonte
se você usar janela de encaixe para a API REST, um caso de trabalhar para mim era substituir hostname:
http://demo.test/api
com o endereço IP da máquina:http://x.x.x.x/api
. Você pode obter o IP verificando qual ipv4 você tem na sua rede sem fio. Você também deve ter o wifi do telefone.fonte
Você deve manipular o caso de erro em .then para buscar a API.
Por exemplo:
fonte
Adicione
android:usesCleartextTraffic="true"
linha no AndroidManifest.xml.Exclua todas as pastas de depuração da sua pasta Android.
fonte
Você pode lidar com isso usando este:
fonte
Só você tem alterações na busca ....
fonte
Para dispositivos Android, acesse a pasta raiz do projeto e execute o comando:
por exemplo,
adb reverse tcp:8088 tcp:8088
Isso fará com que seu dispositivo físico (por exemplo, telefone Android) ouça o servidor localhost em execução na sua máquina de desenvolvimento (ou seja, o seu computador) no endereço http: // localhost: [your_own_server_port] .
Depois disso, você pode usar diretamente
http:localhost:[your_port] /your_api
em suafetch(
chamada react-native ).fonte
Para o Android, adicione android: networkSecurityConfig = "@ xml / network_security_config" à tag do aplicativo no AndroidManifest.xml, assim:
conteúdo do arquivo network_security_config.xml:
fonte
Exemplo:
fonte