Swift-删除推送通知徽章号码?

use*_*719 68 swift

我试图在swift中删除图标徽章,但PFInstallation似乎不再起作用了.我该怎么做呢?

Oxc*_*cug 208

您可以通过将其设置为0来"删除"应用徽章图标:

斯威夫特<3.0

UIApplication.sharedApplication().applicationIconBadgeNumber = 0
Run Code Online (Sandbox Code Playgroud)

Swift 3.0+

UIApplication.shared.applicationIconBadgeNumber = 0
Run Code Online (Sandbox Code Playgroud)

此问题显示何时可以使用它:如何在iOS中清除推送通知徽章计数?

  • 因此,每次应用程序启动时将其重置为0都是标准做法吗? (4认同)
  • @ElgsQianChen真的取决于你的应用程序应该做什么/什么对你的观众最好.UX SO中可能更好地提出这个问题. (4认同)
  • 使用Swift 3的'UIApplication.shared.applicationIconBadgeNumber = 0` (4认同)

Moh*_*bil 11

斯威夫特 5

在 AppDelegate didFinishLaunchingWithOptions

UIApplication.shared.applicationIconBadgeNumber = 0
Run Code Online (Sandbox Code Playgroud)


小智 9

斯威夫特4.2

在AppDelegate处,只需输入以下代码:

    func applicationDidBecomeActive(_ application: UIApplication) {
        application.applicationIconBadgeNumber = 0
    }
Run Code Online (Sandbox Code Playgroud)

  • 如果您使用 SceneDelegate,则此代码将不起作用。使用此函数 func sceneDidBecomeActive(_ scene: UIScene) { UIApplication.shared.applicationIconBadgeNumber = 0 } (3认同)

Lan*_*don 7

斯威夫特 5

虽然您可以将它放在 AppDelegate didFinishLaunchingWithOptions 中,但如果应用程序处于非活动状态并已变为活动状态,则不会清除标记。

如果你想清除徽章而不管之前的状态你需要把它放在SceneDelegate而不是 AppDelegate 中。

func sceneDidBecomeActive(_ scene: UIScene) {
    UIApplication.shared.applicationIconBadgeNumber = 0
}
Run Code Online (Sandbox Code Playgroud)


Joh*_*sen 5

更面向 SwiftUI 的方法可能是监听@Environment(\.scenePhase) var scenePhase根视图中的更改。然后,如果新阶段为.active,则设置UIApplication.shared.applicationIconBadgeNumber0正如其他答案所讨论的那样。

示例代码:

@main
struct MRPApp: App {
    @Environment(\.scenePhase) var scenePhase
    @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
    var body: some Scene {
        WindowGroup {
            ContentView()
                .onChange(of: scenePhase) { newPhase in
                    if newPhase == .active {
                        UIApplication.shared.applicationIconBadgeNumber = 0
                    }
                }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)