web-dev-qa-db-fra.com

Ajouter un badge à l'icône de l'application dans iOS 8 avec Swift

Je voudrais placer un badge sur l'icône de mon application comme dans l'application de messagerie d'Apple (numéro en haut de l'icône). Comment puis-je le faire dans Swift (iOS8)?

28
hans

Le "numéro en haut de l'icône" est appelé un badge. Les badges peuvent être définis sur un certain nombre de choses en plus des icônes d'application, y compris les icônes de la barre d'outils de la barre de navigation.

Il existe de nombreuses façons de modifier le badge d'icône d'application. La plupart des cas d'utilisation impliquent de le définir lorsque l'application est en arrière-plan pour alerter l'utilisateur qu'il y a des changements qui pourraient l'intéresser. Cela impliquerait une notification Push.

Pour plus d'informations, voir: https://developer.Apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/APNSOverview.html#//Apple_ref/doc/uid/TP40008194-CH8-SW1

Cependant, vous pouvez également le modifier pendant que votre application est active. Vous aurez besoin de l'autorisation de l'utilisateur en enregistrant le UserNotificationType. Une fois que vous avez obtenu l'autorisation, vous pouvez la changer en n'importe quel numéro que vous souhaitez.

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

application.applicationIconBadgeNumber = 5

enter image description here

30
ericgu

la réponse d'ericgu semble dépassée. ressemble à ceci -> | a été remplacé.

Voici un code de travail Swift 2 :

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

Modifier: 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
    }  
}

enter image description here

19
David Seek

2019

La réponse est simplement

UIApplication.shared.applicationIconBadgeNumber = 777

Malheureusement, cela ne fonctionnera pas sauf si vous demandez d'abord la permission.

Pour ce faire, il vous suffit de:

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

Pour iOS1, Swift avec rétrocompatibilité, vous pouvez encapsuler les meilleures réponses dans une fonction utilitaire Nice (statique):

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
  }
11
datayeah