ローカル通知 - shirai/SwiftLearning GitHub Wiki
LocalNotification
概論
目標
わかったこと
- フォアグラウンドで動作していないアプリが、ユーザに何らかの情報を伝えるために「ユーザー通知」と言う機能がある
- ローカル通知はそのうちの一つであり、通信を行わなくても通知が受け取れるものをいう
実装方法
// インスタンス生成
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];
通知からアプリを起動した時の処理
- アプリ起動中(フォアグラウンド)に通知が届いた場合
- 起動中は通知が表示されないので、別途UIAlertViewなどで通知が届いたことを知らせる必要がある
- アプリがバックグラウンドにある状態で通知が届いた場合
- 上記二つはAppDelegate内のapplication:didReceiveLocalNotificationに記述
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
// アプリ起動中(フォアグラウンド)に通知が届いた場合
if(application.applicationState == UIApplicationStateActive) {
// ここに処理を書く
}
// アプリがバックグラウンドにある状態で通知が届いた場合
if(application.applicationState == UIApplicationStateInactive) {
// ここに処理を書く
}
// 通知領域から削除する
[[UIApplication sharedApplication] cancelLocalNotification:notification];
}
- アプリのプロセスが終了した状態で通知が届いた場合
- 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の設定まとめ