更新iOS应用角标而不需要推送通知

88

我看到过一些todo应用程序会在午夜时更新他们的应用徽章,始终显示正确的待办任务数量。他们这样做不使用推送通知 - 那么我的问题是:他们是如何做到这一点的?他们使用本地通知吗 - 如果是,设备关闭时是否会调用这些通知?我有点困惑,希望能得到一些指导。


同样的问题,但是针对 macOS:https://dev59.com/questions/73RC5IYBdhLWcg3wKtr2 - Jon Schneider
6个回答

138

试试这个

[[UIApplication sharedApplication] setApplicationIconBadgeNumber:1];
要通过本地通知实现这一点,您需要设置applicationIconBadgeNumber的值。
UILocalNotification *localNotification = [[UILocalNotification alloc] init];
localNotification.applicationIconBadgeNumber = 1;// set here the value of badge

1
这是如何更改徽章编号的方法 - 但是为了在应用程序处于后台或手机休眠时执行此操作,您可能需要研究本地通知或计划任务。 - Jasarien
2
在iOS 8.0及以上版本中,您的应用程序必须使用-[UIApplication registerUserNotificationSettings:]注册用户通知,然后才能设置图标徽章。 - unom

17

对于使用新的、光鲜亮丽的 Swift 的每个人:

UIApplication.sharedApplication().applicationIconBadgeNumber = someNumber

Swift 3:

UIApplication.shared.applicationIconBadgeNumber = someNumber

2
当建议快速答案时,最好包括您正在涵盖的版本,因为现在非常动态。 - Juan Boero
是的,你说得对;然而,在这种情况下,语法中没有任何可能改变的东西(它只是简单的赋值),所以可能不需要 :) - Jiri Trecak
3
吉里,回想起来很有趣的评论 ;-) - Tim

13
自iOS 4.0以来,您可以在所有运行至少iOS 4.0的设备上触发本地通知。请查看UILocalNotification类,它允许您在午夜之前设置应用程序的徽章,而无需运行应用程序。

嗯,iPhone 甚至无法在关机状态下启动闹钟,因此徽章不会在那时更新。但是当您重新打开它时,它将触发通知以更新徽章。 - JustSid
好的,这就是我想知道的。谢谢! - fabian789

7

当应用程序运行时,在您的代码中设置UIApplicationapplicationIconBadgeNumber属性:

[UIApplication sharedApplication].applicationIconBadgeNumber = someNumber;

0

对于Objective C,你必须使用:

[[UIApplication sharedApplication] setApplicationIconBadgeNumber : anyNumber ];            

0

Swift 5

UIApplication.shared.applicationIconBadgeNumber = someNumber

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接