ios - 如何在 iOS 推送通知上做角标(Badge)增量

标签 ios push-notification swift2 badge

我目前正在从负载中获取角标(Badge)。但是我该如何更新该值。

{"aps":
    {"alert":"Notification Hub test notification2",
     "badge":1,
     "sound":"Default"}
}

当我发送这个时,它总是在角标(Badge)编号中显示 1,但是当我进入应用程序并退出时,它正在更新。正因为如此,

func applicationDidBecomeActive(application: UIApplication) {
        UIApplication.sharedApplication().applicationIconBadgeNumber = UIApplication.sharedApplication().applicationIconBadgeNumber + 1
    }

但是当我发送新的推送通知时,它再次在图标中显示 1 作为角标(Badge)编号。 我应该怎么做,据我所知,我应该在发送有效负载时发送更新的角标(Badge)。为此,我必须处理后端。

除此之外还有其他处理内部应用程序的建议吗?

最佳答案

如果你的项目有通知扩展,你可以在里面做一个角标(Badge)设置。

首先,启用应用组并在 UserDefaults 中的应用通知服务扩展中保存角标(Badge)计数。我们正在使用应用程序组,因为我们需要在打开应用程序时从 AppDelegate 中清除角标(Badge)计数。 您还可以将角标(Badge)的值设置为来自通知服务扩展的 bestAttemptContent.badge

在通知服务扩展中:

if let userDefaults = UserDefaults(suiteName: "group.com.bundle.appname") {
    
    let badgeCount = userDefaults.integer(forKey: "badgeCount")
    if badgeCount > 0 {
        userDefaults.set(badgeCount + 1, forKey: "badgeCount")
        bestAttemptContent.badge = badgeCount + 1 as NSNumber
    } else {
        
        userDefaults.set(1, forKey: "badgeCount")
        bestAttemptContent.badge = 1
    }
}

在 AppDelegate 中,您可以清除角标(Badge)...并在用户默认值上将角标(Badge)的值设置为零

if let userDefaults = UserDefaults(suiteName: "group.com.bundle.appname") {
    userDefaults.set(0, forKey:"badgeCount") // "change "badgecount" to be "badgeCount"
}
UIApplication.shared.applicationIconBadgeNumber = 0

关于ios - 如何在 iOS 推送通知上做角标(Badge)增量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38478013/

相关文章:

ios - 数组获得零 GCD

iphone - iOS逐帧动画,按脚本

objective-c - UIscrollview 滚动影响其他 scrollviews

push-notification - 了解 Windows Phone 8.1 的推送通知

xcode - NSDate() - Playground 与 Swift Xcode

ios - 如何移动 uitableview 自定义单元格?

ios - 从 Firebase 接收多个重复推送通知

ios - 收到通知时刷新 TableView

ios - 使用 nib ViewControllers 设置 UITabBarController

swift - 带有闭包初始值设定项的存储属性不允许局部变量