web-dev-qa-db-ja.com

Swift=でiOS 8のアプリアイコンにバッジを追加

Appleのメールアプリのように、アプリのアイコンにバッジを設定したい(アイコンの上の数字)。 Swift(iOS8)でこれを行うにはどうすればよいですか?

28
hans

「アイコンの上の数字」はバッジと呼ばれます。バッジは、ナビゲーションバーのツールバーアイコンなど、アプリケーションアイコン以外の多くの項目に設定できます。

アプリケーションアイコンバッジを変更するには多くの方法があります。ほとんどのユースケースでは、アプリケーションがバックグラウンドにあるときにこれを設定して、ユーザーに関心のある変更があることをユーザーに警告します。これにはプッシュ通知が含まれます。

詳細については、以下を参照してください: https://developer.Apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/APNSOverview.html#//Apple_ref/doc/uid/TP40008194-CH8-SW1

ただし、アプリがアクティブなときに変更することもできます。 UserNotificationTypeを登録することにより、ユーザーの許可が必要になります。許可を得たら、希望する番号に変更できます。

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

application.applicationIconBadgeNumber = 5

enter image description here

30
ericgu

ericguの答えは時代遅れのようです。このように見える-> |交換されました。

動作するSwift 2コード:

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

編集: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年

答えは単純です

UIApplication.shared.applicationIconBadgeNumber = 777

残念ながら、最初に許可を求めない限り、それは動作しませんです。

それを行うには、単純に:

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

iOS1Swiftbackward-compatibilityの場合、ベストアンサーをNice(静的)ユーティリティ関数にラップできます。

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