ローカル通知 - shirai/SwiftLearning GitHub Wiki

LocalNotification

概論

目標

  • ローカル通知の概要を説明できる

わかったこと

  • フォアグラウンドで動作していないアプリが、ユーザに何らかの情報を伝えるために「ユーザー通知」と言う機能がある
  • ローカル通知はそのうちの一つであり、通信を行わなくても通知が受け取れるものをいう
    • 例:リマインダー、カレンダーの通知

実装方法

  • 5分後に通知する
 // インスタンス生成
 UILocalNotification *notification = [[UILocalNotification alloc] init];
 // 5分後に通知をする(設定は秒単位)
 notification.fireDate = [NSDate dateWithTimeIntervalSinceNow:(60 * 5)];
 // タイムゾーンの設定
 notification.timeZone = [NSTimeZone defaultTimeZone];
 // 通知時に表示させるメッセージ内容
 notification.alertBody = @"5分経ちました";
 // 通知に鳴る音の設定
 notification.soundName = UILocalNotificationDefaultSoundName;
 // 通知の登録
 [[UIApplication sharedApplication] scheduleLocalNotification:notification];
  • 通知の削除(登録した通知は編集することができないので、一度削除してから新しい通知を削除するほかない)
 // ピンポイントで通知を削除する
 // アプリに登録されている通知を洗い出し
 for(UILocalNotification *notification in [[UIApplication sharedApplication] scheduledLocalNotifications]) {
 		// 通知に登録されているキーで検索
         if([[notification.userInfo objectForKey:@"id"] integerValue] == id) {
 			// キーが一致したら、対象の通知を削除
             [[UIApplication sharedApplication] cancelLocalNotification:notification];
         }
 }
 // アプリに登録されている全ての通知を削除
 [[UIApplication sharedApplication] cancelAllLocalNotifications];

通知からアプリを起動した時の処理

  1. アプリ起動中(フォアグラウンド)に通知が届いた場合
    • 起動中は通知が表示されないので、別途UIAlertViewなどで通知が届いたことを知らせる必要がある
  2. アプリがバックグラウンドにある状態で通知が届いた場合
    • 上記二つはAppDelegate内のapplication:didReceiveLocalNotificationに記述
 - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
 	// アプリ起動中(フォアグラウンド)に通知が届いた場合
     if(application.applicationState == UIApplicationStateActive) {
 		// ここに処理を書く
     }

 	// アプリがバックグラウンドにある状態で通知が届いた場合
 	if(application.applicationState == UIApplicationStateInactive) {
 		// ここに処理を書く
 	}

 	// 通知領域から削除する
 	[[UIApplication sharedApplication] cancelLocalNotification:notification];
 }
  1. アプリのプロセスが終了した状態で通知が届いた場合
    • AppDelegate内application:didFinishLaunchingWithOptionsに実装
 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
 {
 	// UIApplicationLaunchOptionsLocalNotificationKeyをキーにして、情報を取り出す
     UILocalNotification *notification = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];

 	// nilでなければ、通知の情報が格納されている
     if(notification != nil) {
 		// ここに処理を書く
  	// 通知領域から消す
         [[UIApplication sharedApplication] cancelLocalNotification:notification];
     }

     return YES;
 }

つぎにやること

  • 調査
  • 実践
  • 学習まとめ作成

参考

iOSのローカル通知・UILocalNotificationの設定まとめ