プッシュ通知設定とは
プッシュ通知設定は、ユーザー通知と呼ばれるローカル通知やプッシュ通知に関連した設定のことです。
iOSでは 設定 > 通知 > アプリ > 通知を許可 から、通知の受信設定の変更を行うことができます(下記)。
アプリユーザーに対してプッシュ通知を届けるためには、ユーザーにプッシュ通知受信の許諾を得て、且つその後もこの通知受信設定をONの状態を維持して貰う必要があります。
一度プッシュ通知を受信拒否もしくは設定をOFFにしたユーザーは、自ら設定画面を開いてONに設定変更してくれることはほぼありません(少なくとも僕はほぼやりません)。
そのため、アプリ内で設定状況のON/OFFを取得して、OFFの場合だったらこの設定画面へ遷移させる。という実装を行います。
できたもの
通常のホーム画面から設定画面へ遷移するまでの操作と、今回の画面遷移の差を比較するため、両方の操作画像をお見せします。
また、この機能についてはGithubでも公開しているので、ぜひ活用してみて下さい。
ホーム画面から設定画面への遷移
アプリ内から設定画面への遷移
※Reload
ボタン押下後にLabelのtextが変更されるまで10秒ほどかかります。
両方の比較して分かるように、この設定画面へのディープリンクを設定するのと、そうでないのとではユーザーの手間が大きく異なります。
実装
通知設定画面へのディープリンク
下記の{YOUR_BUNDLE_ID}
に自分のプロジェクトのBundle_IDをセットすることで、設定画面へ遷移させることができます。
// OSの通知設定画面へ遷移
if let url = URL(string:"App-Prefs:root=NOTIFICATIONS_ID&path={YOUR_BUNDLE_ID}") {
if #available(iOS 10.0, *) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
} else {
UIApplication.shared.openURL(url)
}
}
また、App-Prefs:root=NOTIFICATIONS_ID
は、通知設定画面へ遷移させるスキームですが、それ以外にもBluetoothや写真とカメラなどの設定画面へ遷移させることもできます。
スキームに関しては【iOS10】設定画面に遷移するURLスキームの設定についてに一覧があるので、ぜひ見てみてください。
僕もこちらの記事を参考にさせていただきました。良い記事をありがとうございますm(_ _)m
通知設定の取得
通知設定の取得にはgetNotificationSettingsを使用しています。
この処理はUNUserNotificationCenterからユーザーの通知設定状態を取得していますが、非同期処理となるのでご注意下さい。
// 通知設定状況を取得
UNUserNotificationCenter.current().getNotificationSettings { (settings) in
let targetViewController = vc as! ViewController
switch settings.authorizationStatus {
case .authorized:
print("Allow notification")
targetViewController.settingStatusLabel.text = "Allow notification"
targetViewController.viewDidLoad()
case .denied:
print("Denied notification")
targetViewController.settingStatusLabel.text = "Denied notification"
case .notDetermined:
print("Not settings")
targetViewController.settingStatusLabel.text = "Not settings"
}
}
パーミッションが必要な機能を提供しているアプリの場合、このディープリンクを使うことでよりユーザーが使いやすいものに改善できることもあると思うので、もし良ければ活用してみて下さい。