概要
UserNotifications フレームワーク(ローカル通知)を使い、ユーザーが設定した時刻に「今日の豆知識」リマインダーを毎日配信。
プッシュ通知(APNs)は使用せず、サーバー不要のローカル完結型。
関連画面
処理フロー
- 初回 ON 時、通知許可をリクエスト
- 許可されたら指定時刻で
UNCalendarNotificationTrigger をスケジュール
- 毎日その時刻にリマインダー表示
- OFF 時、すべての通知を
removeAllPendingNotificationRequests でキャンセル
- 時刻変更時は再スケジュール
API
@MainActor
final class NotificationService {
func setEnabled(_ enabled: Bool, at time: Date)
func setTime(_ time: Date)
func getEnabled() -> Bool
func scheduleDailyNotification(at time: Date)
}
通知内容
| 項目 | 内容 |
| title | 「今日の豆知識」 |
| body | 「新しい知識をチェックしよう」 or その日の tip タイトル |
| sound | default |
| repeats | true(毎日) |
ビジネスルール
- 初回ON時のみ通知許可ダイアログを表示
- 許可拒否されたら設定アプリへの誘導アラート
- 時刻はユーザー設定可(デフォルトは8時)
- 通知タップでアプリ起動 → HomeView
外部連携
| 連携先 | 用途 |
| UserNotifications | ローカル通知のスケジューリング |
| Info.plist | 通知許可ダイアログの表示文言 |
エラー処理
| 発生条件 | 対応 |
| 通知許可拒否 | 「設定アプリで通知を有効に」アラート + 設定アプリ起動誘導 |
| scheduleDailyNotification 失敗 | Logger.error、UI 上は無視 |
実装メモ
- NotificationService は @MainActor
- UserDefaults キー:
notification_enabled, notification_time
- プッシュ通知(APNs)は用途なし → 実装予定なし
変更履歴
| バージョン | 日付 | 変更内容 |
| 1.0 | 2026-05-09 | 初版作成 |