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)?
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
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
}
}
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!
}
}
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
}