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

Author: grg, 2015-01-18

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

Tutaj wpisz opis obrazka

 28
Author: ericgu,
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
    }  
}

Tutaj wpisz opis obrazka

 16
Author: David Seek,
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
  }
 9
Author: datayeah,
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