初回起動時、アプリの利用規約やチュートリアルを表示したい場面がありますよね。
私はこれまで SharedPreferences を使って判定していました。
アプリの初回起動を
判定できる機能ってないのかな……
と思っていたところ、AppLaunchChecker クラスなるものを見つけました!
数年前からあったようですね。
AppLaunchCheckerクラスとは?
一言でいうと、アプリの初回起動を判定するためのクラスです。
このクラスのコメントを読んでみましょう。
/**
* This class provides APIs for determining how an app has been launched.
* This can be useful if you want to confirm that a user has launched your
* app through its front door activity from their launcher/home screen, rather
* than just if the app has been opened in the past in order to view a link,
* open a document or perform some other service for other apps on the device.
*/日本語訳:
AppLaunchCheckerクラスのコメントより
このクラスは、アプリの起動方法を決定するためのAPIを提供します。
リンクを表示するために過去にアプリを開いた場合だけでなく、ドキュメントを開いた場合よりも、
ユーザーがランチャー/ホーム画面から正面玄関のアクティビティを通じてアプリを起動したことを確認する場合に便利です。
または、デバイス上の他のアプリに対して他のサービスを実行します。
そのまんまのことが書かれていますね。ひと安心。
AppLaunchCheckerクラスが持つ機能(メソッド)とは?
以下の2つの機能を持っています。
- hasStartedFromLauncher
- onActivityCreate
hasStartedFromLauncher について
hasStartedFromLauncher のコメントを確認してみましょう。
Checks if this app has been launched by the user from their launcher or home screen since it was installed.
日本語訳:このアプリがインストールされてから、ユーザーがランチャーまたはホーム画面から起動したかどうかを確認します。
AppLaunchCheckerクラスのコメントより
hasStartedFromLauncher を呼び出すと、初回起動かどうかをBoolean(真偽値)で返すようです。
初回起動の場合は「False」、初回起動以外なら「True」を返します。
onActivityCreate について
onActivityCreate のコメントを確認してみましょう。
Records the parameters of an activity’s launch for later use by the other methods available on this class.
日本語訳:このクラスで使用可能な他のメソッドで後で使用できるように、アクティビティの起動のパラメーターを記録します。
AppLaunchCheckerクラスのコメントより
onActivityCreate を呼び出すと、そのタイミングで「初回起動ではないよ!」というフラグの設定を行うことが可能です。便利ですね。
【まとめ】 AppLaunchCheckerクラスの具体的な使い方
上記で説明したように、2つのメソッドを使って初回起動判定に役立てます。
① 起動時、hasStartedFromLauncher で初回起動状態を取得する
② 初回起動かどうか判定する(if文)
③ onActivityCreate を使って、「初回起動ではない」状態に設定する
主にこの3ステップになると思います!
便利なクラスがあるもんですね〜。
【注意点】 onActivityCreate を呼び出すタイミング
先述にもある通り「ユーザーがランチャーまたはホーム画面から起動したかどうかを確認します」と記述されています。
つまり、このメソッドが使えるのは初回起動のActivity内のみなんです!
MainActivity など最初に呼ばれるActivityの「onCreate」で onActivityCreate を呼び出してしまうと、下記のような状態になります。
onActivityCreate を呼び出すタイミングは、利用規約から遷移するタイミングで呼び出すべきですよね。
しかし、このような画面を跨ぐ場合は、AppLaunchCheckerクラスが使えません。
SharedPreferencesを使って実装するのが得策となりますね。