我们使用phonegap开发了一个ios应用程序,并在我们的应用程序中实现了推送通知功能。 推送通知对我们来说非常好。我们已经为两者(警报和徽章)配置了推送通知,两者都可以正常工作。 当我们点击警报列表时,它会将我们重定向到应用程序并清除警报列表中的所有通知,并且徽章计数器也会设置为0.
但是当我们点击应用程序图标(徽章计数器)时,它会将应用程序带到前台,但徽章计数器和警报不会被清除。
我们在didFinishLaunchingWithOptions方法(在appdelegate.m文件中)中使用了以下代码,该方法清除警报并仅在点击警报时重置徽章
application.applicationIconBadgeNumber = 0;
当我们点击带有徽章计数器的应用程序图标时,任何人都可以向我们提供显示相同行为的解决方案。
答案 0 :(得分:21)
要在应用程序变为活动状态时清除徽章计数,请使用delegate
方法
在 applicationWillEnterForeground 或 applicationDidBecomeActive
中调用 [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];- (void)applicationWillEnterForeground:(UIApplication *)application
{
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
}
或强>
- (void)applicationDidBecomeActive:(UIApplication *)application
{
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
}
<强>夫特强>
func applicationWillEnterForeground(application: UIApplication) {
UIApplication.sharedApplication().applicationIconBadgeNumber = 0
}
或强>
func applicationDidBecomeActive(application: UIApplication) {
UIApplication.sharedApplication().applicationIconBadgeNumber = 0
}
对于Swift 3:
UIApplication.shared.applicationIconBadgeNumber = 0
答案 1 :(得分:3)
在Swift中,以下内容适用于func applicationWillEnterForeground(application: UIApplication)
:
UIApplication.sharedApplication().applicationIconBadgeNumber = 0
答案 2 :(得分:0)
如果您在支持多个窗口的iOS 13上,请像这样激活“场景变为活动”方法。 此方法位于SceneDelegate上。
func sceneDidBecomeActive(_ scene: UIScene) {
UIApplication.shared.applicationIconBadgeNumber = 0;
}
答案 3 :(得分:0)
这就是我重置和删除它的方式。你可以在任何 vc 中调用它,假设它可以访问 tabBarController:
func resetAndRemoveTabBarBadge() {
UIApplication.shared.applicationIconBadgeNumber = 0
if let tabItems = tabBarController?.tabBar.items {
let item = 4 // this is whichever tabBarItem you set the badge to appear on
let tabItem = tabItems[item]
tabItem.badgeValue = nil
}
}