Eu tive relatórios de usuários com Android 8 de que meu aplicativo (que usa feed de back-end) não mostra conteúdo. Após a investigação, encontrei a seguinte exceção acontecendo no Android 8:
08-29 12:03:11.246 11285-11285/ E/: [12:03:11.245, main]: Exception: IOException java.io.IOException: Cleartext HTTP traffic to * not permitted
at com.android.okhttp.HttpHandler$CleartextURLFilter.checkURLPermitted(HttpHandler.java:115)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:458)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:127)
at com.deiw.android.generic.tasks.AbstractHttpAsyncTask.doConnection(AbstractHttpAsyncTask.java:207)
at com.deiw.android.generic.tasks.AbstractHttpAsyncTask.extendedDoInBackground(AbstractHttpAsyncTask.java:102)
at com.deiw.android.generic.tasks.AbstractAsyncTask.doInBackground(AbstractAsyncTask.java:88)
at android.os.AsyncTask$2.call(AsyncTask.java:333)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)
(Removi o nome do pacote, o URL e outros identificadores possíveis)
No Android 7 e versões inferiores, tudo funciona, não defino android:usesCleartextTraffic
no Manifest (e defini-lo como true
não ajuda, que é o valor padrão de qualquer maneira), nem uso Informações de segurança de rede. Se eu ligar NetworkSecurityPolicy.getInstance().isCleartextTrafficPermitted()
, ele retorna false
para o Android 8, true
para uma versão mais antiga, usando o mesmo arquivo apk. Tentei encontrar alguma menção a isso no Google informações sobre o Android O, mas sem sucesso.
cleartextTrafficPermitted="true"
Respostas:
De acordo com a configuração de segurança de rede -
Também dê uma olhada em - https://koz.io/android-m-and-the-war-on-cleartext-traffic/
Explicação do Codelabs - https://codelabs.developers.google.com/codelabs/android-network-security-config/index.html
Opção 1 -
Primeiro tente acessar o URL com "https: //" em vez de "http: //"
Opção 2 -
Crie o arquivo res / xml / network_security_config.xml -
AndroidManifest.xml -
Opção 3 -
android: usesCleartextTraffic Doc
AndroidManifest.xml -
Também como a resposta da @ david.s apontou também
android:targetSandboxVersion
pode ser um problema -De acordo com o Manifest Docs -
Então, opção 4 -
Se você tiver
android:targetSandboxVersion
em<manifest>
seguida, reduzi-la a1
AndroidManifest.xml -
fonte
android:usesCleartextTraffic="true"
?No AndroidManifest, encontrei este parâmetro:
e @ xml / network_security_config é definido em network_security_config.xml como:
apenas mudei cleartextTrafficPermitted para true
fonte
Meu problema no Android 9 foi navegar em uma visualização na web por domínios com http A solução desta resposta
e:
res / xml / network_security_config.xml
fonte
gradle
?Talvez você queira permitir texto não criptografado durante a depuração, mas mantenha os benefícios de segurança de rejeitar texto não criptografado na produção. Isso é útil para mim, porque testo meu aplicativo em um servidor de desenvolvimento que não oferece suporte a https. Aqui está como aplicar https na produção, mas permitir texto não criptografado no modo de depuração:
No build.gradle:
Na tag do aplicativo em AndroidManifest.xml
fonte
Altere seus URLs de
HTTP
paraHTTPS
;Isso funciona !!!
fonte
Na sugestão fornecida acima, eu estava fornecendo meu URL como http://xyz.abc.com/mno/
Eu mudei isso para xyz.abc.com e ele começou a funcionar.
fonte
Ok, isso é ⇒⇒ NÃO ⇐⇐ as milhares de repetições adicionam-no ao seu manifesto , mas uma dica que se baseia nisso, mas oferece benefícios adicionais (e talvez algumas informações básicas ).
O Android tem um tipo de funcionalidade de substituição para o diretório src.
Por padrão, você tem
Mas você pode adicionar diretórios adicionais para substituir o seu AndroidManifest.xml. Aqui está como funciona:
Dentro deste arquivo, você não precisa incluir todas as regras, mas apenas as que você deseja sobrescrever em seu / app / src / main / AndroidManifest.xml
Aqui está um exemplo de como é a permissão CLEARTEXT solicitada:
Com esse conhecimento, agora é fácil como 1,2,3 sobrecarregar suas permissões, dependendo da sua depuração | principal | libere o ambiente .
O grande benefício disso ... você não possui material de depuração no Manifest de produção e mantém uma estrutura fácil e direta de manutenção
fonte
Pode ser útil para alguém.
Recentemente, tivemos o mesmo problema no Android 9, mas precisamos exibir apenas alguns URLs no WebView, nada muito especial. Portanto, adicionar
android:usesCleartextTraffic="true"
ao Manifest funcionou, mas não queríamos comprometer a segurança de todo o aplicativo para isso. Portanto, a correção foi alterar os links dehttp
parahttps
fonte
Para projetos React Native
Já foi corrigido no RN 0,59. Você pode encontrar no diff de atualização de 0,58,6 a 0,59. Você pode aplicá-lo sem atualizar sua versão do RN; siga as etapas abaixo:
Crie arquivos:
android / app / src / debug /res/xml/react_native_config.xml -
android / app / src / debug /AndroidManifest.xml -
Verifique a resposta aceita para saber a causa raiz.
fonte
Ok, eu descobri isso. É devido ao parâmetro Manifest
android:targetSandboxVersion="2"
, que eu adicionei porque também temos a versão Instant App - ele deve garantir que, uma vez que as atualizações do usuário do Instant App para o aplicativo normal, ele não perca seus dados com a transferência. No entanto, como a descrição vaga sugere:Obviamente, também adiciona um novo nível de política de segurança, pelo menos no Android 8.
fonte
Eu removi esta linha do arquivo de manifesto do Android, que já está lá
e acrescentou
isso na tag do aplicativo no manifesto
então esse erro O tráfego HTTP de texto não criptografado para overlay.openstreetmap.nl não permitido se foi para mim nos android 9 e 10. Espero que funcione para o android 8 também se for ajudado, não se esqueça de votar obrigado
fonte
Para aplicar essas várias respostas
Xamarin.Android
, você pode usar os atributos de nível de classe e montagem versus editar manualmente oAndroidManifest.xml
É claro que a permissão da Internet é necessária (duh ..):
Nota: Normalmente, os atributos no nível da montagem são adicionados ao seu
AssemblyInfo.cs
arquivo, mas qualquer arquivo, abaixousing
e acima dasnamespace
obras.Em sua subclasse Aplicativo (crie uma, se necessário), você pode adicionar
NetworkSecurityConfig
com uma referência a umResources/xml/ZZZZ.xml
arquivo:Crie um arquivo na
Resources/xml
pasta (crie oxml
pasta, se necessário).xml/network_security_config
Arquivo de exemplo , ajuste conforme necessário (consulte outras respostas)Você também pode usar o
UsesCleartextTraffic
parâmetro emApplicationAttribute
:fonte
UsesCleartextTraffic = true
Também recebi o mesmo erro "Tráfego HTTP sem texto não permitido" ao desenvolver meu aplicativo. Estou usando o Retrofit2 para chamadas de rede no meu aplicativo e tenho dois ambientes de projeto (desenvolvimento e produção). Meu domínio de produção está com certificado SSL com chamadas HTTPS e o desenvolvedor não terá https. A configuração é adicionada nos tipos de construção. Mas quando mudo para dev, esse problema será acionado. Então, eu adicionei a solução abaixo para isso.
Adicionei tráfego de texto não criptografado no manifesto
Em seguida, adicionei uma especificação de conexão na classe de configuração de retrofit OKHttp time de criação.
A criação completa do OkHttpClient é fornecida abaixo
fonte
Atualização dezembro de 2019 ionic - 4.7.1
Adicione o conteúdo acima no arquivo .xml do manifesto do Android
Versões anteriores do iônico
Verifique se você possui o seguinte no
config.xml
Projeto Ionic:Execute iônico Cordova construir android. Ele cria a pasta Android em Plataformas
Abra o Android Studio e abra a pasta Android presente em nosso projeto project-platform-android. Deixe por alguns minutos para criar o gradle
Após a
gradle build
conclusão, temos alguns erros para incluirminSdVersion
nomanifest.xml
. Agora o que fazemos é apenas remover<uses-sdk android:minSdkVersion="19" />
a partirmanifest.xml
.Verifique se ele foi removido dos dois locais:
AndroidManifest.xml
.AndroidManifest.xml
.Agora tente construir o gradle novamente e agora ele cria com êxito
Verifique se você possui o seguinte na tag Aplicativo em App → manifesto →
Androidmanifest.xml
:Abra
network_security_config
(aplicativo → res → xml →network_security_config.xml
).Adicione o seguinte código:
Aqui
xxx.yyyy.com
está o link da sua API HTTP. Certifique-se de não incluir nenhum HTTP antes do URL.Nota: Agora crie o aplicativo usando o Android Studio (Build - Build Bundle / APK - Build APK) e agora você pode usar esse aplicativo e ele funciona bem no Android Pie. Se você tentar criar um aplicativo usando o Cordova iônico android, ele substituirá todas essas configurações. Certifique-se de usar o Android Studio para criar o projeto.
Se você tiver alguma versão anterior do aplicativo instalada, desinstale-a e tente, caso contrário, você receberá algum erro:
fonte
Criar arquivo - res / xml / network_security.xml
Em network_security.xml ->
Abra AndroidManifests.xml:
fonte
Isso é feito por razões de segurança; você sempre deve preferir usar HTTPS (HTTP Seguro ) sempre que possível.
Você pode ler mais sobre isso aqui
Existem várias soluções para esse problema, dependendo da sua condição.
Se você está tentando se comunicar com um serviço primário, IE: seu próprio servidor web
Lado do servidor: você deve adicionar suporte HTTPS a esse servidor e usar HTTPS em vez de HTTP. Hoje em dia, você pode fazê-lo gratuitamente usando serviços como LetsEncrypt e outros do
lado do cliente: se você estiver usando
HttpURLConnection
ojava.net
pacote, poderá mudar paraHttpsURLConnection
o diretóriojava.net.ssl
pacote, que tem um semelhantes, se não idênticas API, então a opção deve ser fácil.Se você estiver usando um serviço de terceiros, como Google, Facebook, serviço meteorológico etc.
Caso o serviço com o qual você está se comunicando suporte HTTPS (o que é mais provável), basta alterar o URL da solicitação de
http://abc.xyz
parahttps://abc.xyz
.Como último recurso, se o serviço de terceiros com o qual você deseja se comunicar não oferecer suporte a HTTPS ou qualquer outra forma de comunicação segura, você poderá usar esta resposta , mas, novamente, isso não será recomendado, pois derrota o objetivo dessa necessidade. recurso de segurança.
fonte
No meu caso, esse URL também não está funcionando no navegador.
Verifico com https://www.google.com/
E funcionou para mim.
fonte
Basta adicionar android: usesCleartextTraffic = "true" dentro do arquivo AndroidManifest.xml
fonte
Para os desenvolvedores do Xamarin.Android, verifique se a implementação do HttpClient e o SSL / TLS estão definidos como Padrão.
Pode ser encontrado em Opções Andorid -> Opções avançadas do Android.
fonte
Enquanto a resposta de trabalho, para mim, foi essa de @PabloCegarra:
Você pode receber um aviso de segurança sobre o
cleartextTrafficPermitted="true"
Se você conhece os domínios como 'lista branca', misture a resposta aceita e a acima:
Este código está funcionando para mim, mas meu aplicativo precisa recuperar dados apenas de books.google.com. Dessa forma, o aviso de segurança desaparece.
fonte
Em seguida, 2 Etapa: -> adicionar manifesto dentro da tag do aplicativo manifest
// Etapa 4 - >> Criar arquivo Drawable >> Xml >> nome como >> network_security_config.xml
fonte
Atualize para o React Native 0.58.5 ou versão superior. Eles têm
includeSubdomain
em seus arquivos de configuração no RN 0.58.5.ChangeLog
Em Rn 0.58.5, eles declararam
network_security_config
com seu domínio de servidor. A configuração de segurança de rede permite que um aplicativo permita tráfego de texto não criptografado de um determinado domínio. Portanto, não é necessário fazer um esforço extra declarandoandroid:usesCleartextTraffic="true"
na tag do aplicativo do seu arquivo de manifesto. Isso será resolvido automaticamente após o upgrade da versão RN.fonte
Após a alteração da API versão 9.0, o tráfego HTTP de texto não criptografado do erro para YOUR-API.DOMAIN.COM não é permitido (targetSdkVersion = "28"). no xamarin, xamarin.android e android studio.
Duas etapas para solucionar esse erro no xamarin, xamarin.android e android studio.
Etapa 1: Crie recursos de arquivo / xml / network_security_config.xml
Em network_security_config.xml
Etapa 2: atualizar o AndroidManifest.xml -
Adicione android: networkSecurityConfig = "@ xml / network_security_config" na tag do aplicativo. por exemplo:
fonte
adicionar este parâmetro no cabeçalho resolveu meu problema no apiSauce React Native
fonte
Se você estiver usando o ionic e obtendo esse erro durante o plug-in http nativo , é necessário fazer a seguinte correção:
Goto
resources/android/xml/network_security_config.xml
Mude-to-Isso funcionou para mim!
fonte
A adição de ... android: usesCleartextTraffic = "true" ... ao seu arquivo de manifesto pode parecer para corrigir o problema, mas abre uma ameaça à integridade dos dados.
Por motivos de segurança, usei marcadores de espaço de manifesto no android: usesCleartextTraffic dentro do arquivo de manifesto (como na Opção 3 da resposta aceita, por exemplo, @ Hrishikesh Kadam ) para permitir apenas texto não criptografado no ambiente de depuração.
Dentro do meu arquivo build.gradle (: app) , adicionei um espaço reservado manifesto como este:
Observe o nome do espaço reservado cleartextTrafficPermitted nesta linha acima
Então, no meu manifesto do Android, usei o mesmo espaço reservado ...
AndroidManifest.xml -
Com isso, o tráfego de texto não criptografado é permitido apenas no ambiente de depuração.
fonte
Quando um aplicativo se comunica com servidores usando um tráfego de rede de texto não criptografado, como HTTP ( não https ), isso pode aumentar o risco de invasão e violação do conteúdo. Terceiros podem injetar dados não autorizados ou vazar informações sobre os usuários. É por isso que os desenvolvedores são incentivados a proteger apenas o tráfego, como HTTPS. Aqui está a implementação e a referência de como resolver esse problema.
fonte
Tente pressionar o URL com "https: //" em vez de "http: //"
fonte
Eu uso o Cordova 8 com o cordova-plugin-whitelist 1.3.4 e ele configura como padrão meu aplicativo sem acesso à internet e adiciono apenas um parâmetro no manifest.xml -> android: usesCleartextTraffic = "true"
O caminho do mainfest mudou no Cordova 8: plataforma / android / app / src / main / AndroidManifest.xml.
isso é realmente estúpido, porque é óbvio que seu aplicativo precisa acessar a internet ....
fonte
Solução simples e mais fácil [Xamarin Form]
Android Project
, em seguida, Clique emProperties
,AssemblyInfo.cs
e cole este código aqui:Use
NSAppTransportSecurity
:Você deve definir a
NSAllowsArbitraryLoads
chave comoYES
sobNSAppTransportSecurity
dicionário no seuinfo.plist
arquivo.fonte