🥷

【Swift】Provisional Authorizationによるお試しプッシュ通知の実装

2024/09/03に公開

Provisionalなプッシュ通知

従来ユーザーに通知を送信する許可を求める際、ユーザーはアプリからの通知を見る前に、許可するか拒否するかを決定しなければならない。
iOS12から導入されたProvisional(暫定的という意味)なプッシュ通知では、ユーザーに明示的な許諾をとることなく暫定的な通知を送信することができる。
実際に必要なタイミングでプッシュ通知を受けてから正式な許諾を取るため、ユーザーが通知を許可しやすくなる可能性は高まる(質の高いプッシュ通知であることが前提)

ただし、暫定的なプッシュ通知はサイレントに配信される。
通知センターにのみ表示され、音やバナーでユーザーの邪魔をしたり、ロック画面に表示されることはない。Appアイコンにもバッジがつかない
通知の継続または停止を促すボタンも含まれる。

実装方法

通知を送る前に従来通り通知を送る許可をリクエストする。
通知の許諾を取るタイミングでオプションに .provisional を追加するだけで利用可能です。
この際、ユーザー側にはダイアログは表示されない。

// クロージャ版
let options: UNAuthorizationOptions = [.alert, .badge, .sound, .provisional]
UNUserNotificationCenter.current().requestAuthorization(options: options) { granted, error in
}
 
// Concurrency版
Task {
  let options: UNAuthorizationOptions = [.alert, .badge, .sound, .provisional]
  let granted = try await UNUserNotificationCenter.current().requestAuthorization(options: options)
}

この時点でauthorizationStatusprovisionalになっている

let settings = await UNUserNotificationCenter.current().notificationSettings()
print(settings.authorizationStatus) // (UNAuthorizationStatus) provisional

プッシュ通知を受け取る

authorizationStatusprovisionalになっている状態で通知を受け取ると、通知センターにのみ通知が表示される

provisionalな通知が通知センターに表示される

ユーザーは実際に通知を受け取ってから通知のオン/オフを判断することができる

続ける... を押した時


オフにする... を押した時

参考資料

セッション動画

https://developer.apple.com/videos/play/wwdc2018/710/

その他参考にした記事

https://dev.classmethod.jp/articles/wwdc18-notification-provisional-authorization/
https://nilcoalescing.com/blog/TrialNotificationsWithProvisionalAuthorizationOnIOS/

元にした技術メモ

https://scrapbox.io/armtic/Provisional_Authorizationによるお試しプッシュ通知の実装

Discussion