目的

[iOS]push通知(プッシュ通知)を設定する
の派生で、push通知の設定でprovisionalというものがあり、それに関するメモ

provisionalについては、iOS12から登場しているよう。

こんな機能があるなんて知らなかった。

環境

  • Xcode Version 12.4
  • Swift 5

参照サイト

UNAuthorizationOptions

以下の記事でpush通知の実装をしています。
[iOS]push通知(プッシュ通知)を設定する

対応メモ

3行目のrequestAuthorizationにてprovisionalを追記しています。
そして、getNotificationSettingsにて (settings.authorizationStatus == .authorized) || (settings.authorizationStatus == .provisional)
の時にトークン設定を実施するようにしています。
他の設定については、
[iOS]push通知(プッシュ通知)を設定する
と変わらないので、今回は省略します。

端末にプッシュ通知の許可を申請するコード
    func registerForPushNotifications() {
        let center = UNUserNotificationCenter.current()
        center.requestAuthorization(options: [.alert, .sound, .badge, .provisional]) {granted, error in
            if error == nil {
                center.getNotificationSettings { settings in
                    guard (settings.authorizationStatus == .authorized) || (settings.authorizationStatus == .provisional) else { return }

                    DispatchQueue.main.async {
                        UIApplication.shared.registerForRemoteNotifications()
                    }
                }
            }
        }
    }
実装としては上記で完了で、後はアプリ起動時AppDlegateのdidFinishLaunchingWithOptionsに上記コードを呼ぶようにします。
一般的にpush通知の許可は特定のタイミングで設定したほうが良いと思うのですが、 provisionalを設定する場合は、すぐにトークン設定を行ったほうが良いと思いました。

トークン設定
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        
        registerForPushNotifications()//追加
        
        return true
    }

挙動メモ

冒頭で述べてますが、アプリインストール時に許可を必要とせず、いきなりpushトークンを取得できます。
以下の画面のようなポップアップは出てきません。

トークンが取得できたのでpush通知を行いますが、
ホーム画面のバナーには何も表示されませんし、アラートもなく、バッジも表示されません。

通知センターのみ表示されています。
ちなみにロック画面と通知センター画面は違うので、ロック画面にも何も表示されていませんでした。

この状態でも アプリがフォアグラウンドの時に通知がくる際に呼ばれるメソッドは実行されます。
けれでも、そこでcompletionHandler([.list, .banner, .badge, .sound])を実施していても何も起こりません。

アプリがフォアグラウンドの時に通知がくる際に呼ばれる
    func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {

設定での通知の設定は以下の様になっていました。

次に通知センターで挙動を設定してみます。
続けるボタンをタップするとアラートが表示されます。

ここで 目立たない形で送信を続ける とした場合は、通知の設定はそのままでした。
目立つ形で配信とした場合は、通知の設定は以下となり、次回ホーム画面のバナーやバッジなどが表示されるように鳴りました。

最後に通知センターで通知をすべてオフにするとした場合は、そのとおり、通知を許可OFFとなりました。

所感

許可のポップアップが無いのは結構気軽に導入できると思い、良いなぁと思ったのですが。
通知センターってあまり見ない気もします。
ログイン画面とかだったら見るのですが。
他のアプリで通知を許可したいるものがあれば、通知センターも見る機会ありますかね。

設定簡単なので、入れてみてもよいのですが、あとは通知のネタですね。。