iOS12からプッシュ通知の許諾ダイアログを出さずに、ユーザにお試しプッシュ通知を送れるようになった
「お試し」と言っているけれども、プッシュ通知自体は本物の通知で、違いは 受け取ったあとにこのまま購読し続けるかどうかのボタンが通知に付与される というところです
先に結論
結論から言うと、ほとんどのアプリですぐに導入できますが
いくつか注意点が必要です
実装
コードはこんな感じでいける
options
に .provisional
を含めるだけ
var options: UNAuthorizationOptions
if #available(iOS 12.0, *) {
options = [.alert, .badge, .sound, .provisional]
} else {
options = [.alert, .badge, .sound]
}
UNUserNotificationCenter.current().requestAuthorization(options: options) { granted, error in
if granted {
DispatchQueue.main.async {
UIApplication.shared.registerForRemoteNotifications()
}
}
}
.provisional
を含めてる場合、プッシュ許諾ダイアログなしで granted
に true
が入ってくる
registerForRemoteNotifications()
でちゃんとデバイストークンが発行されるので、
既存の通知許諾をONにした後の処理が使い回せるだろう
追記:
ステータスが provisional のとき、
UIApplication.shared.isRegisteredForRemoteNotifications
は true
になる
お試しプッシュ通知受信後
「お試し受信中」に受け取ったプッシュ通知は、
バッジや音が無い状態で受信され、さらに通知センターでしか見ることができない
ほとんどのユーザはお試しプッシュが届いてることに気づかないんじゃないかという気がする…
それであれば、アプリ側で明示的に許諾を出してやるほうがいいかも…
お試しプッシュ通知についているボタン
お試し受信中に受け取ったプッシュ通知には プッシュ通知をこのまま受け取り続けるか、
それともオフにするかのボタンが存在する
プッシュ通知を受け取ることにする場合は、さらに
- 目立つように配信してもらうか(ロック画面 通知センター バナー全部出し サウンドとバッジもあり)
- 目立たないように配信してもらうか(通知センターのみ かつ サウンドとバッジはなし)
をユーザが選択できるようになっている
受け取るを選択した場合は、目立つ目立たないどちらも
authorizationStatus
は authorized
(通知許諾ON状態)になる
注意点
前述したとおり、通知センターを見ない限りお試しプッシュが届いてる事に気づかないのが懸念
許諾ダイアログを出したほうがマシな可能性がある
また、自分たちのDBでデバイストークンを管理しているサービスは、
お試しプッシュを安易に導入するとDBに大量のデバイストークンがinsertされてしまうかもしれない