问题
In my app, I want to be able to check if the user has notifications enabled or not. In iOS 10, I did this using a check in the delegate.
This check is now deprecated and I want to update it, but I can't figure out what to use in iOS 11.
The deprecation warning is as follows:
currentUserNotificationSettings' was deprecated in iOS 10.0: Use UserNotifications Framework's -[UNUserNotificationCenter getNotificationSettingsWithCompletionHandler:] and -[UNUserNotificationCenter getNotificationCategoriesWithCompletionHandler:]
I've tried to update the code with the help of this warning but I can't figure it out.
If anyone can suggest anyway to get a check like this working it would help a lot. The code I have been using for iOS 10 is below, thanks.
let notificationType = UIApplication.shared.currentUserNotificationSettings!.types
if notificationType == [] {
print("Notifications are NOT enabled")
} else {
print("Notifications are enabled")
}
回答1:
Step 1 : import UserNotifications
Step 2 :
UNUserNotificationCenter.current().getNotificationSettings { (settings) in
if settings.authorizationStatus == .authorized {
// Notifications are allowed
}
else {
// Either denied or notDetermined
}
}
Inspect the settings object for more informations.
回答2:
First step:- You have to add header file as
import UserNotifications
I have used checkpushNotification method to check whether user enable notification or not. Uses called this method from didFinishLaunchingWithOptions of AppDelegate class. Hope It will help you, If any problem then comment below.
Last step:-
func checkPushNotification(){
if #available(iOS 10.0, *) {
UNUserNotificationCenter.current().getNotificationSettings(){ (setttings) in
switch setttings.authorizationStatus{
case .authorized:
print("enabled notification setting")
case .denied:
print("setting has been disabled")
case .notDetermined:
print("something vital went wrong here")
}
}
} else {
let isNotificationEnabled = UIApplication.shared.currentUserNotificationSettings?.types.contains(UIUserNotificationType.alert)
if isNotificationEnabled{
print("enabled notification setting")
}else{
print("setting has been disabled")
}
}
}
And if you want certain boolean output for is enabled or disabled then you should implement completion handler to solve it.
func checkPushNotification(checkNotificationStatus isEnable : ((Bool)->())? = nil){
if #available(iOS 10.0, *) {
UNUserNotificationCenter.current().getNotificationSettings(){ (setttings) in
switch setttings.authorizationStatus{
case .authorized:
print("enabled notification setting")
isEnable?(true)
case .denied:
print("setting has been disabled")
isEnable?(false)
case .notDetermined:
print("something vital went wrong here")
isEnable?(false)
}
}
} else {
let isNotificationEnabled = UIApplication.shared.currentUserNotificationSettings?.types.contains(UIUserNotificationType.alert)
if isNotificationEnabled == true{
print("enabled notification setting")
isEnable?(true)
}else{
print("setting has been disabled")
isEnable?(false)
}
}
}
and Call this simple as
self.checkPushNotification { (isEnable) in
print(isEnable)
// you know notification status.
}
回答3:
I think you can just call UIApplication.shared.isRegisteredForRemoteNotifications
来源:https://stackoverflow.com/questions/46664177/check-whether-user-notifications-are-enabled-after-uilocalnotification-deprecati