繁体   English   中英

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

[英]How to clear push notification badge count in iOS?

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

[UIApplication sharedApplication].applicationIconBadgeNumber = 0;

你应该设置这个:

[UIApplication sharedApplication].applicationIconBadgeNumber = 0;

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

- (void)applicationWillEnterForeground:(UIApplication *)application

- (void)applicationDidBecomeActive:(UIApplication *)application

对于斯威夫特 3+

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

在迅速 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.swift中实现这些功能之一

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
                                        }
                                    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM