Ios 如何在iphone中单击应用程序图标时清除徽章计数器?

Ios 如何在iphone中单击应用程序图标时清除徽章计数器?,ios,objective-c,iphone,swift,apple-push-notifications,Ios,Objective C,Iphone,Swift,Apple Push Notifications,我们使用phonegap开发了一个ios应用程序,并在我们的应用程序中实现了推送通知功能。 推送通知对我们来说非常好。我们已经为这两个功能(警报和徽章)配置了推送通知,并且都可以正常工作。 当我们单击警报列表时,它会将我们重定向到应用程序,并清除警报列表中的所有通知,并且徽章计数器设置为0 但当我们点击应用程序图标(徽章计数器)时,它会将应用程序带到前台,但徽章计数器和警报不会被清除 我们在didFinishLaunchingWithOptions方法(在appdelegate.m文件中)中使用

我们使用phonegap开发了一个ios应用程序,并在我们的应用程序中实现了推送通知功能。 推送通知对我们来说非常好。我们已经为这两个功能(警报和徽章)配置了推送通知,并且都可以正常工作。 当我们单击警报列表时,它会将我们重定向到应用程序,并清除警报列表中的所有通知,并且徽章计数器设置为0

但当我们点击应用程序图标(徽章计数器)时,它会将应用程序带到前台,但徽章计数器和警报不会被清除

我们在didFinishLaunchingWithOptions方法(在appdelegate.m文件中)中使用了以下代码,该方法仅在单击警报时清除警报并重置徽章

 application.applicationIconBadgeNumber = 0;

当我们单击带有徽章计数器的应用程序图标时,是否有人能为我们提供显示相同行为的解决方案。

若要在应用程序激活时清除徽章计数,请使用
委托
方法。您可以在AppDelegate中使用
UIApplicationDelegate

调用[[UIApplication sharedApplication]setApplicationBadgeNumber:0]中的应用程序将进入前台或应用程序IDBECOMEACTIVE

- (void)applicationWillEnterForeground:(UIApplication *)application

{
 [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
 }

- (void)applicationDidBecomeActive:(UIApplication *)application
{
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
}
func applicationDidBecomeActive(application: UIApplication) {
UIApplication.sharedApplication().applicationIconBadgeNumber = 0
}
Swift

func applicationWillEnterForeground(application: UIApplication) {
UIApplication.sharedApplication().applicationIconBadgeNumber = 0
}

- (void)applicationDidBecomeActive:(UIApplication *)application
{
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
}
func applicationDidBecomeActive(application: UIApplication) {
UIApplication.sharedApplication().applicationIconBadgeNumber = 0
}
对于Swift 3:

UIApplication.shared.applicationIconBadgeNumber = 0
iOS 13>

func sceneDidBecomeActive(_ scene: UIScene) {
UIApplication.shared.applicationIconBadgeNumber = 0
}

在Swift中,将以下工作放入
功能应用程序将进入前台(应用程序:UIApplication)


如果您使用的是支持多个窗口的iOS 13,请在场景变为活动状态的方法上执行相同操作,如下所示。 此方法在SceneDelegate上

func sceneDidBecomeActive(_ scene: UIScene) {
    UIApplication.shared.applicationIconBadgeNumber = 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
    }
}

试试这个,在哪里调用这些函数?我们的appdelegate文件中不存在此类方法。请复制此方法的任何一个并粘贴到您的appdelegate.mSwift4:UIApplication.shared.ApplicationOnBadgeNumber=0在SceneDelegate而不是appdelegate中执行此操作对我来说很有效。谢谢