39
37

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.

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

Posted at

プッシュ通知設定とは

プッシュ通知設定は、ユーザー通知と呼ばれるローカル通知やプッシュ通知に関連した設定のことです。
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"
    }
}

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

39
37
2

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
39
37

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?