Miałem raporty od użytkowników z Androidem 8, że moja aplikacja (która używa kanału zaplecza) nie wyświetla treści. Po badaniu odkryłem następujący wyjątek na Androidzie 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)
(Usunąłem nazwę pakietu, adres URL i inne możliwe identyfikatory)
Na Androidzie 7 i niższych wszystko działa, nie ustawiam android:usesCleartextTraffic
w Manifeście (i ustawienie na true
nie pomaga, to jest i tak wartość domyślna), ani nie używam informacji o bezpieczeństwie sieci. Jeśli zadzwonię NetworkSecurityPolicy.getInstance().isCleartextTrafficPermitted()
, wróci false
do Androida 8, true
do starszej wersji, przy użyciu tego samego pliku apk. Próbowałem znaleźć wzmiankę na ten temat w Google info o Androidzie O, ale bezskutecznie.
cleartextTrafficPermitted="true"
Odpowiedzi:
Zgodnie z konfiguracją bezpieczeństwa sieci -
Zobacz także - https://koz.io/android-m-and-the-war-on-cleartext-traffic/
Wyjaśnienie Codelabs - https://codelabs.developers.google.com/codelabs/android-network-security-config/index.html
Opcja 1 -
Najpierw spróbuj uderzyć w adres URL „https: //” zamiast „http: //”
Opcja 2 -
Utwórz plik res / xml / network_security_config.xml -
AndroidManifest.xml -
Opcja 3 -
Android: usesCleartextTraffic Doc
AndroidManifest.xml -
Również jako odpowiedź @ david.s' wskazał
android:targetSandboxVersion
może być problem zbyt -Według Manifest Docs -
Więc opcja 4 -
Jeśli masz
android:targetSandboxVersion
w<manifest>
czym je zmniejszyć do1
AndroidManifest.xml -
źródło
android:usesCleartextTraffic="true"
?W AndroidManifest znalazłem ten parametr:
a @ xml / network_security_config jest zdefiniowany w network_security_config.xml jako:
właśnie zmieniłem cleartextTrafficPermitted na true
źródło
Moim problemem w Androidzie 9 było nawigowanie w widoku internetowym nad domenami z http Rozwiązanie z tej odpowiedzi
i:
res / xml / network_security_config.xml
źródło
gradle
?Możesz zezwolić tylko na tekst jawny podczas debugowania, ale zachowaj korzyści bezpieczeństwa wynikające z odrzucenia tekstu jawnego podczas produkcji. Jest to dla mnie przydatne, ponieważ testuję moją aplikację na serwerze programistycznym, który nie obsługuje protokołu https. Oto jak wymusić https w środowisku produkcyjnym, ale zezwalać na tekst jawny w trybie debugowania:
W build.gradle:
W znaczniku aplikacji w AndroidManifest.xml
źródło
Zmień swój adres URL z
HTTP
naHTTPS
;Działa !!!
źródło
W powyższej sugestii podałem swój adres URL jako http://xyz.abc.com/mno/
Zmieniłem to na xyz.abc.com, a potem zaczęło działać.
źródło
Ok, to jest ⇒⇒ NIE ⇐⇐ tysiące powtórzeń dodania go do Manifestu , ale podpowiedź, która na tym opiera się, ale daje dodatkową korzyść (i może trochę informacji w tle).
Android ma swego rodzaju funkcję nadpisywania katalogu src.
Domyślnie masz
Możesz jednak dodać dodatkowe katalogi, aby zastąpić plik AndroidManifest.xml. Oto jak to działa:
Wewnątrz tego pliku nie musisz umieszczać wszystkich reguł, ale tylko te, które chcesz zastąpić z / app / src / main / AndroidManifest.xml
Oto przykład, jak to wygląda dla żądanego uprawnienia CLEARTEXT:
Dzięki tej wiedzy możesz teraz łatwo przeciążać swoje uprawnienia w zależności od twojego debugowania | główna | wydanie Środowisko.
Ogromna korzyść z tego ... nie masz debugowania w Manifeście produkcyjnym i zachowujesz prostą i łatwą w utrzymaniu strukturę
źródło
Może to być przydatne dla kogoś.
Ostatnio mieliśmy ten sam problem z Androidem 9, ale potrzebowaliśmy tylko wyświetlić niektóre adresy URL w WebView, nic specjalnego. Tak więc dodanie
android:usesCleartextTraffic="true"
do Manifestu działało, ale nie chcieliśmy w tym celu narażać bezpieczeństwa całej aplikacji. Naprawiono więc zmianę linków zhttp
nahttps
źródło
Dla projektów React Native
Zostało to już naprawione na RN 0,59. Możesz znaleźć na diff aktualizacji od 0,58.6 do 0,59 Możesz go zastosować bez aktualizacji RN wersji, wykonaj następujące czynności:
Utwórz pliki:
android / app / src / debug /res/xml/react_native_config.xml -
android / app / src / debug /AndroidManifest.xml -
Sprawdź zaakceptowaną odpowiedź, aby poznać podstawową przyczynę.
źródło
Okej, wymyśliłem to. Jest to spowodowane parametrem Manifest
android:targetSandboxVersion="2"
, który dodałem, ponieważ mamy również wersję aplikacji błyskawicznej - powinno upewnić się, że po aktualizacji użytkownika z aplikacji błyskawicznej do zwykłej aplikacji nie utraci on danych podczas transferu. Jednak, jak sugeruje niejasny opis:To oczywiście dodaje nowy poziom zasad bezpieczeństwa, przynajmniej na Androida 8.
źródło
Usunąłem tę linię z pliku manifestu Androida, który już tam jest
i dodał
to w tagu aplikacji w manifeście
wtedy ten błąd Cleartext ruch HTTP do overlay.openstreetmap.nl jest niedozwolony zniknął dla mnie w Androidzie 9 i 10. Mam nadzieję, że to zadziała dla Androida 8 również, jeśli pomogło ci nie zapomnij głosować dziękuję
źródło
Aby zastosować te różne odpowiedzi
Xamarin.Android
, możesz użyć atrybutów na poziomie klasy i zestawu a ręcznie edytować plikAndroidManifest.xml
Potrzebne jest oczywiście pozwolenie internetowe (duh ..):
Uwaga: Zazwyczaj atrybuty poziomu zestawu są dodawane do
AssemblyInfo.cs
pliku, ale każdy plik poniżejusing
i powyżejnamespace
działa.Następnie w swojej podklasie aplikacji (utwórz ją w razie potrzeby) możesz dodać
NetworkSecurityConfig
z odniesieniem doResources/xml/ZZZZ.xml
pliku:Utwórz plik w
Resources/xml
folderze (wxml
razie potrzeby utwórz folder).Przykładowy
xml/network_security_config
plik, dostosuj w razie potrzeby (zobacz inne odpowiedzi)Możesz także użyć
UsesCleartextTraffic
parametru wApplicationAttribute
:źródło
UsesCleartextTraffic = true
Otrzymuję ten sam błąd „Niedozwolony ruch HTTP Cleartext HTTP” podczas tworzenia mojej aplikacji. Używam Retrofit2 do połączeń sieciowych w mojej aplikacji i mam dwa środowiska projektowe (programistyczne i produkcyjne). Moja domena produkcyjna ma certyfikat SSL z połączeniami HTTPS, a programista nie będzie miał https. Konfiguracja jest dodawana we smakach kompilacji. Ale kiedy przejdę na dev, ten problem się uruchomi. Więc dodałem do tego poniższe rozwiązanie.
Dodałem ruch czystego tekstu w manifeście
Następnie dodałem specyfikację połączenia do klasy konfiguracji modernizacji OKHttp.
Pełne utworzenie OkHttpClient podano poniżej
źródło
Aktualizacja jonowa w grudniu 2019 r. - 4.7.1
Dodaj powyższą treść w pliku manifestu Androida .xml
Poprzednie wersje jonowe
Upewnij się, że masz w swoim
config.xml
Ionic Project:Uruchom aplikację jonową Cordova na Androida. Tworzy folder Androida na platformach
Otwórz Android Studio i otwórz folder Androida obecny w naszym projekcie-platformy-android. Pozostaw na kilka minut, aby zbudował grad
Po
gradle build
zakończeniu otrzymujemy błędy dotyczące włączeniaminSdVersion
wmanifest.xml
. Teraz usuwamy tylko<uses-sdk android:minSdkVersion="19" />
zmanifest.xml
.Upewnij się, że został usunięty z obu lokalizacji:
AndroidManifest.xml
.AndroidManifest.xml
.Teraz spróbuj ponownie zbudować grad, a teraz zakończy się powodzeniem
Upewnij się, że masz następujące elementy w znaczniku aplikacji w aplikacji → manifest →
Androidmanifest.xml
:Otwórz
network_security_config
(aplikacja → res → xml →network_security_config.xml
).Dodaj następujący kod:
Oto
xxx.yyyy.com
link do twojego API HTTP. Upewnij się, że nie podajesz żadnego HTTP przed adresem URL.Uwaga: Teraz skompiluj aplikację za pomocą Android Studio (kompilacja - kompilacja pakietu / APK - kompilacja APK), a teraz możesz korzystać z tej aplikacji i działa ona dobrze w Androidzie Pie. Jeśli spróbujesz skompilować aplikację przy użyciu aplikacji Android w postaci jonowej Cordova, zastąpi to wszystkie ustawienia, więc upewnij się, że używasz Android Studio do zbudowania projektu.
Jeśli masz zainstalowane jakieś starsze wersje aplikacji, odinstaluj je i spróbuj, w przeciwnym razie pozostanie błąd:
źródło
Utwórz plik - res / xml / network_security.xml
W pliku network_security.xml ->
Otwórz AndroidManifests.xml:
źródło
Odbywa się to ze względów bezpieczeństwa, zawsze należy w miarę możliwości używać HTTPS (HTTP Secure ).
Możesz przeczytać więcej na ten temat tutaj
Istnieje wiele rozwiązań tego problemu w zależności od stanu.
Jeśli próbujesz komunikować się z usługą pierwszej strony, IE: własny serwer internetowy
Strona serwera: należy dodać obsługę HTTPS do tego serwera i używać HTTPS zamiast HTTP. W dzisiejszych czasach możesz to zrobić nawet bezpłatnie, korzystając z usług takich jak LetsEncrypt i inni po
stronie klienta: Jeśli korzystasz
HttpURLConnection
zjava.net
pakietu, możesz przełączyć sięHttpsURLConnection
najava.net.ssl
pakiet, ma podobny, jeśli nie identyczny interfejs API, więc zmiana powinna być łatwa.Jeśli korzystasz z usługi strony trzeciej, takiej jak Google, Facebook, serwis pogodowy itp.
Jeśli usługa, z którą się komunikujesz, obsługuje HTTPS (co najprawdopodobniej to robi), możesz po prostu zmienić adres URL żądania z
http://abc.xyz
nahttps://abc.xyz
.W ostateczności, jeśli usługa strony trzeciej, z którą chcesz się komunikować, nie obsługuje HTTPS ani żadnej innej formy bezpiecznej komunikacji, możesz skorzystać z tej odpowiedzi , ale znowu nie jest to zalecane, ponieważ podważa cel tak bardzo potrzebnego funkcja bezpieczeństwa.
źródło
W moim przypadku ten adres URL również nie działa w przeglądarce.
Sprawdzam za pomocą https://www.google.com/
I zadziałało dla mnie.
źródło
Wystarczy dodać Androida: usesCleartextTraffic = "true" w pliku AndroidManifest.xml
źródło
Dla programistów Xamarin.Android upewnij się, że implementacja HttpClient i SSL / TLS są ustawione na Domyślne.
Można go znaleźć w Opcje Andorida -> Zaawansowane opcje Androida.
źródło
Podczas gdy dla mnie roboczą odpowiedzią było @PabloCegarra:
Możesz otrzymać ostrzeżenie dotyczące bezpieczeństwa dotyczące
cleartextTrafficPermitted="true"
Jeśli znasz domeny na „białej liście”, powinieneś połączyć obie zaakceptowane odpowiedzi i powyższą:
Ten kod działa dla mnie, ale moja aplikacja musi pobierać dane tylko z books.google.com. W ten sposób ostrzeżenie o bezpieczeństwie znika.
źródło
Następnie 2 krok: -> manifest dodaj wewnątrz manifestu znacznika aplikacji
// Krok 4 - >> Utwórz rysunek >> plik Xml >> nazwa jako >> network_security_config.xml
źródło
Uaktualnij do React Native w wersji 0.58.5 lub nowszej. Oni mają
includeSubdomain
w swoich plikach konfiguracyjnych RN 0.58.5.ChangeLog
W Rn 0.58.5 zadeklarowali
network_security_config
swoją domeną serwera. Konfiguracja zabezpieczeń sieci umożliwia aplikacji zezwolenie na ruch czystego tekstu z określonej domeny. Więc nie trzeba wkładać dodatkowego wysiłku, deklarującandroid:usesCleartextTraffic="true"
znacznik aplikacji w pliku manifestu. Problem zostanie rozwiązany automatycznie po aktualizacji wersji RN.źródło
Po zmianie interfejsu API w wersji 9.0 pojawia się błąd Cleartext ruch HTTP do YOUR-API.DOMAIN.COM jest niedozwolony (targetSdkVersion = "28"). w Xamarin, Xamarin.android i Android Studio.
Dwa kroki do rozwiązania tego błędu w Xamarin, Xamarin.android i Android Studio.
Krok 1: Utwórz zasoby pliku / xml / network_security_config.xml
W pliku network_security_config.xml
Krok 2: Zaktualizuj AndroidManifest.xml -
Dodaj Androida: networkSecurityConfig = "@ xml / network_security_config" na znaczniku aplikacji. na przykład:
źródło
dodanie tego parametru w nagłówku rozwiązało mój problem w apiSauce React Native
źródło
Jeśli używasz jonów i pojawia się ten błąd podczas wtyczki natywnej HTTP , należy wykonać następujące poprawki -
muszę
resources/android/xml/network_security_config.xml
to zmienić na-To działało dla mnie!
źródło
Dodawanie ... android: usesCleartextTraffic = "true" ... do pliku manifestu może się wydawać, aby rozwiązać problem, ale stwarza zagrożenie dla integralności danych.
Ze względów bezpieczeństwa użyłem manifestów symboli zastępczych w Androidzie: usesCleartextTraffic w pliku manifestu (jak w Opcji 3 zaakceptowanej odpowiedzi, tj. Odpowiedzi @ Hrishikesh Kadam ), aby zezwolić tylko na tekst jawny w środowisku debugowania.
Wewnątrz mojego pliku build.gradle (: app) dodałem manifest symbol zastępczy:
Zanotuj nazwę symbolu zastępczego symbolu cleartextTrafficPermitted w powyższym wierszu powyżej
Następnie w moim Manifeście na Androida użyłem tego samego symbolu zastępczego ...
AndroidManifest.xml -
Dzięki temu ruch czystego tekstu jest dozwolony tylko w środowisku debugowania.
źródło
Gdy aplikacja komunikuje się z serwerami przy użyciu ruchu sieciowego w postaci czystego tekstu, takiego jak HTTP ( nie https ), może to zwiększyć ryzyko włamania się i ingerowania w treść. Strony trzecie mogą wstrzykiwać nieautoryzowane dane lub wycieki informacji o użytkownikach. Właśnie dlatego programiści są zachęcani tylko do zabezpieczania ruchu, takiego jak HTTPS. Oto implementacja i odniesienie do sposobu rozwiązania tego problemu.
źródło
Spróbuj wpisać adres URL za pomocą „https: //” zamiast „http: //”
źródło
Używam Cordova 8 z Cordova-plugin-białą listą 1.3.4 i to domyślna konfiguracja moja aplikacja nie ma dostępu do Internetu i dodam tylko parametr w manifest.xml -> android: usesCleartextTraffic = "true"
Ścieżka Mainfest zmieniła się w Cordova 8: platforma / android / app / src / main / AndroidManifest.xml.
to jest naprawdę głupie, ponieważ oczywiste jest, że Twoja aplikacja potrzebuje dostępu do Internetu ....
źródło
Proste i najłatwiejsze rozwiązanie [Formularz Xamarin]
Android Project
, a następnie kliknijProperties
,AssemblyInfo.cs
i wklej ten kod tutaj:Użyj
NSAppTransportSecurity
:Trzeba ustawić
NSAllowsArbitraryLoads
kluczYES
na podstawieNSAppTransportSecurity
słownika w swoiminfo.plist
pliku.źródło