簡體   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