java - usescleartexttraffic - org apache http legacy android 9




Como permitir todos os tipos de conexão de rede HTTP e HTTPS no Android(9) Pie? (4)

Do Android 9 Pie agora, as solicitações sem criptografia nunca funcionarão. Por padrão, o sistema espera que você use o TLS por padrão. Você pode ler este recurso aqui Então, se você só fizer solicitações via HTTPS, você está seguro. Mas e os aplicativos que fazem solicitações por meio de sites diferentes, por exemplo, aplicativos semelhantes a navegadores.

Como posso ativar solicitações para todos os tipos de conexões HTTP e HTTPS no Android 9 Pie?


A solução totalmente funcional para usuários React-native Android ou do React-native que enfrentam esse problema é apenas adicionar este android:usesCleartextTraffic="true" no arquivo AndroidManifest.xml como este:

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

entre a tag <application> .. </application> desta forma:

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

A maneira mais fácil de implementar isso é usar esse atributo no seu AndroidManifest.xml onde você permite todas as solicitações http para todas as solicitações:

android:usesCleartextTraffic="true"

Mas caso você queira mais configurações para links diferentes, por exemplo, permitindo http para alguns domínios, mas não para outros domínios, você deve fornecer o arquivo networkSecurityConfig .

Para fazer isso no Android 9 Pie, você terá que definir um networkSecurityConfig na tag do seu application Manifest assim:

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




    </application>
</manifest>

Então, na sua pasta xml você agora tem que criar um arquivo chamado network_security_config da mesma maneira que você nomeou no Manifesto e a partir daí o conteúdo do seu arquivo deve ser assim para habilitar todas as requisições sem criptografias:

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

De lá você é bom para ir. Agora seu aplicativo fará solicitações para todos os tipos de conexões. Para informações adicionais sobre este tópico, leia aqui .


Para aplicativos React Native durante a execução na depuração, inclua o xml block mencionado por @Xenolion em react_native_config.xml localizado em <project>/android/app/src/debug/res/xml

Semelhante ao seguinte 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>

Uma maneira simples é definir android:usesCleartextTraffic="true" em você AndroidManifest.xml

android:usesCleartextTraffic="true"

Seu AndroidManifest.xml parece

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

Eu espero que isso te ajude.





android-network-security-config