Из примера Apple Doc на https://developer.apple.com/documentation/usernotifications/registering_your_app_with_apns
UIApplication.shared.registerForRemoteNotifications()
вызывается все время при запуске приложения:
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions:
[UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
UIApplication.shared.registerForRemoteNotifications()
return true
}
Это нормально?Или мы должны использовать логическое предпочтение и проверить, не зарегистрировано ли оно, и вызвать его?
Также мне нужно запросить авторизацию у пользователя для показа уведомлений, но в соответствующем месте (например, в моем контроллере просмотра настроек, где у меня естьвключить / отключить уведомления)
UNUserNotificationCenter.current().delegate = self
let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(
options: authOptions,
completionHandler: {_, _ in })
И, похоже, в этом случае мне нужно переместить весь код с AppDelegate
, например: https://github.com/firebase/quickstart-ios/blob/master/messaging/MessagingExampleSwift/AppDelegate.swift, в мой контроллер просмотра настроек, даже registerForRemoteNotifications()
.
Таким образом, все делегаты, связанные с уведомлениями (регистрация, получение), будут находиться в настройках View Controller.Это сработает?Смогу ли я получать уведомления в этом месте, когда приложение не запущено?
Или где я должен разместить различные части кода?
Обновление
Кроме того, почему они не используют
UNUserNotificationCenter.current().getNotificationSettings(completionHandler: { settings in
if settings.authorizationStatus == .notDetermined {
let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(
options: authOptions) { granted, error in
if granted {
UIApplication.shared.registerForRemoteNotifications()
}
}
} else if settings.authorizationStatus == .denied {
//
} else if settings.authorizationStatus == .authorized {
UIApplication.shared.registerForRemoteNotifications()
}
})
вместо
let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(
options: authOptions,
completionHandler: {_, _ in })
UIApplication.shared.registerForRemoteNotifications()
?