Firebase 推送通知徽章计数是不是在 iOS 中自动增加?

Posted

技术标签:

【中文标题】Firebase 推送通知徽章计数是不是在 iOS 中自动增加?【英文标题】:Does Firebase push-notification badge count increase automatic in iOS?Firebase 推送通知徽章计数是否在 iOS 中自动增加? 【发布时间】:2020-06-15 16:13:55 【问题描述】:

我收到来自 firebase 的远程推送通知。我正在尝试在应用程序图标中获取徽章计数。 在 Firebase 中,可以选择将徽章计数如下所示

至于现在我没有要测试的设备。我的问题是,如果我每次都将 1 作为徽章计数,它会在应用程序图标上自动增加徽章计数吗?如果没有,那么如何使用firebase来增加它。

【问题讨论】:

回答下面,UserDefaults 是您想要使用的。非常容易实现。 徽章计数是确定的,而不是累积的。这意味着如果您有一个 4 的徽章,那么您发送另一个 1,4 将被 1 替换,而不是添加。您必须自己存储徽章计数并添加每个传入通知中包含的数字以获得累积的数字。 【参考方案1】:

您想使用UserDefaults 来跟踪收到的通知数量

1- 首先将徽章计数注册到UserDefaults,值为0。我通常在 viewDidLoad 的登录屏幕上注册我需要注册的任何其他值

var dict = [String: Any]()
dict.updateValue(0, forKey: "badgeCount")
UserDefaults.standard.register(defaults: dict)

2- 当您的通知从 Firebase 发送到您的应用时,请更新 "badgeCount"。以下是通知进入AppDelegate 时的示例:

// this is inside AppDelegate
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) 

    // A. get the dict info from the notification
    let userInfo = notification.request.content.userInfo

    // B. safely unwrap it 
    guard let userInfoDict = userInfo as? [String: Any] else  return 

    // C. in this example a message notification came through. At this point I'm not doing anything with the message, I just want to make sure that it exists
    guard let _ = userInfoDict["message"] as? String else  return 

    // D. access the "badgeCount" from UserDefaults that you registered in step 1 above
    if var badgeCount = UserDefaults.standard.value(forKey: "badgeCount") as? Int 

        // E. increase the badgeCount by 1 since one notification came through
        badgeCount += 1

        // F. update UserDefaults with the updated badgeCount
        UserDefaults.standard.setValue(badgeCount, forKey: "badgeCount")

        // G. update the application with the current badgeCount so that it will appear on the app icon
        UIApplication.shared.applicationIconBadgeNumber = badgeCount
    

3- 无论您使用哪个 vc 中的任何逻辑来确认用户查看了通知,都将 UserDefaults'badgeCount 重置为零。还将UIApplication.shared.applicationIconBadgeNumber 设置为零

一些VC:

func resetBadgeCount() 

    // A. reset userDefaults badge counter to 0
    UserDefaults.standard.setValue(0, forKey: "badgeCount")

    // B. reset this back to 0 too
    UIApplication.shared.applicationIconBadgeNumber = 0

UIApplication.shared.applicationIconBadgeNumber的信息

【讨论】:

这只有在你的应用程序在前台接收通知时才有效。 developer.apple.com/documentation/usernotifications/… > 询问代理如何处理应用在前台运行时到达的通知 @KévinRenella 如果你注意到我说“这是一个例子......”。问题是关于更新徽章计数。我的回答是向某人展示如何轻松增加/减少徽章数量。如果我展示了每一个用例,那将超出问题的范围。我使用了这个示例,以便人们可以看到它的实际效果。顺便说一句,你所说的“这只有在......”的情况下才有效,这听起来就像我告诉他们更新徽章计数的方式只有在应用程序处于前台时才有效——这是一种误导。您应该说“该示例仅在应用程序处于前台时才有效”

以上是关于Firebase 推送通知徽章计数是不是在 iOS 中自动增加?的主要内容,如果未能解决你的问题,请参考以下文章

iOS6 中的自动增量推送通知徽章

如何在 iOS 中清除推送通知徽章计数?

如何在 iOS 10 中为推送通知设置徽章计数?

ios:此有效负载格式中的推送通知徽章计数未增加

在 ios7 中更新推送通知的徽章计数

在 ios7 中更新推送通知的徽章计数