Łatwym sposobem na zaimplementowanie tego jest użycie tego atrybutu, w AndroidManifest.xml
którym zezwalasz na wszystkie http
dla wszystkich żądań:
<application android:usesCleartextTraffic="true">
</application>
Ale jeśli chcesz na przykład więcej konfiguracji dla różnych linków, zezwalając http
na niektóre domeny, ale nie na inne domeny, musisz podać res/xml/networkSecurityConfig.xml
plik.
Aby to zrobić w Android 9 Pie, będziesz musiał ustawić networkSecurityConfig
w swoim application
tagu Manifest w następujący sposób:
<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
<application android:networkSecurityConfig="@xml/network_security_config">
</application>
</manifest>
Następnie w swoim xml
folderze musisz teraz utworzyć plik o network_security_config
nazwie takiej jak w Manifeście i stamtąd zawartość twojego pliku powinna wyglądać następująco, aby umożliwić wszystkie żądania bez szyfrowania:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
</network-security-config>
Stamtąd możesz już iść. Teraz Twoja aplikacja będzie wysyłać żądania dla wszystkich typów połączeń. Więcej informacji na ten temat znajdziesz tutaj .
W PEŁNI DZIAŁAJĄCE ROZWIĄZANIE dla obu
Android
lubReact-native
użytkowników borykających się z tym problemem, po prostu dodaj toandroid:usesCleartextTraffic="true"
w pliku AndroidManifest.xml w następujący sposób:pomiędzy
<application>
...</application>
tagiem w ten sposób:źródło
tools:ignore
błąd, pamiętaj, aby dodaćxmlns:tools="http://schemas.android.com/tools"
wewnątrzapplication
. Tak więc<application xmlns:tools="http://schemas.android.com/tools" ...
NSAppTransportSecurity
na iOS jest dodanie do info.plist. stackoverflow.com/questions/38418998/…Postawiono
android:usesCleartextTraffic="true"
na ciebie prosty sposóbAndroidManifest.xml
Twój
AndroidManifest.xml
wyglądMam nadzieję, że to Ci pomoże.
źródło
Łatwy sposób
Dodaj
usesCleartextTraffic
do AndroidManifest.xmlWskazuje, czy aplikacja zamierza używać ruchu sieciowego w postaci zwykłego tekstu, takiego jak zwykły tekst HTTP. Wartością domyślną dla aplikacji, które są przeznaczone dla poziomu interfejsu API 27 lub niższego, jest „prawda”. Aplikacje, które są przeznaczone dla API na poziomie 28 lub wyższym, mają domyślnie wartość „false”.
źródło
Wystarczy ustawić
usesCleartextTraffic
flagę w znaczniku aplikacjiAndroidManifest.xml
pliku. Nie ma potrzeby tworzenia pliku konfiguracyjnego dla Androida.źródło
W przypadku
React Native
aplikacji działających w trybie debugowania dodajxml block
wspomniany przez @Xenolion doreact_native_config.xml
znajdującego się w<project>/android/app/src/debug/res/xml
Podobny do następującego fragmentu:
źródło
Mam ten sam problem i zauważam, że moja konfiguracja zabezpieczeń ma różne TAGI, jak mówi odpowiedź @Xenolion
więc zmieniam TAGI „domain-config” na „base-config” i działa tak:
źródło
Możesz sprawdzić, czy wysyłasz clearText przez HTTP Fix: https://medium.com/@son.rommer/fix-cleartext-traffic-error-in-android-9-pie-2f4e9e2235e6
LUB
W przypadku klienta HTTP Apache Wycofanie (od Google): w systemie Android 6.0 usunęliśmy obsługę klienta HTTP Apache. Począwszy od systemu Android 9, ta biblioteka jest usuwana ze ścieżki bootclasspath i domyślnie nie jest dostępna dla aplikacji. Aby nadal korzystać z klienta HTTP Apache, aplikacje przeznaczone dla systemu Android 9 lub nowszego mogą dodać następujące elementy do swojego pliku AndroidManifest.xml:
Źródło https://developer.android.com/about/versions/pie/android-9.0-changes-28
źródło