Нужно объяснение о запросе разрешения на уведомления в iOS

Информация о "авторизации"

Информация о "запросе разрешения"

Проблема в том, что они оба нужны в одном и том же коде, но они разбиты на 2 отдельные статьи. Так что неясно, как обращаться с ними одновременно и в чем разница между ними (конечно, кроме входных параметров).

Код, который я нашел, просто вызывает эти функции последовательно:

UNUserNotificationCenter.current().requestAuthorization(options: authOptions, completionHandler: { granted, error in
  ...
})
UIApplication.shared.registerForRemoteNotifications()

Это правильно? И в чем разница между этими методами?

PS Я тоже не могу просто поместить их внутрь application:didFinishLoad: согласно документации, потому что приложение не должно запрашивать разрешения с самого первого запуска.

1 ответ

Решение

Это

UNUserNotificationCenter.current().requestAuthorization(options: authOptions, completionHandler: { granted, error in

... })

Спрашивает пользователя, принимает ли он уведомление о получении, которое фактически показывает всплывающее окно, но это (используется для push-уведомлений, а не локальных)

UIApplication.shared.registerForRemoteNotifications()

Согласно Документам

Вызовите этот метод, чтобы начать процесс регистрации с помощью службы Apple Push Notification. Если регистрация прошла успешно, приложение вызывает приложение объекта делегата приложения: didRegisterForRemoteNotificationsWithDeviceToken: метод и передает ему маркер устройства.

//

if #available(iOS 10.0, *) {
    let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
    UNUserNotificationCenter.current().requestAuthorization(
        options: authOptions,
        completionHandler: {_, _ in })

    // For iOS 10 display notification (sent via APNS)
    UNUserNotificationCenter.current().delegate = self

} else {
    let settings: UIUserNotificationSettings =
        UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
    application.registerUserNotificationSettings(settings)
}

application.registerForRemoteNotifications()
Другие вопросы по тегам