I am trying to check if UserNotifications are enabled and if not I want to throw an alert. So I have a function checkAvailability
which checks multiple things, including the UserNotification authorization status.
func checkAvailabilty() -> Bool {
//
// other checking
//
var isNotificationsEnabled = false
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound], completionHandler: { (granted, error) in
if granted {
isNotificationsEnabled = true
}
else {
isNotificationsEnabled = false
}
})
}
if isNotificationsEnabled {
return true
}
else {
// Throw alert: Remind user to activate notifications
return false
}
}
But the completion handler gets called too late. The function already returned false
and after that the code in the colsure executes.
I tried to put the whole statement UNUserNotificationCenter.current().requestAuthorization()
in a synchronous dispatch queue but this didn't work.
Another approach would be to return from inside the closure but I have no idea how to accomplish that.
checkAvailabilty()
and call it at the end of requestAuthorization's completion handler. – Uncleanly