この記事は公開されてから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
// ...
}
通知設定画面への遷移をハンドリングする
適当なクラスにUNUserNotificationCenterDelegateのuserNotificationCenter(_: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)")
// 通知設定画面への遷移を実装
}
}
さいごに
本記事では、アプリ内の通知設定画面への遷移をハンドリングする実装を紹介しました。
アプリごとに実装している通知設定画面を見つけやすくなりそうなので良いなぁと思いました!