20
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

iOS12 の プッシュ通知お試し受信機能 Provisional Authorization をいろいろ触ってみた

Last updated at Posted at 2018-09-07

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 を含めてる場合、プッシュ許諾ダイアログなしで grantedtrueが入ってくる
registerForRemoteNotifications() でちゃんとデバイストークンが発行されるので、
既存の通知許諾をONにした後の処理が使い回せるだろう

追記:
ステータスが provisional のとき、
UIApplication.shared.isRegisteredForRemoteNotificationstrue になる

お試しプッシュ通知受信後

「お試し受信中」に受け取ったプッシュ通知は、
バッジや音が無い状態で受信され、さらに通知センターでしか見ることができない

ほとんどのユーザはお試しプッシュが届いてることに気づかないんじゃないかという気がする…
それであれば、アプリ側で明示的に許諾を出してやるほうがいいかも…

お試しプッシュ通知についているボタン

お試し受信中に受け取ったプッシュ通知には プッシュ通知をこのまま受け取り続けるか
それともオフにするかのボタンが存在する

プッシュ通知を受け取ることにする場合は、さらに

  • 目立つように配信してもらうか(ロック画面 通知センター バナー全部出し サウンドとバッジもあり)
  • 目立たないように配信してもらうか(通知センターのみ かつ サウンドとバッジはなし)

をユーザが選択できるようになっている

受け取るを選択した場合は、目立つ目立たないどちらも
authorizationStatusauthorized(通知許諾ON状態)になる

注意点

前述したとおり、通知センターを見ない限りお試しプッシュが届いてる事に気づかないのが懸念
許諾ダイアログを出したほうがマシな可能性がある

また、自分たちのDBでデバイストークンを管理しているサービスは、
お試しプッシュを安易に導入するとDBに大量のデバイストークンがinsertされてしまうかもしれない

20
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?