Help us understand the problem. What is going on with this article?

Androidアプリの初回起動判定

パーソンリンクアドベントカレンダー、17日目の投稿です:clap:
本日は、Androidアプリのバージョン周りについて書きます。よろしくお願い致します。

はじめに

Java, Android Studio 共に初心者ですので間違い等ありましたら、わかる方コメント頂けますと幸いです。
現在使っているバージョンはこちらになります。
Android Studio : 3.4.2

Version NameとVersion Code

アプリやソフトウェアで"1.3.2"といったバージョン情報を目にすることがあるかと思います。
Android Studio ではこれをVersion Nameと言い、製作者が編集できるようになっています。
一般的に
1桁目:メジャーバージョン
2桁目:マイナーバージョン
3桁目:マイナーマイナーバージョン
と呼ばれます。

それに対してVersion Codeは更新した回数をインクリメントしていきます。
シンプルに更新回数を見るために必要なものとなります。

Version Nameはあくまで名前ですので、推奨はされていないと思いますがアップデートしても変更しない事も可能です。

これらの情報はbuild.gradleに記述します。
build.gradleのVersion Codeを書き換えると、その他書き換え処理等が必要な場所を自動で更新してくれます。助かりますねぇ

初回起動判定

アプリをダウンロードして初めて開いたという初回起動の判定を行います。
SharedPreferencesはそのアプリのバージョンなどの設定情報を管理するものになります。
データの書き込みにはeditorで編集、applyやcommitで保存します。
データの取得にはgetを使います。(この辺りはSharedPreferencesについて検索してみてください)

first.java
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;

//設定関連クラス
public class PreferencesUtil {

    // 設定値の識別子
    private enum Key {
        IS_FIRST
    }

    //初回起動かどうかの判定
    public static boolean isFirstJudgment(Context context) {
        return getSharedPreferences(context).getBoolean(Key.IS_FIRST.name(), true);
    }

   //初回起動フラグの設定
    public static void setFirstFlag(Context context, boolean isFirst) {
        Editor edit = getSharedPreferences(context).edit();
        edit.putBoolean(Key.IS_FIRST.name(), isFirst);
        edit.apply();
    }
}

初回起動か判定をしたい時にはisFirstJudgmentメソッドを呼び出します。
この場合ではtrueの場合初回起動であるとしています。

初回起動された後にはtrue->falseにする事で次回起動時は初回起動ではないと判断されます。
その際は下記のようにしてfalseにしてあげます。

PreferencesUtil.setApplicationFirst(getApplicationContext(), false);

アップデート後の初回起動判定

Version Codeがインクリメントされた事をトリガーにして、アップデート後の初回起動の判定を行います。

update.java
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;

//設定関連クラス
public class PreferencesUtil {

    public static boolean isLastVersion(Context context) {
        //現在のバージョンを取得する
        int currentCode = getSharedPreferences(context).getInt("VersionCode", 1);
        //最新のバージョンを取得する
        int latestCode = ApplicationUtil.getVersionCode(context);

        //現在と最新のバージョンを比較
        if (latestCode > currentCode) {
            return true;
        } else {
            return false;
        }
    }
}

currentCodeが最後に保存された端末内のVersion Codeになります。
latestCodeがダウンロードされた最新のVersion Codeを取得しています。
この二つの変数を比較する事で最新版かどうかの判定をしています。

この場合、trueであればアップデート後、初回起動ということになりますね。
その後、currentCodeにlatestCodeの値を導入してあげることでこれ以降はfalseが帰ってくるようになります。

まとめ

これらの処理は一度だけ、プッシュ通知の設定、プライバシーポリシー同意のポップアップを出したり、アップデートした点をお知らせするといった事をする為に用いることができます!

ということで本日の記事はこれで以上になります。
明日は@kuwakuwakuwaさんです。よろしくお願い致します!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away