【问题标题】:Add badge to app icon in iOS 8 with Swift使用 Swift 在 iOS 8 中为应用程序图标添加徽章
【发布时间】:2015-03-16 15:51:50
【问题描述】:

我想在我的应用程序图标上设置一个徽章,就像在苹果的邮件应用程序中一样(图标顶部的数字)。 如何在 Swift (iOS8) 中做到这一点?

【问题讨论】:

    标签: ios swift icons badge


    【解决方案1】:
    UIApplication.shared.applicationIconBadgeNumber = NotifCount
    

    【讨论】:

      【解决方案2】:

      2019

      答案很简单

      UIApplication.shared.applicationIconBadgeNumber = 777
      

      很遗憾,除非您事先征得许可,否则它不会起作用

      您只需:

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

      【讨论】:

      • 并在您请求授权的地方导入 UserNotifications
      【解决方案3】:

      “图标顶部的数字”称为徽章。除了应用程序图标(包括导航栏工具栏图标)之外,还可以在许多东西上设置徽章。

      有很多方法可以更改应用程序图标徽章。大多数用例涉及在应用程序处于后台时设置此设置,以提醒用户他们可能感兴趣的一些更改。这将涉及推送通知。

      有关更多信息,请参阅: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
      

      【讨论】:

      • 这不是objective-c吗?
      • 是的,我为你翻译了。之前的道歉。
      • 您应该添加对这段代码的作用的解释。否则,你不会教任何人任何东西。
      • 感谢您的回答。但是application 是什么?我收到一个错误 (use of unresolved identifier 'application')。
      • 我把它放在了AppDelegate文件的didFinishLaunchingWithOptions中。你也可以这样做:让 application = UIApplication.sharedApplication()。可能需要导入 UIKit。
      【解决方案4】:

      对于 iOS10Swift 3 以及 向后兼容性,您可以将最佳答案封装到一个不错的(静态)实用程序函数中:

      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
        }
      

      【讨论】:

      • 我们可以在没有 registerForRemoteNotifications 的情况下设置 Badge 吗?
      • @PatelJigar,我不这么认为。此徽章功能旨在通过通知更新
      • 我试过不使用 registerForRemoteNotifications 并且它可以工作
      • @Patal 您是否碰巧在您之前接受过通知权限的同一安装中尝试过它。尝试全新安装...
      • @quemeful,我可以知道这个函数应该在 App delegate 中的什么地方调用...?
      【解决方案5】:

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

      【讨论】:

      • 我需要在视图控制器的视图中调用它吗?还是我可以在应用委托中调用它...?
      • @AbiramiBala 你可以随心所欲地调用它
      • 我收到了所有状态的推送通知,即当应用程序处于前台、后台、关闭(终止)..!但我的问题是当应用程序处于后台状态并关闭(终止)状态时如何增加徽章计数????请详细告诉我我是如何做到的......?我的应用程序徽章计数仅在应用程序处于前台状态时增加.....?如果可能的话,请简短地告诉我......!对于 Swift 3
      猜你喜欢
      • 2012-03-22
      • 1970-01-01
      • 2013-10-05
      • 2017-03-02
      • 2021-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-15
      相关资源
      最近更新 更多