Wie erlaube ich alle Netzwerkverbindungstypen HTTP und HTTPS in Android (9) Pie?

144

Ab Android 9 Pie funktionieren Anfragen ohne Verschlüsselung nie mehr. Standardmäßig erwartet das System, dass Sie standardmäßig TLS verwenden. Sie können diese Funktion hier lesen. Wenn Sie also nur Anfragen über HTTPS stellen, sind Sie sicher. Aber was ist mit Apps, die Anfragen über verschiedene Websites stellen, beispielsweise browserähnliche Apps?

Wie kann ich Anforderungen für alle Arten von Verbindungen HTTP und HTTPS in Android 9 Pie aktivieren?

Xenolion
quelle

Antworten:

250

Die einfache Möglichkeit, dies zu implementieren, besteht darin, dieses Attribut für Ihr zu verwenden, in AndroidManifest.xmldem Sie alle httpfür alle Anforderungen zulassen :

<application android:usesCleartextTraffic="true">
</application>

Wenn Sie jedoch beispielsweise weitere Konfigurationen für verschiedene Links wünschen und httpeinige Domänen, jedoch keine anderen Domänen zulassen, müssen Sie eine res/xml/networkSecurityConfig.xmlDatei bereitstellen .

Um dies in Android 9 Pie zu tun, müssen Sie networkSecurityConfigin Ihrem Manifest- applicationTag Folgendes festlegen :

<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
    <application android:networkSecurityConfig="@xml/network_security_config">




    </application>
</manifest>

Dann müssen Sie in Ihrem xmlOrdner jetzt eine Datei erstellen, die network_security_configgenau so benannt ist, wie Sie sie im Manifest benannt haben. Von dort aus sollte der Inhalt Ihrer Datei so sein, dass alle Anforderungen ohne Verschlüsselung aktiviert werden:

<?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>

Von dort aus können Sie loslegen. Jetzt stellt Ihre App Anfragen für alle Arten von Verbindungen. Weitere Informationen zu diesem Thema finden Sie hier .

Xenolion
quelle
1
@Xenolion Nachdem ich diese Änderungen vorgenommen habe (mit einer React Native-Anwendung), wird sie nicht mehr erstellt. "Manifest Fusion nicht erfolgreich". "Das Attribut application @ networkSecurityConfig value = (@ xml / react_native_config) aus AndroidManifest.xml: 7: 7-67 ist auch unter AndroidManifest.xml: 7: 7-67 value = (@ xml / network_security_config) vorhanden. Irgendwelche Ideen?
Wyatt
@ Wyatt Ich habe das gleiche Problem wie Sie. Haben Sie eine Lösung gefunden?
Dante Cervantes
1
@DanteCervantes siehe meine Antwort oben.
Harshit Agrawal
3
Wo finde ich den XML-Ordner in
React
2
Verschwenden Sie viel Zeit, um herauszufinden, dass dies tatsächlich ein HTTP-Problem ist. Normalerweise zeigt es ERROR auf HTTP RESPONSE
Mihir Bhatt
30

Die voll funktionsfähige Lösung für beide Androidoder React-nativeBenutzer dieses Problem konfrontiert gerade dieses Add android:usesCleartextTraffic="true" in AndroidManifest.xml wie diese Datei:

android:usesCleartextTraffic="true"
tools:ignore="GoogleAppIndexingWarning">
<uses-library
    android:name="org.apache.http.legacy"
    android:required="false" />

dazwischen <application>.. </application>tag wie folgt:

<application
      android:name=".MainApplication"
      android:label="@string/app_name"
      android:icon="@mipmap/ic_launcher"
      android:allowBackup="false"
      android:theme="@style/AppTheme"
        android:usesCleartextTraffic="true"
        tools:ignore="GoogleAppIndexingWarning">
        <uses-library
            android:name="org.apache.http.legacy"
            android:required="false" />
      <activity
        android:name=".MainActivity"
        android:label="@string/app_name"/>
 </application>
Harshit Agrawal
quelle
2
Wow, danke, dass es in meiner App gut funktioniert, bevor das Problem mit dem I / O-Fehler behoben ist
Venkatesh,
1
Wenn Sie eine tools:ignoreFehlermeldung erhalten, stellen Sie sicher, dass Sie xmlns:tools="http://schemas.android.com/tools"in Ihrem hinzufügen application. Wie so<application xmlns:tools="http://schemas.android.com/tools" ...
Ziyo
2
Ich weiß, dass dies eine Android-Frage ist, aber für NSAppTransportSecurityreaktionsnative Entwickler hilfreich sein könnte. Die ios-Lösung besteht darin , info.plist hinzuzufügen . stackoverflow.com/questions/38418998/…
Abdul Sadik Yalcin
16

Ein einfacher Weg liegt android:usesCleartextTraffic="true"bei IhnenAndroidManifest.xml

android:usesCleartextTraffic="true"

Du AndroidManifest.xmlsiehst aus wie

<?xml version="1.0" encoding="utf-8"?>
<manifest package="com.dww.drmanar">
   <application
       android:icon="@mipmap/ic_launcher"
       android:label="@string/app_name"
       android:usesCleartextTraffic="true"
       android:theme="@style/AppTheme"
       tools:targetApi="m">
       <activity
            android:name=".activity.SplashActivity"
            android:theme="@style/FullscreenTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
       </activity>
    </application>
</manifest>

Ich hoffe, dies wird dir helfen.

Mehul Solanki
quelle
10

Einfacher Weg

In usesCleartextTrafficzu AndroidManifest.xml

<application
...
android:usesCleartextTraffic="true"
...>

Gibt an, ob die App Klartext-Netzwerkverkehr verwenden möchte, z. B. Klartext-HTTP. Der Standardwert für Apps, die auf API- Level 27 oder niedriger abzielen, ist "true". Apps, die auf API- Level 28 oder höher abzielen, sind standardmäßig "false".

Arshid KV
quelle
8

Setzen Sie einfach das usesCleartextTrafficFlag im Anwendungs-Tag der AndroidManifest.xmlDatei. Es ist nicht erforderlich, eine Konfigurationsdatei für Android zu erstellen.

 <application
   android:usesCleartextTraffic="true"
   .
   .
   .>
Asif Patel
quelle
7

Für React NativeAnwendungen beim Laufen im Debug hinzufügen , die xml blockvon @Xenolion erwähnt react_native_config.xmlbefindet sich in<project>/android/app/src/debug/res/xml

Ähnlich dem folgenden Snippet:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="false">localhost</domain>
        <domain includeSubdomains="false">10.0.2.2</domain>
        <domain includeSubdomains="false">10.0.3.2</domain>
    </domain-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </base-config>
</network-security-config>
Kaviyarasu Duraisamy
quelle
1

Ich habe das gleiche Problem und stelle fest, dass meine Sicherheitskonfiguration unterschiedliche TAGS hat, wie in der Antwort von @Xenolion angegeben

<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">localhost</domain>
    </domain-config>
</network-security-config>

Also ändere ich die TAGS "Domain-Konfiguration" für "Basis-Konfiguration" und funktioniert wie folgt:

<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">localhost</domain>
    </base-config>
</network-security-config>
Sandy Veliz
quelle
können Sie bitte diese stackoverflow.com/questions/59116787/…
pratik jaiswal
0

Sie können überprüfen, ob Sie clearText über HTTP Fix senden: https://medium.com/@son.rommer/fix-cleartext-traffic-error-in-android-9-pie-2f4e9e2235e6
ODER
Im Fall eines Apache HTTP-Clients Veraltet (von Google): Mit Android 6.0 haben wir die Unterstützung für den Apache HTTP-Client entfernt. Ab Android 9 wird diese Bibliothek aus dem Bootklassenpfad entfernt und steht Apps standardmäßig nicht zur Verfügung. Um den Apache HTTP-Client weiterhin zu verwenden, können Apps, die auf Android 9 und höher abzielen, Folgendes zu ihrer AndroidManifest.xml hinzufügen:

Quelle https://developer.android.com/about/versions/pie/android-9.0-changes-28

user11091094
quelle