EULA ダイアログ用モジュール

アプリのインストール後の初期画面で、ライセンス条項(EULA: End User License Agreement)を表示して、承認を求めるダイアログ(DialogFragment)をライブラリーモジュールとして実装してみた。

基本は DialogFragment なので、下端の Yes/No のボタンに関する挙動と、ダイアログに表示するライセンス条項に関するコーディングが主となっている。

Activity への組み込み方

MainActivity の onCreate 内の処理のかなり初期の段階で


@Override
protected void onCreate(Bundle savedInstanceState) {
    (...)
    EulaDialogFragment.checkLicense(this);
    (...)
}

という感じで使う。最新バージョンのライセンスが未受諾であれば、DialogeFragment が実体化される。

また、MainActivity 側では、イベントリスナー(後述)を実装することで、拒絶された場合にアプリを終了する等の挙動を組み込むことができる。


public class MainActivity extends AppCompatActivity
        implements EulaDialogFragment.Listener {
    
    (...)

    @Override
    public void onDialogPositiveClick(DialogFragment dialog, long eulaVersion) {
        Bundle params = new Bundle();
        params.putLong("EULA", eulaVersion);
        params.putBoolean("accepted", true);
        firebaseAnalytics.logEvent("Installation", params);
    }

    @Override
    public void onDialogNegativeClick(DialogFragment dialog, long eulaVersion) {
        Bundle params = new Bundle();
        params.putLong("EULA", eulaVersion);
        params.putBoolean("rejected", false);
        firebaseAnalytics.logEvent("Installation", params);

        finish();
    }
}

Yes/No のボタンに関する挙動

Yes/No の場合それぞれにおいてコールバックを返すようにしてあるので、MainActivity 側でリスナーを定義すれば、それぞれに応じた後処理を定義できるようにしている。

主な用途は、No の場合にアプリ自体を終了するような処理だが、他にも、FirebaseAnalytics を使っている場合には、それぞれの場合のイベントを記録するようなこともできる。

ライセンス条項の表示

リンクをクリックすると String リソースから読み込んだ実際の条項が表示されるようになっている。この辺りは純粋にビューに関する話なので割愛する。

ライセンス条項の表示

ライセンス条項がアップデートされることも想定し、String リソースには YYYYMMDD の形式でバージョン情報を保持している。ライセンスを受諾した場合はバージョンが SharedPreferences に保持されるようにし、既存のバージョン(存在する場合)と比較して、最新のバージョンの受諾がされているかをチェックする。

※ 以前は、このモジュールの BuildConfig.VERSION_CODE を利用して最新性チェックしていたが、Android Gradle plugin 4.1.0 によって、もはやライブラリーモジュールの独立した BuildConfig.VERSION_CODE は作成されないようになった(参照:Version properties removed from BuildConfig class in library projects)。そのため、String リソースに直接、YYYYMMDD の形式で記載し、ライセンス文内容のバージョンを管理することにした。

モジュールとしての使用

モジュール化してあるので、アプリ側では、build.gradle で implementation を記述し、Activity の onCreate で static メソッドをトリガーし、Yes/No の場合の後処理を記述するだけで、あとは特に気にせずお任せ状態で使える。DialogFragment を実体化して、FragmentManager を使って管理するコードもすべてモジュール側の static メソッドの中で処理しているので、Activity 側のコードを汚す必要がない。

ライセンス文を更新する場合は、モジュール側の String リソースの該当部分を修正するだけでよい。

コメント

このブログの人気の投稿

OpenWrt での Wi-Fi 設定

清水俊史『上座部仏教における聖典論の研究』

シークエンスパパとも 本物の霊能力