🔔

【iOS】設定アプリ内のアプリ通知設定画面にアプリ内通知設定画面への導線を表示する

2024/08/17に公開

タイトルが非常に分かりづらいかもなので、いい感じのタイトルを緩募です...

はじめに

記事中の用語については以下を前提としています。

  • 設定アプリ
    • iOS標準の設定アプリ
  • アプリ通知設定画面
    • 設定アプリ > {アプリ名}通知
  • アプリ内通知設定画面
    • 開発しているアプリの通知設定画面

概要

アプリ通知設定画面で時々見かける{アプリ名}の通知設定という項目の実装方法について取り上げます。
設定アプリ内のYAMAPアプリ通知設定画面
設定アプリ内のYAMAPアプリ通知設定画面

実装

※プッシュ通知の基本的な?実装についての説明は省略させて頂きます🙏

アプリ通知設定画面に{アプリ名}の通知設定項目を表示する

プッシュ通知の許諾を得る際のメソッド requestAuthorization(options:completionHandler:) の引数optionsprovidesAppNotificationSettings を追加します。

// `options`に`providesAppNotificationSettings`を追加
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge, .providesAppNotificationSettings]) { _, _ in }

アプリ側でイベントをハンドリングする

UNUserNotificationCenterDelegateに準拠したクラスでアプリ通知設定画面からの遷移をハンドリングする。

AppDelegate.swift
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については、公式ドキュメントには特に記載がなく、メソッドの定義に飛ぶと記載があります。
最後の一文です。

UNUserNotificationCenter.h
// 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まとめ

YAMAP テックブログ

Discussion