Android (9) Pie'da tüm Ağ bağlantı türlerine HTTP ve HTTPS nasıl izin verilir?


145

Android 9 Pie'dan şimdi, şifrelemesiz istekler hiçbir zaman çalışmaz. Ve varsayılan olarak, Sistem varsayılan olarak TLS kullanmanızı bekler. Bu özelliği buradan okuyabilirsiniz. Dolayısıyla yalnızca HTTPS üzerinden istekte bulunursanız güvendesiniz. Ancak, farklı sitelerden, örneğin tarayıcı benzeri uygulamalar üzerinden istekte bulunan uygulamalar hakkında.

Android 9 Pie'da her türlü bağlantı HTTP ve HTTPS isteklerini nasıl etkinleştirebilirim?

Yanıtlar:


251

Bunu uygulamanın kolay yolu, bu özelliği tüm isteklerde hepsine AndroidManifest.xmlizin verdiğiniz yerde kullanmaktır http:

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

Ancak farklı bağlantılar için daha fazla yapılandırma istiyorsanız , httpbazı alanlara izin verir ancak diğer alanlara izin vermezseniz res/xml/networkSecurityConfig.xmldosya sağlamanız gerekir .

Bunu Android 9 Pie'da yapmak networkSecurityConfigiçin Manifest applicationetiketinizde şu şekilde bir ayar yapmanız gerekir :

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




    </application>
</manifest>

Daha sonra xmlklasörünüzde şimdi network_security_configManifest'te adını verdiğiniz gibi bir dosya oluşturmanız gerekir ve oradan dosya içeriğinizin şifreleme olmadan tüm istekleri etkinleştirmek için şu şekilde olması gerekir:

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

Oradan gitmek güzel. Şimdi uygulamanız her türlü bağlantı için istekte bulunacaktır. Bu konu hakkında ek bilgi için burayı okuyun .


1
@ Xenolion Bu değişiklikleri yaptıktan sonra (React Native uygulamasıyla) artık oluşturulmuyor. Msgstr "Manifest birleşmesi başarılı değil". "AndroidManifest.xml gelen networkSecurityConfig değeri = (@ XML / react_native_config) 'Özellik uygulaması: 7: 7: 7-67 AndroidManifest.xml de de mevcut olduğu 7-67 değeri = (@ XML / network_security_config) herhangi bir fikir.?
Wyatt

@Wyatt seninle aynı sorunu yaşıyorum, herhangi bir çözüm buldun mu?
Dante Cervantes

1
@DanteCervantes yukarıdaki cevabımı kontrol et.
Harshit Agrawal

3
Reaksiyon yerel projesinde xml klasörünü nerede bulabilirim
CraZyDroiD

2
Bunun aslında HTTP sorunu olduğunu anlamak için çok zaman harcayın. normalde HTTP YANITINDA HATA gösterir
Mihir Bhatt

30

TAMAMEN ÇALIŞMA ÇÖZÜM ikisi için Androidveya React-nativebu durumla karşı karşıyadır kullanıcılar sadece bu eklenti android:usesCleartextTraffic="true" içinde AndroidManifest.xml böyle dosyası:

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

arasında <application>.. </application>etiketini şöyle:

<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
Wow şimdi onun i / o hatası sorunu şimdi çözüldü önce benim app çalışma iyi teşekkürler
Venkatesh

1
tools:ignorehata alırsanız , xmlns:tools="http://schemas.android.com/tools"içine eklediğinizden emin olun application. Gibi<application xmlns:tools="http://schemas.android.com/tools" ...
Ziyo

2
Bu bir android soru olduğunu biliyorum ama tepki yerli geliştiriciler için yardımcı olabilir, ios çözüm NSAppTransportSecurityinfo.plist için eklemektir . stackoverflow.com/questions/38418998/…
Abdul Sadik Yalcin

16

Basit bir yolu ayarlanır android:usesCleartextTraffic="true"sanaAndroidManifest.xml

android:usesCleartextTraffic="true"

Sizin AndroidManifest.xmlgibi bakmak

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

Umarım bu sana yardımcı olmuştur.


10

Kolay yol

Ekle usesCleartextTrafficiçin AndroidManifest.xml'de

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

Uygulamanın, açık metin HTTP gibi açık metin ağ trafiği kullanmak isteyip istemediğini gösterir. API düzeyi 27 veya daha düşük bir değeri hedefleyen uygulamalar için varsayılan değer "true" dur. API düzeyi 28 veya daha üstünü varsayılan olarak "false" olarak hedefleyen uygulamalar .


8

Sadece dosyanın usesCleartextTrafficuygulama etiketinde bayrak ayarlayın AndroidManifest.xml. Android için yapılandırma dosyası oluşturmaya gerek yok.

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

7

İçin React Nativeuygulamalarda hata ayıklama çalışırken eklemek xml blockiçin @Xenolion bahsettiği react_native_config.xmlbulunan<project>/android/app/src/debug/res/xml

Aşağıdaki snippet'e benzer:

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

aynı sorunu aldım ve güvenlik yapılandırmamın @Xenolion cevabının söylediği gibi farklı ETİKETLER olduğunu fark ettim

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

bu yüzden "base-config" için TAGS "domain-config" değiştirir ve şöyle çalışır:

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


0

ClearText'i HTTP Fix üzerinden gönderip göndermediğinizi kontrol edebilirsiniz: https://medium.com/@son.rommer/fix-cleartext-traffic-error-in-android-9-pie-2f4e9e2235e6
VEYA
Apache HTTP istemcisi durumunda kullanımdan kaldırma (Google'dan): Android 6.0 ile Apache HTTP istemcisi desteğini kaldırdık. Android 9'dan başlayarak, bu kütüphane önyükleme sınıfından kaldırılır ve varsayılan olarak uygulamalar tarafından kullanılamaz. Apache HTTP istemcisini kullanmaya devam etmek için Android 9 ve sonraki sürümlerini hedefleyen uygulamalar AndroidManifest.xml dosyalarına aşağıdakileri ekleyebilir:

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.