Як дозволити всі типи мережевих підключень HTTP та HTTPS в Android (9) Pie?


144

З Android 9 Pie зараз запити без шифрування ніколи не працюватимуть. І за замовчуванням система очікує, що ти будеш використовувати TLS за замовчуванням. Ви можете прочитати цю функцію тут. Отже, якщо ви робите запити лише через HTTPS, ви в безпеці. А як щодо додатків, які роблять запити на різних сайтах, наприклад, у програмах, схожих на браузер.

Як я можу включити запити до всіх типів підключень HTTP та HTTPS в Android 9 Pie?

Відповіді:


250

Найпростіший спосіб здійснити це - використовувати цей атрибут для вашого місця, AndroidManifest.xmlде ви дозволяєте всі httpдля всіх запитів:

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

Але якщо ви хочете отримати ще кілька конфігурацій для різних посилань, наприклад, httpдля деяких доменів, але не для інших доменів, ви повинні надати res/xml/networkSecurityConfig.xmlфайл.

Для цього в Android 9 Pie потрібно встановити тег networkSecurityConfigу своєму Manifest applicationтаким чином:

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




    </application>
</manifest>

Тоді у вашій xmlпапці тепер потрібно створити файл, названий network_security_configтак, як ви його назвали в Manifest, і звідти вміст вашого файлу повинен бути таким, щоб увімкнути всі запити без шифрування:

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

Звідти вам добре поїхати. Тепер ваш додаток буде запитувати всі типи підключень. Додаткову інформацію з цієї теми читайте тут .


1
@Xenolion Після внесення цих змін (за допомогою програми React Native) він більше не створюється. "Злиття маніфесту не вдалося". "Attribute application @ networkSecurityConfig value = (@ xml / react_native_config) від AndroidManifest.xml: 7: 7-67 також присутній на AndroidManifest.xml: 7: 7-67 value = (@ xml / network_security_config). Будь-які ідеї?
Wyatt

@Wyatt im має те саме питання, що і ви, чи знайшли ви якесь рішення?
Данте Сервантес

1
@DanteCervantes перевірити мою відповідь вище.
Harshit Agrawal

3
Де я можу знайти папку xml у реагуванні на рідний проект
CraZyDroiD

2
Витрачайте багато часу, щоб зрозуміти, що це насправді проблема HTTP. Зазвичай він показує ERROR на HTTP ВІДПОВІДІ
Mihir Бхатт

30

ПОВНІСТЮ РОБОЧА РІШЕННЯ для обох Androidабо React-nativeкористувачів стикаються це питання просто додати це android:usesCleartextTraffic="true" в AndroidManifest.xml файл , як це:

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

між <application>.. </application>тегом так:

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

2
Нічого, дякую, що він працює добре в моєму додатку, перш ніж його вирішити проблему з
Venkatesh

1
якщо ви tools:ignoreпомилитесь, не забудьте додати xmlns:tools="http://schemas.android.com/tools"всередині свого application. Так<application xmlns:tools="http://schemas.android.com/tools" ...
Ziyo

2
Я знаю, що це питання для Android, але це може допомогти для рідних розробників-реагувачів, рішення ios - додати NSAppTransportSecurityдо info.plist. stackoverflow.com/questions/38418998/…
Abdul Sadik Yalcin

16

Простий спосіб встановлений android:usesCleartextTraffic="true"на васAndroidManifest.xml

android:usesCleartextTraffic="true"

Твій AndroidManifest.xmlзовнішній вигляд

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

Я сподіваюся, що це вам допоможе.


10

Легкий шлях

Додати usesCleartextTrafficв AndroidManifest.xml

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

Вказує, чи додаток має намір використовувати мережевий трафік чіткого тексту, наприклад, HTTP-адрес Cleartext. Значення за замовчуванням для програм, які орієнтуються на рівень API 27 або нижче, є "вірно". Програми, які націлюють API рівня 28 або вище на "false".


8

Просто встановіть usesCleartextTrafficпрапор у тезі програми AndroidManifest.xml. Не потрібно створювати конфігураційний файл для Android.

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

7

Для React Nativeдодатків під час роботи з налагодженням додайте xml blockзгаданий @Xenolion до react_native_config.xmlрозташованого в<project>/android/app/src/debug/res/xml

Аналогічно наступному фрагменту:

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

1

У мене така ж проблема, і я помічаю, що мій конфігуратор безпеки має різні TAGS, як говорить відповідь @Xenolion

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

тому я змінюю TAGS на "domain-config" на "base-config" і працює так:

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

Будь ласка , ви можете відповісти на цей stackoverflow.com/questions/59116787 / ...
Pratik Джайсвал

0

Ви можете перевірити, чи ви надсилаєте clearText через HTTP Fix: https://medium.com/@son.rommer/fix-cleartext-traffic-error-in-android-9-pie-2f4e9e2235e6
АБО
У випадку клієнта Apache HTTP припинення роботи (від Google). За допомогою Android 6.0 ми видалили підтримку клієнта Apache HTTP. Починаючи з Android 9, ця бібліотека видаляється з завантажувального курсу та не доступна для додатків за замовчуванням. Щоб продовжувати користуватися HTTP-клієнтом Apache, програми, націлені на Android 9 і новіші версії, можуть додавати наступне у свій AndroidManifest.xml

Джерело https://developer.android.com/about/versions/pie/android-9.0-changes-28

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.