Androidアプリ開発をしていた時に、下記のエラーが発生してHTTPリクエストが失敗してしまうことがあったので、今後の為にメモ。
D/NetworkSecurityConfig: No Network Security Config specified, using platform default
W/System.err: java.io.IOException: Cleartext HTTP traffic to "接続先ホスト" not permitted
Android 9.0未満ではHTTPリクエストが成功する
今回のエラーは、Android9.0の端末のみで発生しました。
Android8.1など、Android9.0未満では発生しなかったので、Android9.0以上で発生する問題だと思われます。
調べた感じだと、Android9.0以上でHTTPのサイトと通信を行う場合、接続先のドメインを許可する、ネットワークセキュリティ設定が必要になったようです。
(おそらく、HTTP通信の場合のみ必須で、HTTPS通信の場合はそのままでも通信は成功するっぽい)
android-developers.googleblog.com
Android 9.0で「No Network Security Config specified」エラーでHTTPリクエストが失敗する場合の対処法
上記を参考に、ネットワークセキュリティ設定をしてみました。
やり方としてはまず、res以下にxmlフォルダを作成して、下記のような内容のnetwork_security_config.xmlを配置します。
//network_security_config.xml <?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">HTTP通信を許可するドメイン</domain> </domain-config> </network-security-config>
次に、AndroidManifest.xmlから先ほど作成したnetwork_security_config.xmlをリンクさせればOKです。
//AndroidManifest.xml <application android:networkSecurityConfig="@xml/network_security_config"> </application>
上記の作業でAndroid9.0の端末でもHTTP通信が成功するようになりました。