更新 Swift 中的徽章计数器

问题描述 投票:0回答:6

使用以下代码,应用程序编译后,我会立即在徽章图标中看到 (2):

func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
    let installation = PFInstallation.currentInstallation()
    installation.setDeviceTokenFromData(deviceToken)
    installation.badge = 2
    installation.saveInBackground()
}

我确实尝试了下一个变体:初始化了一个新的

var badgeCount = 0
,后来:

func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
    badgeCount++
    let installation = PFInstallation.currentInstallation()
    installation.setDeviceTokenFromData(deviceToken)
    installation.badge = badgeCount
    installation.saveInBackground()
}

但是当我收到新通知时,它不会更新为+1。有谁知道如何解决吗?

ios swift parse-platform push-notification badge
6个回答
24
投票

每当编译代码时,它都会显示之前存储在您的应用程序中的徽章图标。如果您未在应用程序中设置徽章图标 = 0,则每次编译或进入后台状态时,都会在应用程序中显示徽章图标编号。

现在针对您的问题,请使用徽章图标作为

var badgeCount = 0 

 UIApplication.sharedApplication().applicationIconBadgeNumber = ++badgeCount

此外,每当您完成任务时,请将徽章图标设置为 0,否则它将在您的应用程序中显示徽章图标

UIApplication.sharedApplication().applicationIconBadgeNumber = 0

22
投票

除非应用程序实际打开,否则不会使用此方法更新徽章编号。如果您想在收到通知时更新徽章编号,则需要将 json 推送通知的 Badge 属性设置为所需的编号。

如果您发送普通消息(不使用 json),则有一个开关可以增加徽章编号,只需勾选即可。如果你使用 Json 那么使用这个:

{
    "aps": {
        "alert": "Test Push Notification",
        "sound": "yourSound.aiff",
        "Badge": "desiredNumber"
    }
}

请注意,如果您不想从服务器发送此信息,您也可以利用 Parse 的客户端推送将其从一台设备发送到另一台设备,进入 Parse.com 上应用程序的设置并启用“客户端推送”,您然后可以将上述 Json 发送到另一个用户的设备。


8
投票

在 Swift 5 中,您可以随时使用以下代码更新应用程序的徽章:

UIApplication.shared.applicationIconBadgeNumber = 0 // YOUR NUMBER DESIRED

5
投票

我研究过类似的场景,最终找到的解决方案是增加和重置徽章编号。

增加徽章编号

  1. 我总是将徽章数量保存在内存中(
    NSUserDefaults
    )
  2. 每次我必须设置通知时,我都会获取当前的徽章编号增量,并将该数字设置为
    .applicationIconBadgeNumber
    并更新内存中的计数。

重置徽章号码

  1. 就我而言,一旦打开应用程序,我就必须重置所有徽章计数。所以我把
    UIApplication.sharedApplication().applicationIconBadgeNumber = 0
    设置在
    didFinishLaunchingWithOptions
    AppDelegate
    中。我还重置了内存中的计数。

0
投票

这些答案都不再有效。

您需要查看您的 Push 代码,而不是您的 AppDelegate

来自解析文档:

badge: (iOS/OS X only)
the value indicated in the top right corner of the app icon. 
This can be set to a value or to Increment in order to increment the current value by 1.

0
投票
UNUserNotificationCenter.current().setBadgeCount(x)

// 已弃用

UIApplication.shared.applicationIconBadgeNumber = x

© www.soinside.com 2019 - 2024. All rights reserved.