iOSでローカル通知やプッシュ通知を使うには、まずユーザーの許可を得る必要があります。
このとき使用されるのが UNUserNotificationCenter.current().requestAuthorization()
です。
この記事では、requestAuthorization()
の基本的な役割や使い方、主要な引数の意味をわかりやすく丁寧に解説します。
requestAuthorization() とは?
requestAuthorization()
は、ユーザーに通知の許可を求めるためのメソッドです。
具体的には、UserNotificationsフレームワーク に含まれる UNUserNotificationCenter
クラスのインスタンスメソッド。
このメソッドを使うことで、アプリが通知を送信できるようにユーザーの同意を得るプロンプトを表示します。
一度許可を得た後でないと、UNNotificationRequest
を使って通知をスケジュールしても表示されません。
ユーザーの同意がある場合のみ通知機能が有効になるため、通知を使うすべてのアプリで最初に呼び出す必要があります。
具体例:通知の許可をリクエストする
以下は、通知の許可を求めるための基本的なサンプルコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import UserNotifications UNUserNotificationCenter.current().requestAuthorization( options: [.alert, .sound, .badge] ) { granted, error in if let error = error { print("通知の許可取得エラー: \(error.localizedDescription)") return } if granted { print("通知が許可されました") } else { print("通知は拒否されました") } } |
このコードでは、通知の3つの種類(アラート、サウンド、バッジ)について許可を求めています。
ユーザーが許可または拒否を選ぶと、その結果がクロージャ内の granted
に返されます。
-
granted == true
→ ユーザーが通知を許可した場合(通知を送信できるようになる) -
granted == false
→ ユーザーが通知を拒否した場合(通知を送信しても表示されない)
つまり granted
は Bool型(true/false) で、通知の利用が許可されたかどうかを判定するための値です。
主要な引数とその意味
requestAuthorization()
メソッドには次の2つの引数があります。
引数名 | 型 | 説明 |
---|---|---|
options | UNAuthorizationOptions | 許可を求める通知の種類(配列形式) |
completionHandler | (Bool, Error?) -> Void | ユーザーの応答とエラーを受け取るクロージャ |
options
には以下のような種類があります。
オプション名 | 内容 |
---|---|
.alert |
通知バナーなどのアラートを表示 |
.sound |
通知音を鳴らす |
.badge |
アプリアイコンにバッジを表示 |
.provisional |
サイレント通知の許可(ユーザーに表示せず通知を試す) |
.criticalAlert |
緊急アラート(特別な許可が必要) |
通常のアプリでは .alert
, .sound
, .badge
の3つを指定すれば十分です。
requestAuthorization() の活用シーン
このメソッドは、通知を活用するすべてのアプリにおいて不可欠なステップです。
特に以下のような場面で使われます。
- ローカル通知を使ってリマインダーやタイマーを表示したいとき
- プッシュ通知(リモート通知)を導入して、サーバーから通知を送りたいとき
- 通知許可の状態をチェックし、UIでユーザーにリクエストを促したいとき
- 許可の状態に応じて通知設定画面への誘導を行いたい場合
例えば「最初の起動時に許可をリクエストする」「設定画面で再リクエストする」など、ユーザー体験に合わせて柔軟に呼び出すタイミングを調整できます。
使用時の注意点
便利な requestAuthorization()
ですが、いくつかの注意点があります。
- ユーザーが一度拒否すると、再度許可を求めるプロンプトは表示されない
- 拒否後に通知を有効にするには、ユーザー自身が「設定」アプリから変更する必要がある
- 許可状態の確認には下記のように
getNotificationSettings()
を使う
1 2 3 4 5 6 7 8 9 10 11 12 13 |
UNUserNotificationCenter.current().getNotificationSettings { settings in switch settings.authorizationStatus { case .authorized: print("通知は許可されています") case .denied: print("通知は拒否されています") case .notDetermined: print("通知の許可状態は未決定です") default: break } } |
まとめ
今回は UNUserNotificationCenter.current().requestAuthorization()
について詳しく紹介しました。
- 通知を表示するには、まずユーザーからの許可が必要
.alert
,.sound
,.badge
などのオプションで細かく指定できる- 許可の結果はクロージャ内の
granted
で判定可能 - UXを意識して適切なタイミングで許可を求めることが重要
- 状態確認には
getNotificationSettings()
を併用する
通知機能を安全に、かつユーザーに配慮して使うために、requestAuthorization()
の仕組みと挙動をしっかり理解しておくことが大切です。
これから通知機能を実装する際には、この記事を参考にして、丁寧な許可リクエストを設計してみてください。