Dodaj odznakę do ikony aplikacji w systemie iOS 8 za pomocą Swift
Chciałbym ustawić plakietkę na ikonie mojej aplikacji, jak w aplikacji Apple mail (numer na górze ikony). Jak mogę to zrobić w Swift (iOS8)?
3 answers
"Liczba na górze ikony" nazywana jest Odznaką. Odznaki można ustawić na wielu rzeczach oprócz ikon aplikacji, w tym ikon paska nawigacyjnego.
Istnieje wiele sposobów na zmianę ikony aplikacji. Większość przypadków użycia polega na ustawieniu tego, gdy aplikacja jest w tle, aby ostrzec użytkownika, że istnieje pewna zmiana, którą może być zainteresowany. Wiązałoby się to z powiadomieniem push.
Więcej na ten temat zobacz: https://developer.apple.com/library/mac/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/ApplePushService.html
Możesz jednak również zmienić ją, gdy Twoja aplikacja jest aktywna. Będziesz potrzebował pozwolenia od użytkownika, rejestrując Typ UserNotificationType. Kiedy uzyskasz pozwolenie, możesz zmienić go na dowolny numer.
application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: UIUserNotificationType.Sound | UIUserNotificationType.Alert |
UIUserNotificationType.Badge, categories: nil
))
application.applicationIconBadgeNumber = 5
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-18 19:57:26
Odpowiedź Ericgu wydaje się nieaktualna. wygląda tak - > / został wymieniony.
Oto działający Swift 2 kod:
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
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-10 13:25:14
Dla iOS10, Swift 3 dzięki wstecznej kompatybilności , możesz zawinąć najlepsze odpowiedzi w ładną (statyczną) funkcję użytkową:
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
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-09 07:59:55