Пытаюсь создать повторный запрос на разрешение localNotifications, но он по каким-то причинам не работает. Создал кнопку, внутри которой:
@IBAction func addNotificationTapped(_ sender: Any) {
if let settings = UIApplication.shared.currentUserNotificationSettings {
if settings.types.contains([.alert, .badge, .sound]) {
print("case one")
} else {
let alert = UIAlertController(title: "", message: "allow local notifications?", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "", comment: "Cancel"), style: .cancel, handler: nil))
alert.addAction(UIAlertAction(title: "Allow", style: .default, handler: {
(_) in
UIApplication.shared.registerUserNotificationSettings(UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil))
print("case two")
}))
self.present(alert, animated: true, completion: nil)
}
}
}
Если при запуске приложения запретить уведомления, то при нажатии на кнопку срабатывает else и case two. По идее нужные разрешения должны были появиться, и при повторном нажатии уже должен быть case one. Но не тут-то было. Так и пишет по кругу case two. Вероятно я как-то не верным образом посылаю повторный запрос на регистрацию.
Изначальный запрос лежит в appDelegate и выглядит так - application.registerUserNotificationSettings(UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil))
и прекрасно работает если ответить “да” на дефолтный запрос при старте приложения. В чем может быть проблема?