RS-Flip-Flop

坂本龍介による技術メモ

Posted on by admin


iOS4以降ではマルチタスキングを利用してバックグラウンドへ移行した
iPhoneアプリで処理を続けたり定期的に実行させることができます。

よくあるのは定期的にサーバへデータを取りに行ったりする機能です。

この機能の実現には知らないと分からないことがあるのでメモついでに紹介します。

まず、Info.plist内のプロパティを編集します。

アプリケーションのInfo.plistファイルにUIBackgroundModesキーを追加します。

このキーの値を、voipという文字列を含む配列に設定します。

こんな感じです。

定期的に実行するObjective-Cコードを書いていきます。

ここでは、iPhoneアプリがバックグラウンドへ移行する際に設定します。

- (void)applicationDidEnterBackground:(UIApplication *)application
{
     [[UIApplication sharedApplication] setKeepAliveTimeout:600.0 handler:^{[self checkServer];}];
}

そして、呼び出し先の関数を書きこめばおしまいです。

- (void) checkServer{
    NSURL *url = [NSURL URLWithString:@"http://localhost/check.xml"];
    NSString* check_xml = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]; 
}

このコードの動作はバックグラウンドで移行すると10分ごとに
checkServerを呼び出しデータを取りに行く動作となります。

ちなみにインターバル時間を10分未満にすると

KeepAliveTimeout must be > 600 seconds

と怒られますので600秒(10分)以上で設定してください。

ただ、このままではiPhoneアプリをフォアグラウンドにした時も
実行され続けるので気をつけてください。

また、iPhoneアプリをリリースする際にUIBackgroundModesで選択したモードの機能が無い場合
審査が通らない可能性がありますので注意が必要です。

Posted on by admin | Posted in Uncategorized


One Response to 【iPhoneアプリ】バックグラウンドで定期実行

  1. 金子 says:


    iphone 定期実行でググったら一番上に
    このページが出たよ。
    おめでとう!


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>