更新Swift中的徽章计数器

时间:2015-04-24 09:03:28

标签: ios swift parse-platform push-notification badge

使用以下代码,我会在应用程序编译后立即在徽章图标中获取(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。有谁知道如何解决它?

5 个答案:

答案 0 :(得分:15)

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

如果您正在发送正常消息(不使用json),则会有一个切换来增加徽章编号,只需勾选即可。如果您正在使用Json,请使用:

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

请注意,如果您不希望从服务器发送此内容,您也可以使用Parse的客户端推送将其从一台设备发送到另一台设备,在Parse.com上的应用程序中进入您的设置并启用"客户端推送",然后您可以将上述Json发送到另一个用户的设备。

答案 1 :(得分:14)

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

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

var badgeCount = 0 

 UIApplication.sharedApplication().applicationIconBadgeNumber = ++badgeCount

此外,无论何时完成任务,请将徽章图标设为0,否则会在您的应用中显示徽章图标

UIApplication.sharedApplication().applicationIconBadgeNumber = 0

答案 2 :(得分:5)

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

增量徽章编号

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

    1. 在我的情况下,我必须在打开应用程序后重置所有徽章计数。所以我在UIApplication.sharedApplication().applicationIconBadgeNumber = 0的{​​{1}}中设置了didFinishLaunchingWithOptions。我也重置了内存中的计数。

答案 3 :(得分:0)

这些答案都不再有效。

您需要查看推送代码,而不是AppDelegate

来自Parse docs:

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.

答案 4 :(得分:0)

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

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