更新Swift中的徽章计数器

Ork*_*ade 16 push-notification badge ios parse-platform swift

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

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

我确实尝试了下一个变体:初始化一个新的var badgeCount = 0和后来的:

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

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

Swi*_*y89 16

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

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

{
    "aps": {
        "alert": "Test Push Notification",
        "sound": "yourSound.aiff",
        "Badge": "desiredNumber"
    }
}
Run Code Online (Sandbox Code Playgroud)

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


Riz*_*ikh 16

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

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

var badgeCount = 0 

 UIApplication.sharedApplication().applicationIconBadgeNumber = ++badgeCount
Run Code Online (Sandbox Code Playgroud)

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

UIApplication.sharedApplication().applicationIconBadgeNumber = 0
Run Code Online (Sandbox Code Playgroud)


Rah*_*hna 5

我已经开始研究类似的场景和我发现的最终解决方案,以增加和重置徽章编号.

增加徽章编号

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

重置徽章编号

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


Die*_*era 5

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

UIApplication.shared.applicationIconBadgeNumber = 0 // YOUR NUMBER DESIRED
Run Code Online (Sandbox Code Playgroud)