Add badge to app icon in iOS 8 with Swift

≡放荡痞女 提交于 2019-12-04 07:51:50

问题


I'd like to set a badge on the icon of my app like in apple's mail app (number on top of the icon). How can I do this in Swift (iOS8)?


回答1:


The "number on top of the icon" is called a Badge. Badges can be set on a number of things besides Application Icons including Navigation Bar toolbar icons.

There are many ways to change the Application Icon Badge. Most use cases involve setting this when the Application is in the background to alert the user that there is some change that they may be interested in. This would involve a push notification.

For more on that see: https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/APNSOverview.html#//apple_ref/doc/uid/TP40008194-CH8-SW1

However, you can also change it while your app is active. You will need permission from the user by registering the UserNotificationType. Once you get permission, you can change it to whatever number you wish.

application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: UIUserNotificationType.Sound | UIUserNotificationType.Alert |
        UIUserNotificationType.Badge, categories: nil
        ))

application.applicationIconBadgeNumber = 5




回答2:


ericgu's answer seems to be outdated. looks like this -> | got replaced.

Here is a working Swift 2 code:

    let badgeCount: Int = 0
    let application = UIApplication.sharedApplication()
    application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: [.Badge, .Alert, .Sound], categories: nil))        
    application.applicationIconBadgeNumber = badgeCount

Edit: Swift 3:

import UIKit
import UserNotifications

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let badgeCount: Int = 10
        let application = UIApplication.shared
        let center = UNUserNotificationCenter.current()
        center.requestAuthorization(options:[.badge, .alert, .sound]) { (granted, error) in
            // Enable or disable features based on authorization.
        }
        application.registerForRemoteNotifications()
        application.applicationIconBadgeNumber = badgeCount
    }  
}




回答3:


2019

The answer is simply

UIApplication.shared.applicationIconBadgeNumber = 777

Unfortunately though it will not work unless you ask for permission first.

To do that you simply:

UNUserNotificationCenter.current().requestAuthorization(options: .badge)
     { (granted, error) in
          if error != nil {
              // success!
          }
     }



回答4:


For iOS10, Swift 3 with backward-compatibility, you can wrap the best answers into a nice (static) utility function:

class func setBadgeIndicator(badgeCount: Int) {
    let application = UIApplication.shared
    if #available(iOS 10.0, *) {
      let center = UNUserNotificationCenter.current()
      center.requestAuthorization(options: [.badge, .alert, .sound]) { _, _ in }
    } else {
      application.registerUserNotificationSettings(UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil))
    }
    application.registerForRemoteNotifications()
    application.applicationIconBadgeNumber = badgeCount
  }


来源:https://stackoverflow.com/questions/28011118/add-badge-to-app-icon-in-ios-8-with-swift

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!