Po uaktualnieniu do Cordova Android 8.0 widzę net::ERR_CLEARTEXT_NOT_PERMITTED
błędy podczas próby połączenia się z http://
obiektami docelowymi.
Dlaczego tak jest i jak mogę to rozwiązać?
Po uaktualnieniu do Cordova Android 8.0 widzę net::ERR_CLEARTEXT_NOT_PERMITTED
błędy podczas próby połączenia się z http://
obiektami docelowymi.
Dlaczego tak jest i jak mogę to rozwiązać?
Uaktualniono domyślny poziom interfejsu API na platformie Cordova Android. Na urządzeniu z Androidem 9 komunikacja zwykłego tekstu jest teraz domyślnie wyłączona .
Aby ponownie umożliwić komunikację w postaci zwykłego tekstu, ustaw android:usesCleartextTraffic
na application
tagu true
:
<platform name="android">
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application">
<application android:usesCleartextTraffic="true" />
</edit-config>
</platform>
Jak zauważono w komentarzach, jeśli wcześniej nie zdefiniowałeś android
przestrzeni nazw XML, otrzymasz error: unbound prefix
podczas kompilacji. Oznacza to, że musisz dodać go do swojego widget
tagu w ten sam config.xml
sposób:
<widget id="you-app-id" version="1.2.3"
xmlns="http://www.w3.org/ns/widgets"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:cdv="http://cordova.apache.org/ns/1.0">
error: unbound prefix.
) podczas próby zbudowania mojej aplikacji Cordova. Rozwiązaniem było dodanie w moimconfig.xml
pliku, w moim głównym<widget>
elemencie atrybutuxmlns:android="http://schemas.android.com/apk/res/android
AndroidManifest.xml
w projekcie systemu Android?W config.xml należy poprawić dwie rzeczy, więc właściwą odpowiedzią powinno być dodanie xmls: android:
plus edycja konfiguracji, aby umożliwić:
W przypadku uniknięcia kroku 1 błąd: niezwiązany prefiks. pojawi się
źródło
W tym przypadku zwykły tekst reprezentuje niezaszyfrowane informacje. Od wersji Android 9 zaleca się, aby aplikacje wywoływały interfejsy API HTTPS, aby upewnić się, że nie ma żadnych problemów.
Jeśli jednak nadal musimy wywoływać interfejsy HTTP API, możemy wykonać następujące czynności:
Platforma: Ionic 4
Utwórz plik o nazwie: network_security_config.xml w katalogu project-root / resources / android / xml
Dodaj następujące wiersze:
Teraz w project-root / config.xml zaktualizuj następujące wiersze:
Teraz powinno działać.
źródło
config.xml
przededit-config
tagiem:<resource-file src="resources/android/xml/network_security_config.xml" target="app/src/main/res/xml/network_security_config.xml" />
. Dzięki!Aby rozwiązać problem, istnieje inna opcja. w zasobach plików / android / xml / network_security_config.xml. wstawić:
W moim przypadku używam adresu IP, wtedy base-config jest niezbędny, ale jeśli masz domenę. po prostu dodaj domenę.
źródło
Sam napotkałem ten problem dzisiaj i znalazłem naprawdę fajną wtyczkę, która pozwoli Ci zaoszczędzić kłopotów z ręcznym zezwoleniem na ruch czystego tekstu w Androidzie 9+ dla aplikacji Apache Cordova. Po prostu zainstaluj cordova-plugin-cleartext, a wtyczka powinna zająć się wszystkimi zakulisowymi problemami z Androidem.
źródło
Po kilku dniach zmagań to działa dla mnie i mam nadzieję, że zadziała również dla ciebie.
dodaj to do swojego CONFIG.XML , u góry swojego kodu.
a to pod platformą android.
dodaj następujący kod do tego pliku „resources / android / xml / network_security_config.xml” .
źródło
trust-anchors
tagi były ostatnim elementem umożliwiającym działanie wszystkich innych elementów.Dodanie następującego atrybutu w otwierającym tagu <widget> zadziałało. Proste i na żywo poprawnie ładuje się ponownie na emulatorze Androida 9. xmlns: android = "http://schemas.android.com/apk/res/android"
źródło
edit-config
kodzie od przyjętych odpowiedzi (nanosiunbound prefix
błąd)należy dodać
do
lubię to
źródło
Oto rozwiązanie, które zadziałało dla mnie. Pliki, które zaktualizowałem, są następujące:
Zmiany w odpowiednich plikach są następujące:
1. config.xml
Dodałem
<application android:usesCleartextTraffic="true" />
tag w<edit-config>
tagu w pliku config.xml2. network_security_config.xml
W tym pliku dodałem 2
<domain>
tagi w<domain-config>
tagu, główną domenę i subdomenę zgodnie z wymaganiami mojego projektuDzięki @Ashutosh za udzielenie pomocy.
Mam nadzieję, że to pomoże.
źródło
Używam IONIC 5.4.13, cordova 9.0.0 ([email protected])
Może powtarzam informacje, ale u mnie problem zaczął się pojawiać po dodaniu wtyczki (jeszcze nie jestem pewien). Wypróbowałem wszystkie powyższe kombinacje, ale nic nie działało. Zaczęło działać dopiero po dodaniu:
złożyć w projekcie w
więc mój plik network_security_config.xml wygląda teraz tak:
Dziękuje za wszystko.
źródło
Stary ionic cli (4.2) powodował problem w moim przypadku, aktualizacja do 5 rozwiązała problem
źródło
Używamy
cordova-custom-config
wtyczki do zarządzania naszą konfiguracją Androida. W tym przypadku rozwiązaniem było dodanie nowegocustom-preference
do naszegoconfig.xml
:Czy ktoś wie, jak to zrobić tylko w przypadku kompilacji deweloperskich? Byłbym szczęśliwy, gdyby kompilacje wydania opuszczały to ustawienie
false
.(Widzę ofertę konfiguracji iOS
buildType="debug"
, ale nie jestem pewien, czy dotyczy to konfiguracji Androida).źródło
@Der Hochstapler dzięki za rozwiązanie.
ale w IONIC 4 działają u mnie pewne dostosowania w projekcie config.xml
Dodaj linię w tagu widżetu
następnie w tagu Platforma dla Androida dostosuj niektóre linie sprawdź poniżej
dodaj usesCleartextTraffic = true po networkSecurityConfig i tagach plików zasobów
źródło
W projekcie kondensatora Ionic 4, kiedy spakowałem i wdrożyłem telefon z Androidem do testów, otrzymałem ten błąd. Rozwiązanie rozwiązane przez ponowną instalację kondensatora i aktualizację platformy Android.
źródło
Jeśli masz starszą strukturę Cordova, która ma problemy z NPM i poleceniem Cordova. Sugerowałbym poniższą opcję.
Utwórz plik android / res / xml / network_security_config.xml -
AndroidManifest.xml -
źródło
Następujące rozwiązanie zadziałało dla mnie-
goto
resources/android/xml/network_security_config.xml
Zmień to na-źródło
Po prostu dodaj tę linię do pliku platform / android / app / src / main / AndroidManifest.xml
<aplikacja android: hardwareAccelerated = "true" android: icon = "@ mipmap / ic_launcher" android: label = "@ string / app_name" android: supportRtl = "true" android: usesCleartextTraffic = "true" >
źródło