android 非SSL通信を有効にするには

targetSdkLevel=28にアップデートしたアプリを、AVD APIレベル=28、Android 9.0で動かしていたら、次のようなエラーで、ネットワーク通信に失敗していました。

W/System.err: java.io.IOException: Cleartext traffic not permitted: http://xxx

そのURLは、クリアテキスト、つまり暗号化していない通信は許可されていない、とのこと。APIレベル=28、Android 9.0以降、デフォルトで非SSL通信はできないんですね。

アプリが使っているURLのほとんどは、すでにhttpsに対応していました。リソース定義の文字列を、httpsに置き換えるだけですみました。

しかし、いくつかのURLはhttpsには対応していないので、アプリで非SSL通信を有効にしなくてはなりません。

そのためには、次の2つの設定をします。

(1)res/xml/network_security_config.xml を新規作成します。ここに、非SSLを許可したいURLを指定します。複数を指定できます。

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">example.jp</domain>
        <domain includeSubdomains="true">example.com</domain>
    </domain-config>
</network-security-config>Code language: HTML, XML (xml)

(2)AndroidManifest.xml の <application>に、さきほど作ったnetwork_security_config.xmlを指定します。

<application
    ...
    android:networkSecurityConfig="@xml/network_security_config"Code language: HTML, XML (xml)

参考URL

タイトルとURLをコピーしました