【iOS】設定アプリ内のアプリ通知設定画面にアプリ内通知設定画面への導線を表示する
タイトルが非常に分かりづらいかもなので、いい感じのタイトルを緩募です...
はじめに
記事中の用語については以下を前提としています。
- 設定アプリ
- iOS標準の設定アプリ
- アプリ通知設定画面
-
設定
アプリ >{アプリ名}
>通知
-
- アプリ内通知設定画面
- 開発しているアプリの通知設定画面
概要
アプリ通知設定画面で時々見かける{アプリ名}の通知設定
という項目の実装方法について取り上げます。
設定アプリ内のYAMAPアプリ通知設定画面
実装
※プッシュ通知の基本的な?実装についての説明は省略させて頂きます🙏
{アプリ名}の通知設定
項目を表示する
アプリ通知設定画面にプッシュ通知の許諾を得る際のメソッド requestAuthorization(options:completionHandler:) の引数options
に providesAppNotificationSettings を追加します。
// `options`に`providesAppNotificationSettings`を追加
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge, .providesAppNotificationSettings]) { _, _ in }
アプリ側でイベントをハンドリングする
UNUserNotificationCenterDelegate
に準拠したクラスでアプリ通知設定画面からの遷移をハンドリングする。
import UIKit
import UserNotifications
class AppDelegate: UIResponder, UIApplicationDelegate { /* 省略 */ }
extension AppDelegate: UNUserNotificationCenterDelegate {
func userNotificationCenter(_ center: UNUserNotificationCenter, openSettingsFor notification: UNNotification?) {
// アプリ通知設定画面から遷移した場合`notification == nil`となる
if notification == nil {
// アプリ内通知設定画面への遷移処理
}
}
}
コード内にコメントとして記載しているnotification == nil
については、公式ドキュメントには特に記載がなく、メソッドの定義に飛ぶと記載があります。
最後の一文です。
// The method will be called on the delegate when the application is launched in response to the user's request to view in-app notification settings. Add UNAuthorizationOptionProvidesAppNotificationSettings as an option in requestAuthorizationWithOptions:completionHandler: to add a button to inline notification settings view and the notification settings view in Settings. The notification will be nil when opened from Settings.
- (void)userNotificationCenter:(UNUserNotificationCenter *)center openSettingsForNotification:(nullable UNNotification *)notification API_AVAILABLE(macos(10.14), ios(12.0)) API_UNAVAILABLE(watchos, tvos);
以上です。
URLまとめ
-
UNUserNotificationCenter.requestAuthorization(options:completionHandler:)
https://developer.apple.com/documentation/usernotifications/unusernotificationcenter/requestauthorization(options:completionhandler:) -
UNAuthorizationOptions.providesAppNotificationSettings
https://developer.apple.com/documentation/usernotifications/unauthorizationoptions/providesappnotificationsettings -
UNUserNotificationCenterDelegate.userNotificationCenter(_:openSettingsFor:)
https://developer.apple.com/documentation/usernotifications/unusernotificationcenterdelegate/usernotificationcenter(_:opensettingsfor:)
Discussion