通知
2 種類#
| 種類 | 発信元 | 用途 |
|---|---|---|
| ローカル通知 | 端末内 | リマインダー、タイマー |
| リモート通知(プッシュ) | サーバ → APNs → 端末 | 新着メッセージなど |
APNs の流れ#
アプリ起動 → APNs にデバイストークンを要求
→ 自分のサーバにトークンを送る
↓
自分のサーバ → APNs → 端末 → アプリサーバが端末に直接送るのではない。 必ず APNs を経由する。 これにより、常時接続を OS が 1 本にまとめられ、電池を節約できる。
デバイストークンは変わりうる(再インストール、復元)。 起動のたびにサーバへ送り直す設計が要る。
許可#
swift
try await UNUserNotificationCenter.current()
.requestAuthorization(options: [.alert, .sound, .badge])権限と同じく、 文脈の中で要求する。 起動直後に出すと拒否率が高い。
通知の種類#
| 種類 | 挙動 |
|---|---|
| 通常 | 表示される |
サイレント (content-available) |
表示せずアプリを起こす |
| 重要な通知 | おやすみモードを貫通。特別な承認が要る |
| タイムセンシティブ | 集中モードを貫通 |
サイレント通知は配信が保証されない。 OS が電池や利用パターンに応じて抑制する。 データ同期の唯一の手段にしてはいけない。
設計上の注意#
- 通知は割り込みなので、価値のあるものだけ送る
- 過剰な通知は無効化・アンインストールにつながる
- 内容に個人情報を含めない(ロック画面に出る)
- 通知の設定を利用者が細かく選べるようにする
参考文献#
- Apple. User Notifications. https://developer.apple.com/documentation/usernotifications
- Apple. Sending notification requests to APNs. https://developer.apple.com/documentation/usernotifications/sending-notification-requests-to-apns
- Apple. Human Interface Guidelines. https://developer.apple.com/design/human-interface-guidelines