gosyuincho-case.jpg
【PR】総桐仕上げの豪華御朱印帳ケース! 千糸繍院 御朱印帳ケース / 御朱印帳保管用 総桐箱 12冊用

御朱印マップ
『御朱印マップ』に関するお問い合わせは、こちらにお寄せ下さい。

『御朱印マップ』お問い合わせ用記事

旧暦パネル
『旧暦パネル』に関するお問い合わせは、こちらにお寄せ下さい。

『旧暦パネル』お問い合わせ用記事

Fillmap
『Fillmap』シリーズに関するお問い合わせは、こちらにお寄せ下さい。
(Please contact us for any inquiries about "Fillmap" series)
『Fillmap』お問い合わせ用記事(Article for inquiry of "Fillmap")

2015年01月27日

アプリの起動時間を記録する方法

Xcodeアプリを使用したトータル時間で、アプリの挙動を制御したい時があります。

そこでここでは、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を記録するための一時的なものなので、それで良しとしましょう。

意外と簡単に実装できます。

ico_GOSYUIN-Map.png

iPhoneで御朱印集めを楽しくするアプリ『御朱印マップ』を公開しています。ダウンロードはこちらからどうぞ。

この記事が参考になったら下記バナーをクリック!
ランキングUPにご協力をお願いします。m(_ _)m


posted by o(^0^)o ほくほく at 22:27| Comment(0) | Xcodeメモ | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

※ブログオーナーが承認したコメントのみ表示されます。