この記事はこちらで紹介されているiOS版SRGEventDateRecorder
のAndroid版となります。
アプリを作っていると、特定のイベントの回数や実行時間に依存した処理を書くことが必要な場面が多々あります。
例えば以下の様な処理です。
- ある機能を利用する際、初回時のみガイダンスを表示
- ある機能を利用する際、最初の3回のみ使い方の説明を表示
- 広告POPUPを1時間に1回のみ表示
- 起動後にキャンペーンのお知らせを1日に1回だけ表示させたい
これらはイベントの回数や時刻を永続化するだけで簡単に書ける処理ではありますが、毎回同様の処理を書くのは手間でもあります。
そこで、このような用途のためにイベントの回数と時刻を永続化しておくだけのライブラリを書きました。
EventDateRecorder
導入してみる
build.gradleに以下の行を追加してGradle syncします。
repositories {
maven { url 'https://raw.githubusercontent.com/shoma2da/EventDateRecorder/master/lib/repository/' }
}
dependencies {
compile 'com.hatenablog.shoma2da:eventdaterecorderlib:0.1.0'
}
導入後は利用するクラスファイルでEventDateRecorder
をimportすれば利用できます。
使い方
1イベントごとに1つのEventDateRecorder
インスタンスを作ります。
インスタンス生成時にそのイベントに対してユニークなKeyを割り当てます
例えば、ある機能を使うというイベントのkey
がuse_my_awesome_feature
だった場合、以下のようになります。
イベントの記録
EventDateRecorder recorder = EventDateRecorder.load(context, "use_my_awesome_feature");
recorder.record(); // 記録
記録したデータの利用
EventDateRecorder recorder = EventDateRecorder.load(context, "use_my_awesome_feature");
// boolean:イベント1度でも実行(記録)されたかどうか?
recorder.didRecorded();
// int: イベントが記録された回数
recorder.recordedCount();
// java.util.Date:イベントが記録された日付
recorder.initialRecordedDate(); //初回の記録時間
recorder.previousRecordedDate(); //前回の記録時間
// boolean: イベントが記録されてから1日経過してるかどうか?
recorder.didElapsedSinceInitialRecordedDate(60*60*24); //初回の記録日時をベースに判定
recorder.didElapsedSincePreviousRecordedDate(60*60*24); //前回の記録日時をベースに判定
データのクリア
EventDateRecorder recorder = EventDateRecorder.load(context, "use_my_awesome_feature");
recorder.clear();
具体例
ある機能の利用をイベントとして扱う時、利用時にイベントを記録しておく
EventDateRecorder recorder = EventDateRecorder.load(context, "use_my_awesome_feature");
recorder.record();
機能を使う時、初回だけ特別な動作をさせたいケース
EventDateRecorder recorder = EventDateRecorder.load(context, "use_my_awesome_feature");
if( recorder.didRecorded() == false ){
// 機能が1度も利用されてない時のみ実行したい処理を書く
}
機能を使う時、3回目までだけ特別な動作をさせたいケース
EventDateRecorder recorder = EventDateRecorder.load(context, "use_my_awesome_feature");
if( recorder.recordedCount() <= 3){
// 3回目までだけ実行させたい処理
}
機能を使う時、前回利用から1日以上経過してる場合にだけ特別な動作をさせたいケース
EventDateRecorder recorder = EventDateRecorder.load(context, "use_my_awesome_feature");
if( recorder.didElapsedSinceInitialRecordedDate(60*60*24) ){
// 初回利用から1日以上経過してるときにだけ実行したい処理
}
if( recorder.didElapsedSincePreviousRecordedDate(60*60*24) ){
// 前回利用から1日以上経過してるときにだけ実行したい処理
}
以上、EventDateRecorder
の紹介でした。
利用することで楽ができそうな画面があれば、使ってみてください。