Help us understand the problem. What is going on with this article?

プッシュ通知設定画面へ遷移させる為の実装

More than 3 years have passed since last update.

プッシュ通知設定とは

プッシュ通知設定は、ユーザー通知と呼ばれるローカル通知やプッシュ通知に関連した設定のことです。
iOSでは 設定 > 通知 > アプリ > 通知を許可 から、通知の受信設定の変更を行うことができます(下記)。

IMG_3500.PNG

アプリユーザーに対してプッシュ通知を届けるためには、ユーザーにプッシュ通知受信の許諾を得て、且つその後もこの通知受信設定をONの状態を維持して貰う必要があります。

一度プッシュ通知を受信拒否もしくは設定をOFFにしたユーザーは、自ら設定画面を開いてONに設定変更してくれることはほぼありません(少なくとも僕はほぼやりません)。

そのため、アプリ内で設定状況のON/OFFを取得して、OFFの場合だったらこの設定画面へ遷移させる。という実装を行います。

できたもの

通常のホーム画面から設定画面へ遷移するまでの操作と、今回の画面遷移の差を比較するため、両方の操作画像をお見せします。

また、この機能についてはGithubでも公開しているので、ぜひ活用してみて下さい。

ホーム画面から設定画面への遷移

homeScreen.gif

アプリ内から設定画面への遷移

Reloadボタン押下後にLabelのtextが変更されるまで10秒ほどかかります。

InApp.gif

両方の比較して分かるように、この設定画面へのディープリンクを設定するのと、そうでないのとではユーザーの手間が大きく異なります。

実装

通知設定画面へのディープリンク

下記の{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"
    }
}

パーミッションが必要な機能を提供しているアプリの場合、このディープリンクを使うことでよりユーザーが使いやすいものに改善できることもあると思うので、もし良ければ活用してみて下さい。

yamataku29
init株式会社CEO&CTO / フリーランス / iOS/Androidエンジニア / MENTAでプログラミングを教えている URL: https://menta.work/plan/584 / 元BtoB営業マン / ハッカソン全国大会準優勝(SPAJAM2017) / 個人iOSアプリリリース&収益化 / 元アーチェリー日本代表
https://init-inc.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした