【问题标题】:Update badge counter in Swift在 Swift 中更新徽章计数器
【发布时间】:2015-07-02 19:11:19
【问题描述】:

使用以下代码,我在应用编译后立即在徽章图标中获得 (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。有人知道怎么解决吗?

【问题讨论】:

  • 您能否分享您的代码和 Parse 设置,因为您似乎解决了您的问题,我也有同样的问题,但我无法解决。我现在不使用 Parse,但如果你能成功更新徽章计数,我会使用它。非常感谢。

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


【解决方案1】:

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

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

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

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

【讨论】:

  • 如何从服务器发送?我如何知道有多少通知未读?
  • 我看起来你正在使用 parse.com 对吗?如果您发送的是普通消息(不使用儿子),则有一个用于增加徽章编号的开关,只需勾选即可。如果您使用的是 Json,请使用:{ "aps": { "alert": "Test Push Notification", "sound": "yourSound.aiff", "Badge": "numberYouNeed" }
  • 这就是答案 - 花点时间阅读 Swinny89 实际发布的内容。 Swinny89 - 你可以用你的评论编辑你的答案
  • 再次阅读我答案的第一行
  • 确保消息类型设置为纯文本,增量标记为是,输入您的消息并发送。如果应用程序未打开,则会为您更新徽章。打开您的应用程序时,或在您需要时,确保使用 UIApplication.sharedApplication().applicationIconBadgeNumber = 0 并使用 currentInstalltion.badge = 0 将徽章设置回 0,然后将其保存在后台
【解决方案2】:

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

现在解决您的问题,使用徽章图标作为

var badgeCount = 0 

 UIApplication.sharedApplication().applicationIconBadgeNumber = ++badgeCount

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

UIApplication.sharedApplication().applicationIconBadgeNumber = 0

【讨论】:

  • 我将其粘贴到 didRegisterForRemoteNotificationsWithDeviceToken 中,例如:let notif = UIApplication.sharedApplication() notif.applicationIconBadgeNumber = ++badgesCount installation.saveInBackground(),然后什么都没有了 =/
  • 如果你不让徽章图标 = 0 它将一直显示
  • 请描述您的申请流程,以便我们调整图标编号。例如,最初它是 0,当推送通知递增时,在一些任务递减之后
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

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

    增加徽章编号

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

    重置徽章编号

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

    【讨论】:

      【解决方案5】:

      这些答案都不再有效。

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

      来自 Parse 文档:

      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.
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-04
        • 1970-01-01
        • 2021-06-22
        • 1970-01-01
        • 1970-01-01
        • 2012-04-02
        • 1970-01-01
        相关资源
        最近更新 更多