1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

iOSアプリアイコンの通知バッヂを消したい

Posted at

概要

iOSアプリでよく出てくる「通知バッヂ」
アレがアプリを起動しても消えなかったのでなんとかして消します。

この記事を読んで嬉しい人

  • Swiftを使って開発をしている人
  • 通知バッヂを消したい人

必要な実装

今回はアプリアイコンにつく通知バッヂについてです。
よくあるのはアプリを起動するとバッヂが消える仕様です。他にあるのは通知を読むとその分だけ減るといったものです。
実は通知を受け取れるようにしただけではいけません。

必要な実装は以下です

@main
struct QuickMartApp: App {
    @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
    
    var body: some Scene {
        WindowGroup {
            RootView()
                .onReceive(NotificationCenter.default.publisher(for: UIApplication.didBecomeActiveNotification)) { _ in
                    Task {
                        await didBecomeActive()
                    }
                }
        }
    }
    
    private func didBecomeActive() async {
        try? await Task.sleep(for: .milliseconds(100))
        // ここから
        do {
            try await UNUserNotificationCenter.current().setBadgeCount(0)
        } catch {
            // エラー処理
        }
        // ここまで追加
    }
}

以上のコードを追加するだけで、アプリ起動時に通知バッヂを消すことが可能になります。
特にエラー処理を行わないのであれば、

try? await UNUserNotificationCenter.current().setBadgeCount(0)

とかでも十分です。

今回利用したsetBadgeCountのドキュメントは以下です。

余談ですが、UNUserNotificationCenterでは通知周りの管理を行うクラスオブジェクトです。

これを利用すると、そのアプリにおける通知の許可状態を取ることも可能です。

記事執筆裏話

本記事を制作するモチベーションとして、バッヂを消す方法を探していたときに以下のQiita記事を見つけました。

この方法に従って一旦実装してみたところ、制作中アプリの対応バージョンではDeprecatedとなっていたため、ドキュメント内で代わりに利用するよう促されていた今回の実装方法を採用した次第です。
Swiftは皆さんもご存知の通り進化の早い言語なので、頑張ってキャッチアップしていきたい所存です…!

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?