Правильно ли вызывать registerForRemoteNotifications () при каждом запуске приложения? - PullRequest
0 голосов
/ 17 июня 2019

Из примера 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()

?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...