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



我想在应用程序启动后清除推送通知徽章计数。我不清楚在哪里设置下面的代码。请简要说明如何清除徽章计数。

[UIApplication sharedApplication].applicationIconBadgeNumber = 0;

您应该设置这个:

[UIApplication sharedApplication].applicationIconBadgeNumber=0;

在这些AppDelegate方法中的任何一个如果应用程序已启动并发送到后台,则启动应用程序时将不会调用didFinishLaunchingWithOptions方法,因此请使用以下任一方法:

- (void)applicationWillEnterForeground:(UIApplication *)application
- (void)applicationDidBecomeActive:(UIApplication *)application

Swift 3+

- func applicationWillEnterForeground(_ application: UIApplication)
- func applicationDidBecomeActive(_ application: UIApplication)

在swift 3+

AppDelegate.Swift中,当您的应用程序处于活动状态时,将清除所有内容,如下所示。

func applicationDidBecomeActive(_ application: UIApplication) {
    UIApplication.shared.applicationIconBadgeNumber = 0
}

好吧,更好的方法是制作一个函数,减去徽章编号,然后制作一个UIButton,让用户清除徽章。在默认的邮件应用程序中,如果您阅读了一封电子邮件,徽章将从图标中减去一封。你永远不应该在启动或恢复时将其设置为0,这毫无意义,会让应用程序看起来很糟糕。当用户与该事件交互时减去它是最好的方法。让你的应用程序更专业,如果你只是在应用程序启动时重置它,谁知道床意味着什么,最好不要使用它。

您可以在代码中的任何位置设置该代码。。没关系。但一般情况下,保持在UIApplicationDidFinishLaunching。。

    UIApplication.shared.applicationIconBadgeNumber = 1
    UIApplication.shared.applicationIconBadgeNumber = 0

适用于iOS 13+

您需要在SceneDelegate.swift文件而不是AppDelegate.wswift中实现这些函数中的任何一个

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

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

将AppDelegate视为一般应用程序,而SceneDelegate则用于特定实例。这里有更好的解释->https://stackoverflow.com/a/59965183/7082339

在ContentView.swift内部,添加变量:

@Environment(.scenePhase) var scenePhase

然后在你身体的最外层添加onChange修饰符:

 .onChange(of: scenePhase) { newPhase in
                   if newPhase == .active {
                                        print("Active")
                                  } 
                   else if newPhase == .inactive {
       UIApplication.shared.applicationIconBadgeNumber = 0                                  
                                        } 
                   else if newPhase == .background { 
  UIApplication.shared.applicationIconBadgeNumber = 0
                                        }
                                    }

最新更新