PhoneGap Buildでアプリリリースしたもののhttp://アクセスでERR_CLEARTEXT_NOT_PERMITTEDエラーが発生
単価比較しながら買い物できる「単価でランキング!」というアプリを先日リリースしました。PhoneGap Buildで作った初めてのAndroidアプリです。
Google Play で「単価でランキング!」公開中です。
目次
端末によってhttp://のアクセスに失敗する!?
テストで一通りの動作を確認してのリリースでしたが、リリース後に別の端末でインストールしてみて不具合があることが発覚しました。
この「単価でランキング!」というアプリ、「使い方」説明を見るボタンがついていて、タップすると HTTP接続でWebページ上のドキュメントを参照する作りになっています。
このHTTP接続を行う部分で、以下のエラーが発生してしまったのでした。
「ウェブページへのアクセス不可」「net::ERR_CLEARTEXT_NOT_PERMITTED」
つまり「平文のウェブページにアクセスする許可が無い」ということでした。もう少しわかりやすく言うと「HTTPSなら良いがHTTPはダメ」ということです。
Android 8.0からの制約
このHTTP接続をデフォルトで許可しない制約はAndroid 8.0からの制約だそうです。昨今のHTTPからHTTPSへの移行を考えると当然の流れだとも思います。
テストで使用していた端末を調べると Android 7 でした。一方でリリース後にアプリをインストールした普段使いの端末はAndroid 9 でした。
これなら、テスト時はエラーなく、リリース後にエラーに気付いたのは納得がいきます。
ただ、現在アプリの使い方マニュアルを公開しているサーバーがHTTP接続にしか対応していないので、接続できない事には何の問題解決にもなりません。
PhoneGapでHTTP接続を許可する方法
PhoneGap (Cordovaも同様)では、アプリのルートディレクトりに、アプリケーションの設定を記述する config.xml という名前の設定ファイルがあります。
PhoneGapアプリからHTTP接続を許可する設定も、このconfig.xmlに記載します。
(1) manifestファイルにusesCleartextTraffic=”true” を加える
config.xmlのエンベロープ(ルート要素)である<widget>タグの要素しとして、以下の記述を加えます。
<config-file platform="android" parent="/manifest" mode="merge">
<application android:usesCleartextTraffic="true" />
</config-file>
(2) widgetにxmlns:androidを定義する
また、<widget>タグの属性にも以下の様に xmlns:android=”http://schemas.android.com/apk/res/android” の記載を加えておく必要があります。
<widget id="xxxx" version="1.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:gap="http://phonegap.com/ns/1.0" xmlns:android="http://schemas.android.com/apk/res/android">
これで対応は完了です。
再びアプリケーションをパッケージしてリリースすればHTTP通信ができる様になります。
今回リリースした単価比較アプリに興味をお持ちでしたら、以下 Google Playのアプリページをご確認ください。
Google Play で「単価でランキング!」公開中です。