Ich hatte Berichte von Benutzern mit Android 8, dass meine App (die Back-End-Feeds verwendet) keinen Inhalt anzeigt. Nach einer Untersuchung fand ich folgende Ausnahme auf 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)
(Ich habe den Paketnamen, die URL und andere mögliche Bezeichner entfernt.)
Unter Android 7 und niedriger funktioniert alles, ich setze nicht android:usesCleartextTraffic
in Manifest (und das Setzen auf true
hilft nicht, das ist sowieso der Standardwert), und ich verwende auch keine Netzwerksicherheitsinformationen. Wenn ich anrufe NetworkSecurityPolicy.getInstance().isCleartextTrafficPermitted()
, wird false
für Android 8, true
für eine ältere Version, dieselbe Apk-Datei verwendet. Ich habe versucht, dies in Google-Informationen zu Android O zu erwähnen, aber ohne Erfolg.
cleartextTrafficPermitted="true"
Antworten:
Entsprechend der Netzwerksicherheitskonfiguration -
Schauen Sie sich auch an: https://koz.io/android-m-and-the-war-on-cleartext-traffic/
Erklärung zu Codelabs - https://codelabs.developers.google.com/codelabs/android-network-security-config/index.html
Option 1 -
Versuchen Sie zunächst, die URL mit "https: //" anstelle von "http: //" zu treffen.
Option 2 -
Datei res / xml / network_security_config.xml erstellen -
AndroidManifest.xml -
Option 3 -
android: usingCleartextTraffic Doc
AndroidManifest.xml -
Auch wie die Antwort von @ david.s gezeigt hat ,
android:targetSandboxVersion
kann dies ebenfalls ein Problem sein -Laut Manifest Docs -
Also Option 4 -
Wenn Sie
android:targetSandboxVersion
in<manifest>
dann reduzieren sie auf1
AndroidManifest.xml -
quelle
android:usesCleartextTraffic="true"
?Im AndroidManifest habe ich diesen Parameter gefunden:
und @ xml / network_security_config ist in network_security_config.xml definiert als:
Ich habe gerade cleartextTrafficPermitted in true geändert
quelle
Mein Problem in Android 9 war das Navigieren in einer Webansicht über Domains mit http Die Lösung aus dieser Antwort
und:
res / xml / network_security_config.xml
quelle
gradle
?Möglicherweise möchten Sie Klartext nur beim Debuggen zulassen, aber die Sicherheitsvorteile der Ablehnung von Klartext in der Produktion beibehalten. Dies ist nützlich für mich, da ich meine App gegen einen Entwicklungsserver teste, der https nicht unterstützt. So erzwingen Sie https in der Produktion, lassen jedoch Klartext im Debug-Modus zu:
In build.gradle:
Im Anwendungs-Tag in AndroidManifest.xml
quelle
Ändern Sie Ihre URL von
HTTP
vonHTTPS
;Es funktioniert!!!
quelle
In dem oben angegebenen Vorschlag habe ich meine URL als http://xyz.abc.com/mno/ angegeben.
Ich habe das in xyz.abc.com geändert, dann hat es angefangen zu funktionieren.
quelle
Ok, das ist ⇒⇒ NICHT ⇐⇐ die Tausende wiederholen das Hinzufügen zu Ihrem Manifest , sondern ein Hinweis , der darauf basiert , aber Ihnen zusätzlichen Nutzen (und vielleicht einige Hintergrundinformationen) gibt.
Android hat eine Art Überschreibungsfunktion für das src-Verzeichnis.
Standardmäßig haben Sie
Sie können jedoch zusätzliche Verzeichnisse hinzufügen, um Ihre AndroidManifest.xml zu überschreiben. So funktioniert es:
In dieser Datei müssen Sie nicht alle Regeln einfügen, sondern nur diejenigen, die Sie aus Ihrer Datei / app / src / main / AndroidManifest.xml überschreiben möchten
Hier ein Beispiel, wie es für die angeforderte CLEARTEXT-Berechtigung aussieht:
Mit diesem Wissen ist es jetzt einfach als 1,2,3 für Sie, Ihre Berechtigungen abhängig von Ihrem Debug | zu überladen main | Release Enviroment.
Der große Vorteil dabei ... Sie haben kein Debug-Zeug in Ihrem Produktions-Manifest und behalten eine gerade und einfach zu wartende Struktur
quelle
Es könnte für jemanden nützlich sein.
Wir hatten kürzlich das gleiche Problem für Android 9, aber wir mussten nur einige URLs in WebView anzeigen, nichts Besonderes. Das Hinzufügen
android:usesCleartextTraffic="true"
zu Manifest hat also funktioniert, aber wir wollten die Sicherheit der gesamten App dafür nicht gefährden. Das Update bestand also darin, die Links vonhttp
nach zu ändernhttps
quelle
Für React Native-Projekte
Es wurde bereits auf RN 0,59 behoben. Sie finden beim Upgrade einen Unterschied von 0,58,6 auf 0,59. Sie können ihn anwenden, ohne Ihre RN-Version zu aktualisieren. Führen Sie die folgenden Schritte aus:
Dateien erstellen:
android / app / src / debug /res/xml/react_native_config.xml -
android / app / src / debug /AndroidManifest.xml -
Überprüfen Sie die akzeptierte Antwort, um die Grundursache zu ermitteln.
quelle
Okay, ich habe das herausgefunden. Es ist auf den Manifest-Parameter zurückzuführen
android:targetSandboxVersion="2"
, den ich hinzugefügt habe, da wir auch eine Instant App-Version haben. Er sollte sicherstellen, dass der Benutzer bei der Übertragung seine Daten nicht verliert, wenn er einmal von der Instant App auf die reguläre App aktualisiert hat. Wie aus der vagen Beschreibung hervorgeht:Es fügt natürlich auch eine neue Sicherheitsstufe hinzu, zumindest unter Android 8.
quelle
Ich habe diese Zeile aus der Android-Manifest-Datei entfernt, die bereits vorhanden ist
und hinzugefügt
Dies erfolgt im Anwendungs-Tag im Manifest
dann ist dieser Fehler Klartext-HTTP-Verkehr zu overlay.openstreetmap.nl nicht erlaubt für mich in Android 9 und 10. Ich hoffe, dass dies für Android 8 auch funktioniert, wenn es Ihnen geholfen wird, vergessen Sie nicht, abzustimmen, danke
quelle
Um diese verschiedenen Antworten anzuwenden
Xamarin.Android
, können Sie Attribute auf Klassen- und Assembly-Ebene verwenden, anstatt die manuell zu bearbeitenAndroidManifest.xml
Eine Internet-Erlaubnis ist natürlich erforderlich (duh ..):
Hinweis: In der Regel werden Ihrer
AssemblyInfo.cs
Datei Attribute auf Baugruppenebene hinzugefügt , jedoch alle Dateien unterhalbusing
und oberhalb dernamespace
Werke.Anschließend können Sie in Ihrer Anwendungsunterklasse (bei Bedarf eine erstellen)
NetworkSecurityConfig
mit einem Verweis auf eineResources/xml/ZZZZ.xml
Datei hinzufügen :Erstellen Sie eine Datei im
Resources/xml
Ordner (erstellen Sie denxml
Ordner bei Bedarf).Beispieldatei
xml/network_security_config
, nach Bedarf anpassen (siehe andere Antworten)Sie können den
UsesCleartextTraffic
Parameter auch verwenden fürApplicationAttribute
:quelle
UsesCleartextTraffic = true
Beim Entwickeln meiner Anwendung wird außerdem der gleiche Fehler "Klartext-HTTP-Verkehr nicht zulässig" angezeigt. Ich verwende Retrofit2 für Netzwerkanrufe in meiner Anwendung und habe zwei Projektumgebungen (Entwickler und Produktion). Meine Produktionsdomäne verfügt über ein SSL-Zertifikat mit HTTPS-Aufrufen, und der Entwickler verfügt nicht über https. Die Konfiguration wird in den Build-Varianten hinzugefügt. Wenn ich jedoch zu dev wechsle, wird dieses Problem ausgelöst. Deshalb habe ich die folgende Lösung hinzugefügt.
Ich habe dem Manifest Klartextverkehr hinzugefügt
Dann habe ich eine Verbindungsspezifikation in der Erstellungszeit der Nachrüstkonfigurationsklasse OKHttp hinzugefügt.
Die vollständige OkHttpClient-Erstellung ist unten angegeben
quelle
Update Dezember 2019 ionisch - 4.7.1
Bitte fügen Sie den obigen Inhalt in die XML-Datei des Android-Manifests ein
Frühere Versionen von ionic
Stellen Sie sicher, dass Sie in Ihrem
config.xml
Ionic-Projekt Folgendes haben :Führen Sie ionisches Cordova Build Android aus. Es erstellt einen Android-Ordner unter Plattformen
Öffnen Sie Android Studio und öffnen Sie den Android-Ordner in unserem Projekt project-platform-android. Lassen Sie es einige Minuten lang stehen, damit sich der Gradle bildet
Nachdem dies abgeschlossen
gradle build
ist, erhalten wir einige Fehler beim EinfügenminSdVersion
inmanifest.xml
. Nun , was wir tun , ist nur Entfernen<uses-sdk android:minSdkVersion="19" />
vonmanifest.xml
.Stellen Sie sicher, dass es von beiden Standorten entfernt ist:
AndroidManifest.xml
.AndroidManifest.xml
.Versuchen Sie nun erneut, den Gradle zu erstellen, und jetzt wird er erfolgreich erstellt
Stellen Sie sicher, dass Sie im Anwendungs-Tag unter App → Manifest → Folgendes haben
Androidmanifest.xml
:Öffnen Sie
network_security_config
(App → res → xml →network_security_config.xml
).Fügen Sie den folgenden Code hinzu:
Hier
xxx.yyyy.com
ist der Link Ihrer HTTP-API. Stellen Sie sicher, dass Sie kein HTTP vor der URL einfügen.Hinweis: Erstellen Sie die App jetzt mit Android Studio (Build - Build Bundles / APK - Build APK). Jetzt können Sie diese App verwenden und sie funktioniert einwandfrei in Android Pie. Wenn Sie versuchen, eine App mit ionic Cordova build android zu erstellen, werden alle diese Einstellungen überschrieben. Stellen Sie daher sicher, dass Sie Android Studio zum Erstellen des Projekts verwenden.
Wenn Sie ältere Versionen der App installiert haben, deinstallieren Sie sie und probieren Sie es aus. Andernfalls wird ein Fehler angezeigt:
quelle
Erstellen Sie die Datei res / xml / network_security.xml
In network_security.xml ->
Öffnen Sie AndroidManifests.xml:
quelle
Dies geschieht aus Sicherheitsgründen. Wenn möglich, sollten Sie immer lieber HTTPS (HTTP Secure ) verwenden.
Sie können mehr darüber lesen Sie hier
Abhängig von Ihrem Zustand gibt es mehrere Lösungen für dieses Problem.
Wenn Sie versuchen, mit einem Erstanbieter-Dienst zu kommunizieren, ist IE: Ihr eigener Webserver
Serverseite: Sie sollten diesem Server HTTPS-Unterstützung hinzufügen und HTTPS anstelle von HTTP verwenden. Heutzutage können Sie dies sogar kostenlos mit Diensten wie LetsEncrypt und anderen tun.
Clientseitig: Wenn Sie
HttpURLConnection
dasjava.net
Paket verwenden, zuHttpsURLConnection
dem Sie wechseln könnenjava.net.ssl
, verfügt es über eine ähnliche, wenn nicht identische API, sodass der Wechsel mühelos erfolgen sollte.Wenn Sie einen Drittanbieter wie Google, Facebook, einen Wetterdienst usw. verwenden.
Falls der Dienst, mit dem Sie kommunizieren, HTTPS unterstützt (was höchstwahrscheinlich der Fall ist), können Sie einfach Ihre Anforderungs-URL von
http://abc.xyz
in ändernhttps://abc.xyz
.Als letztes Mittel können Sie diese Antwort verwenden , wenn der Drittanbieter-Service, mit dem Sie kommunizieren möchten, HTTPS oder eine andere Form der sicheren Kommunikation nicht unterstützt. Dies wird jedoch nicht empfohlen, da dies den Zweck dieses dringend benötigten Ziels zunichte macht Sicherheitsfunktion.
quelle
In meinem Fall funktioniert diese URL auch im Browser nicht.
Ich überprüfe mit https://www.google.com/
Und es hat bei mir funktioniert.
quelle
Fügen Sie einfach android hinzu: usingCleartextTraffic = "true" in der Datei in AndroidManifest.xml
quelle
Stellen Sie für Xamarin.Android- Entwickler sicher, dass die HttpClient-Implementierung und SSL / TLS auf Standard gesetzt sind.
Es finden Sie unter Andorid-Optionen -> Erweiterte Android-Optionen.
quelle
Während die funktionierende Antwort für mich die von @PabloCegarra war:
Möglicherweise erhalten Sie eine Sicherheitswarnung bezüglich der
cleartextTrafficPermitted="true"
Wenn Sie die Domains zur "weißen Liste" kennen, sollten Sie sowohl die akzeptierte als auch die obige Antwort mischen:
Dieser Code funktioniert für mich, aber meine App muss nur Daten von books.google.com abrufen. Auf diese Weise verschwindet die Sicherheitswarnung.
quelle
Dann 2 Schritt: -> Manifest innerhalb des Manifest-Anwendungs-Tags hinzufügen
// Schritt 4 - >> Drawable erstellen >> XML-Datei >> Name als >> network_security_config.xml
quelle
Upgrade auf React Native 0.58.5 oder höher. Sie haben
includeSubdomain
in ihren Konfigurationsdateien in RN 0.58.5.Änderungsprotokoll
In Rn 0.58.5 haben sie
network_security_config
mit ihrer Serverdomäne deklariert . Durch die Netzwerksicherheitskonfiguration kann eine App Klartextverkehr von einer bestimmten Domäne zulassen. Sie müssen also keinen zusätzlichen Aufwand betreiben, indem Sieandroid:usesCleartextTraffic="true"
das Anwendungstag Ihrer Manifestdatei deklarieren . Es wird automatisch nach dem Upgrade der RN-Version behoben.quelle
Nach der Änderung der API-Version 9.0 wird der Fehler Klartext-HTTP-Verkehr zu YOUR-API.DOMAIN.COM nicht zugelassen (targetSdkVersion = "28"). in xamarin, xamarin.android und android studio.
Zwei Schritte, um diesen Fehler in xamarin, xamarin.android und android studio zu beheben.
Schritt 1: Erstellen Sie die Dateiressourcen / xml / network_security_config.xml
In network_security_config.xml
Schritt 2: Aktualisieren Sie AndroidManifest.xml -
Fügen Sie android: networkSecurityConfig = "@ xml / network_security_config" am Anwendungstag hinzu. z.B:
quelle
Das Hinzufügen dieses Parameters im Header hat mein Problem in apiSauce React Native behoben
quelle
Wenn Sie ionic verwenden und diesen Fehler während des nativen http- Plugins erhalten, muss die folgende Korrektur durchgeführt werden:
gehe zu
resources/android/xml/network_security_config.xml
Ändere es zu-Das hat bei mir funktioniert!
quelle
Das Hinzufügen von ... android: usingCleartextTraffic = "true" ... zu Ihrer Manifestdatei scheint das Problem zu beheben, birgt jedoch eine Bedrohung für die Datenintegrität.
Aus Sicherheitsgründen habe ich Manifest-Platzhalter mit android: usingCleartextTraffic in der Manifest-Datei verwendet (wie in Option 3 der akzeptierten Antwort, dh @ Hrishikesh Kadams Antwort), um nur Klartext in der Debug-Umgebung zuzulassen.
In meiner Datei build.gradle (: app) habe ich einen Manifest-Platzhalter wie den folgenden hinzugefügt:
Beachten Sie den Platzhalternamen cleartextTrafficPermitted in dieser Zeile oben
Dann habe ich in meinem Android-Manifest denselben Platzhalter verwendet ...
AndroidManifest.xml -
Damit ist Klartextverkehr nur in der Debug-Umgebung zulässig.
quelle
Wenn eine App über einen Klartext-Netzwerkverkehr wie HTTP ( nicht https ) mit Servern kommuniziert , kann dies das Risiko von Hacking und Manipulation von Inhalten erhöhen. Dritte können nicht autorisierte Daten einspeisen oder Informationen über die Benutzer verlieren. Aus diesem Grund wird Entwicklern empfohlen, nur Datenverkehr wie HTTPS zu sichern. Hier finden Sie die Implementierung und die Referenz zur Lösung dieses Problems.
quelle
Versuchen Sie, die URL mit "https: //" anstelle von "http: //" zu treffen.
quelle
Ich benutze Cordova 8 mit Cordova-Plugin-Whitelist 1.3.4 und es ist Standardkonfiguration meiner App kein Zugang zum Internet und ich füge nur einen Parameter in der manifest.xml hinzu -> android: usingCleartextTraffic = "true"
Der Pfad des Hauptfestes hat sich in Cordova 8 geändert: platform / android / app / src / main / AndroidManifest.xml.
Das ist wirklich dumm, weil es offensichtlich ist, dass Ihre App Zugang zum Internet benötigt ....
quelle
Einfache und einfachste Lösung [Xamarin Form]
Android Project
, dann klicke aufProperties
,AssemblyInfo.cs
diesen Code und fügen Sie ihn genau dort ein:Verwendung
NSAppTransportSecurity
:Sie müssen den
NSAllowsArbitraryLoads
Schlüssel in Ihrer Datei aufYES
unterNSAppTransportSecurity
Wörterbuch setzeninfo.plist
.quelle