I am using swift 3.0 and am trying to add badge numbers to my app. I believe the correct way to do this is similar to what is below.
application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: UIUserNotificationType.Sound | UIUserNotificationType.Alert |
UIUserNotificationType.Badge, categories: nil
))
application.applicationIconBadgeNumber = 5
However, I get an error for using '|' in UIUserNotificationSettings
block and will also receive the error "Argument labels (forTypes, categories) do not match any of the available overloads" for UIUserNotificationSettings
if I only have UIUserNotificationType.badge
as the first argument. Did swift 3.0 change the syntax for this statement?
It has been updated in both Swift 2 and Swift 3. This line should fix your issue. Also make sure any other lines with UIUserNotificationType have had their variables switched to lowercase.
let settings = UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
From what I understand, UIUserNotificationSettings
has been deprecated for iOS 10.0. It is now recommended that you use the UNUserNotificationCenter
.
Here's what I did to make sure my code was up to date:
1) Import the UserNotifications
framework in your AppDelegate
import UserNotifications
2) Inside the didFinishLaunchingWithOptions
function inside the AppDelegate
, add the following:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
UNUserNotificationCenter.current().requestAuthorization(options:[.badge, .alert, .sound]) { (granted, error) in
if granted {
UIApplication.shared.registerForRemoteNotifications()
}
}
return true
}
Once you have the notifications registered and allowed, you can change the badge number at any point:
UIApplication.shared.applicationIconBadgeNumber = value
This worked for me, I just tested it by sending a remote notification to my phone, and it worked fine. Hope this helps.
"rawValue" can use | operator.
This code works in swift3, we don't need to do that though.
let types = UIUserNotificationType(rawValue:UIUserNotificationType.alert.rawValue | UIUserNotificationType.sound.rawValue | UIUserNotificationType.badge.rawValue)
application.registerUserNotificationSettings(UIUserNotificationSettings(types: types, categories: nil))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With