
iOSでローカル通知を実装する際、通知のタイミングを制御するのが通知トリガーです。
Appleが提供する通知トリガーには主に3つの種類があり、それぞれ異なる用途に特化しています。
この記事では、最もシンプルな UNTimeIntervalNotificationTrigger
を中心に、他の2つのトリガーとの違いも含めて、わかりやすく解説します!
UNTimeIntervalNotificationTriggerとは?
UNTimeIntervalNotificationTrigger
は、指定した秒数(TimeInterval)後に通知を発火させるためのトリガークラスです。
これは UserNotifications フレームワーク に含まれています。
「〇〇秒後に通知を表示する」といった使い方をしたい時に最適で、シンプルなリマインダーやタイマー機能などに活用されます。
このトリガーは、UNNotificationRequest
に渡すことで、通知をスケジュールする際の「タイミング指定」として利用されます。
具体例:5秒後に通知を出す
以下は、5秒後に通知をスケジュールする基本的なサンプルコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
import UserNotifications let content = UNMutableNotificationContent() content.title = "リマインダー" content.body = "5秒経過しました!" content.sound = .default let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false) let request = UNNotificationRequest( identifier: "fiveSecondNotification", content: content, trigger: trigger ) UNUserNotificationCenter.current().add(request) { error in if let error = error { print("通知エラー: \(error.localizedDescription)") } else { print("通知スケジュール完了") } } |
この例では、アプリが起動中でもバックグラウンドでも、5秒後に通知が表示されるようになります。
主要な引数とその意味
UNTimeIntervalNotificationTrigger
の初期化には、以下の2つの引数を指定します。
引数名 | 型 | 説明 |
---|---|---|
timeInterval | TimeInterval | 通知を発火させるまでの時間(秒単位)。最小1秒以上 |
repeats | Bool | 繰り返すかどうか。true にすると指定間隔で繰り返し通知される |
例:UNTimeIntervalNotificationTrigger(timeInterval: 10, repeats: false)
→ 10秒後に1回だけ通知を出す
UNTimeIntervalNotificationTriggerの活用シーン
このトリガーは非常にシンプルな構成で使いやすいため、以下のような場面で役立ちます。
- 短時間後に通知を出したいとき(例:タイマーアプリ)
- 一定間隔で繰り返し通知したい(例:定期リマインダー)
- 時刻ではなく「今から何秒後」に注目した通知処理
- アラーム的な用途(指定秒後に起こすなど)
タイマー形式のUIやカウントダウン処理との相性が良く、ユーザーが「今から●●分後に教えて」といった目的で通知を利用したい場合にぴったりです。
他の2つの通知トリガーとの違い
iOSには UNTimeIntervalNotificationTrigger
以外にも、以下の2つの通知トリガーが用意されています。
それぞれの特徴と使い分けを理解することで、より適切な通知実装が可能になります。
UNCalendarNotificationTrigger
用途: 特定の日時に通知を発火させたい場合
特徴:
- カレンダーの日付・時刻をベースに通知タイミングを指定
- 「毎日午前8時」「毎週月曜日」といった定期的な通知に最適
DateComponents
を使って年月日時分秒を細かく指定可能
使用例:
1 2 3 |
let dateComponents = DateComponents(hour: 8, minute: 0) // 毎日午前8時 let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: true) |
TimeIntervalとの使い分け:
- 「2時間後」→ TimeInterval
- 「明日の朝8時」→ Calendar
UNLocationNotificationTrigger
用途: 特定の場所に入る・出る際に通知を発火させたい場合
特徴:
- GPS位置情報をベースにした地理的なトリガー
- 家に着いた時、会社を出た時などの位置連動通知
CLRegion
を使って円形エリアやビーコン範囲を指定
使用例:
1 2 3 4 |
let center = CLLocationCoordinate2D(latitude: 35.6762, longitude: 139.6503) let region = CLCircularRegion(center: center, radius: 100, identifier: "office") let trigger = UNLocationNotificationTrigger(region: region, repeats: true) |
TimeIntervalとの使い分け:
- 「30分後」→ TimeInterval
- 「この場所に着いたら」→ Location
3つのトリガーの比較表
トリガー名 | 基準 | 主な用途 | 繰り返し対応 |
---|---|---|---|
TimeInterval | 経過時間 | タイマー、カウントダウン | ○(60秒以上) |
Calendar | 日時 | 定期アラーム、スケジュール | ○ |
Location | 位置情報 | 地理的リマインダー | ○ |
使用時の注意点
UNTimeIntervalNotificationTrigger
を使う際には、いくつかの制限事項や注意点があります。
timeInterval
は 1秒以上 でなければならない(0秒やマイナス値はエラー)repeats = true
にすると、timeInterval
は 60秒以上 でなければならない(Appleの仕様)- 通知を送る前に
UNUserNotificationCenter.current().requestAuthorization()
で許可を取得する必要がある - アプリがバックグラウンドや終了状態でも正しく動作するが、繰り返し通知はシステムによって制限を受けることがある
短時間の繰り返し通知や大量の通知を設定すると、OS側で制限される可能性があるため、実装の際にはバランスを考えることが重要です。
まとめ
今回は UNTimeIntervalNotificationTrigger
について詳しく紹介しました。
UNTimeIntervalNotificationTriggerのポイント:
- 指定した秒数後に通知を出せる便利なトリガークラス
timeInterval
とrepeats
の2つの引数で柔軟に設定できる- タイマーやカウントダウン、短期リマインダーなどの実装に最適
- 使用前には通知の許可取得や秒数制限に注意が必要
トリガーの使い分け:
- 時間経過ベース →
UNTimeIntervalNotificationTrigger
- 日時指定ベース →
UNCalendarNotificationTrigger
- 位置情報ベース →
UNLocationNotificationTrigger
適切なトリガーを選択することで、ユーザーにとって価値のある通知機能を構築できます。
iOSアプリに通知機能を組み込む際は、ぜひこれらのトリガーを使い分けて実装してみてください。