アプリを使用したトータル時間で、アプリの挙動を制御したい時があります。 そこでここでは、UserDefaultsを使用して、ユーザーがアプリを使用した時間を記録する方法をご紹介します。 |
『御朱印マップ』のバージョン1.0.2がようやくリリースされて、次のバージョンに向けたカスタマイズ作業を進めています。
その中で、ユーザーさんがアプリを使用した時間が一定の値を超えると、アプリに別の動きをさせたいと思うようになりました。
そのためにはまず、アプリの使用時間を計測できるようにしないと。
ということで、ユーザーのアプリ使用時間を簡単に記録する方法をご紹介したいと思います。
実装イメージは、以下の通りです。
@アプリがアクティブになった時に、その時刻を取得する
Aアプリがアクティブではなくなった時に、その時刻を取得する
BAの直後に、Aと@の差分をUserDefaultsに加算する
実装先はAppDelegate。
記録先はUserDefaultsです。
それでは、実装していきましょう。
まずは、@は複数のメソッドで使うので、インスタンス変数として定義します。
@implementation AppDelegate {
NSDate *applicationBecomeActive; // @アプリがアクティブになった時刻
NSDate *applicationResignActive; // Aアプリがアクティブではなくなった時刻
}
Aは念のためです。
次に@の実装。
これは、applicationDidBecomeActive: に実装します。
- (void)applicationDidBecomeActive:(UIApplication *)application
{
// @アプリケーションが起動した時刻を取得。
applicationBecomeActive = [NSDate date];
}
更に、AとBの実装。
これは、applicationWillResignActive: に実装します。
- (void)applicationWillResignActive:(UIApplication *)application
{
// Aアプリケーションが終了する時刻を取得。
applicationResignActive = [NSDate date];
// Bアプリケーションの稼働時間を算出する。
NSTimeInterval thisTimeApplicationActiveTime = [applicationResignActive timeIntervalSinceDate:applicationBecomeActive];
// Bアプリケーションの稼働時間をUserDefaultsに加算。
// まずUserDefaultsを定義し、既存の値を取得する。
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
double pastApplicationActiveTime = [userDefaults doubleForKey:TIME_TOTALACTIVE];
// 既存の値に今回の稼働時間を加算する。
double totalApplicationActiveTime = pastApplicationActiveTime + thisTimeApplicationActiveTime;
// 加算した値を再びUserDefaultsに格納する。
[userDefaults setDouble:totalApplicationActiveTime forKey:TIME_TOTALACTIVE];
[userDefaults synchronize];
// ●Bの時間を出力するTestLog //
NSLog(@"totlaApplicationActiveTime : %f", [userDefaults doubleForKey:TIME_TOTALACTIVE]);
}
TIME_TOTALACTIVE は、UserDefaultsのキー項目を定数化したものです。
ご自分でご利用になるときは、好きな名称を@"キー項目"でセットしてください。
値としては、秒数がdouble型で格納されます。
最後の●の処理はテスト用です。
UserDefaultsに格納されたアプリの稼働時間(過去分との積算)がログに出力されるので、確認してみてください。
ちなみにこの実装だと、@とAの時刻はJSTではなくGMTで取得されます。
それでもBを記録するための一時的なものなので、それで良しとしましょう。
意外と簡単に実装できます。
iPhoneで御朱印集めを楽しくするアプリ『御朱印マップ』を公開しています。ダウンロードはこちらからどうぞ。