[WWDC18][iOS 12] アプリ内の通知設定画面への遷移をハンドリングする #WWDC18

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは。モバイルアプリサービス部の平屋です。

iOS 12で設定アプリ通知センターアプリ内の通知設定画面へ遷移するためのボタンを表示できるようになりました。このボタンをタップすると、アプリが開きます。このときアプリ側はユーザーが通知設定画面を要求していることを検知できます。

本記事では、アプリ内の通知設定画面への遷移をハンドリングする実装を紹介します。

本記事は Apple からベータ版として公開されているドキュメントを情報源としています。 そのため、正式版と異なる情報になる可能性があります。ご留意の上、お読みください。

検証環境

本記事は以下の環境で検証を行っています。

  • macOS Sierra 10.13.4
  • Xcode Version 10.0 beta (10L176w)
  • iOS Deployment target: 12.0

通知設定画面を提供することをシステムに伝える

まずは通知設定画面を提供することをシステムに伝えます。

通知の使用許可リクエスト時に、オプションprovidesAppNotificationSettingsを入れます。

これで通知設定画面へ遷移するためのボタンが表示されるようになります。

let options: UNAuthorizationOptions = [.alert, .badge, .sound, .providesAppNotificationSettings]
UNUserNotificationCenter.current().requestAuthorization(options: options) { granted, error in
    // ...
}

通知設定画面への遷移をハンドリングする

適当なクラスにUNUserNotificationCenterDelegateuserNotificationCenter(_:openSettingsFor:)メソッドを追加し、通知設定画面への遷移を実装します。

通知センターで特定の通知からアプリ内の通知設定画面へ遷移した場合、notification引数は対象の通知のUNNotificationになります。また、設定アプリからの遷移の場合、notification引数はnilになります。

class AppDelegate: UIResponder, UIApplicationDelegate {

    // ...

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        UNUserNotificationCenter.current().delegate = self
        return true
    }
}

extension AppDelegate: UNUserNotificationCenterDelegate {

    func userNotificationCenter(_ center: UNUserNotificationCenter, openSettingsFor notification: UNNotification?) {
        print(#function, "notification:\(notification)")

        // 通知設定画面への遷移を実装
    }
}

さいごに

本記事では、アプリ内の通知設定画面への遷移をハンドリングする実装を紹介しました。

アプリごとに実装している通知設定画面を見つけやすくなりそうなので良いなぁと思いました!

参考資料