Android 9向けにCordovaで開発しているときに、HTTPリクエストを投げた時に以下のERR_CLEARTEXT_NOT_PERMITTEDエラーが発生してうまくいかない場合があります。
その対応方法についてです。
素のAndroidアプリを開発している場合は以下の記事が参考になると思います。
対策
config.xmlに追記
以下の内容をconfig.xmlに追加してあげます。これにより素のAndroidの開発をしているときにAndroidManifest.xmlに追記するのと同じような感じになります。
<platform name="android"></platform> <allow-intent href="market:*" /> <edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application"> <application android:usesCleartextTraffic="true" /> </edit-config> </platform>
<allow-intent />の部分はプラットフォームを追加した時からあると思いますので、その下に<edit-config ...を追加します。usesCleartextTrafficの設定値を真にすることでHTTP通信を許可するようにします。
以上を追加しただけでは以下のunbound prefixエラーが発生する場合があります。
FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':app:mergeDebugResources'. > java.util.concurrent.ExecutionException: com.android.builder.internal.aapt.v2.Aapt2Exception: Android resource compilation failed C:\...\config.xml:25: error: unbound prefix.
その場合は同じくconfig.xmlを少し編集します。多分xmlns:androidの属性と値がないはずですので追加します。
<widget id="アプリのID" version="アプリのバージョン" xmlns="http://www.w3.org/ns/widgets" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:cdv="http://cordova.apache.org/ns/1.0">
これでビルドすると先ほどのunbound prefixが解消し、HTTPでリクエストを投げてもエラーとならずに成功します!
なぜ発生する?
Android 9(Pie)よりHTTPS通信がデフォルトとなりましたのでHTTP通信(http://...)を行うことができなくなりました。これによりhttp://...でリクエストを投げた時にエラーが発生します。それをコンフィグから許可するようにしています。
個人開発や小規模の開発だとHTTPS化の敷居がちょっと高いのでちょっと手間になりましたね🤔
参考
以下のサイトを参考にしました。