【问题标题】:Clear applicationIconBadgeNumber without removing notifications not working清除 applicationIconBadgeNumber 而不删除通知不起作用
【发布时间】:2016-10-13 20:41:11
【问题描述】:

我在几篇文章(比如https://forums.developer.apple.com/thread/7598)中读到了这种设置

    application.applicationIconBadgeNumber = -1

applicationDidBecomeActiveapplicationWillEnterForeground 上,我可以在不从通知中心删除通知的情况下清除徽章编号。当我将application.applicationIconBadgeNumber 设置为负数(如-1)时,它会清除来自Notification Center 的所有通知。还有其他方法可以在不删除notifications的情况下清除徽章编号吗?

【问题讨论】:

  • 当您将其设置为像 1 这样的正值并在通知中心有 5 个通知时会发生什么。
  • 这是一个很好的问题。实际上无法控制通知中心中有多少通知。您可以手动计算它们,但在某些情况下,您会遇到刚才描述的图标徽章显示数字 1 的错误,但通知中心实际上有 5 个。但是,在我的应用程序中,只需清除图标徽章编号并将通知留在通知中心以供用户需要时使用。
  • 是的,我并不是说这是一种解决方案。只是想知道在这种情况下会发生什么。通知会被清除还是只保留 1 ?另外,由于您正在处理推送通知,我相信-您不能将徽章编号设置为 0 吗?
  • 不错!我在有效负载中将徽章编号设置为 0,通知仍保留在通知中心,但图标徽章从未出现。有趣的!但是,如果我想显示图标徽章,然后在用户打开应用程序时将其清除怎么办?不可能吧?
  • 我猜这已经在 iOS 10 中引入了。设置 applicationIconBadgeNumber = 0 也无济于事

标签: ios swift badge


【解决方案1】:

使用空的本地通知间接将应用程序徽章设置为 -1 对我有用,但在清除应用程序徽章计数的同时将通知保留在托盘中是一种黑客行为。

if(badgeCount == 0) {
   //set application badge indirectly with UILocalNotification
   UILocalNotification *ln = [[UILocalNotification alloc]init];
   ln.applicationIconBadgeNumber = -1;
   [[UIApplication sharedApplication] presentLocalNotificationNow:ln];
}
else {
   [[UIApplication sharedApplication] setApplicationIconBadgeNumber:badgeCount];
}

斯威夫特版本

if badgeCount == 0 {
    //set application badge indirectly with UILocalNotification
    var ln = UILocalNotification()
    ln.applicationIconBadgeNumber = -1
    UIApplication.sharedApplication().presentLocalNotificationNow(ln)
}
else {
    UIApplication.sharedApplication().applicationIconBadgeNumber = badgeCount
}

在 iOS 9 和 10 上测试的方法。

【讨论】:

  • 这需要添加到哪个函数中!?
  • 从 iOS 11 开始,这种方法不再有效。但是,[UIApplication sharedApplication]. applicationIconBadgeNumber = -1 再次生效。 Apple 可能正在推广新的 @available 语法。
【解决方案2】:
UIApplication.sharedApplication.applicationIconBadgeNumber = -1;

我已经在 iOS 12.2 中对其进行了测试,它对我来说可以通过远程通知正常工作。

通过在通知中心保持收到的远程通知来清除徽章计数。

代码sn-p供参考:

- (void)applicationDidBecomeActive:(UIApplication *)application {
    UIApplication.sharedApplication.applicationIconBadgeNumber = -1;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多