単価比較しながら買い物できる「単価でランキング!」というアプリを先日リリースしました。PhoneGap Buildで作った初めてのAndroidアプリです。

Google Play で「単価でランキング!」公開中です。

端末によってhttp://のアクセスに失敗する!?

テストで一通りの動作を確認してのリリースでしたが、リリース後に別の端末でインストールしてみて不具合があることが発覚しました。

この「単価でランキング!」というアプリ、「使い方」説明を見るボタンがついていて、タップすると HTTP接続でWebページ上のドキュメントを参照する作りになっています。

このHTTP接続を行う部分で、以下のエラーが発生してしまったのでした。

ウェブページへのアクセス不可」「net::ERR_CLEARTEXT_NOT_PERMITTED

net::ERR_CLEARTEXT_NOT_PERMITTED
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 で「単価でランキング!」公開中です。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です