【Swift/Apple Watch】WKExtensionでフォアグラウンド/バックグラウンドの検知

この記事からわかること

  • SwiftApple Watchアプリ開発する方法
  • フォアグラウンド/バックグラウンド検知する方法
  • WKExtensionとは?
  • NotificationCenterの使い方

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

環境

WatchOSアプリでフォアグラウンド/バックグラウンドを検知する方法

WatchOSアプリを開発中にアプリがフォアグラウンド/バックグラウンドへ移行したことを検知するためにNotificationCenterを使用して以下のように実装したところUIApplicationが見つからないというエラーになってしまった。

おすすめ記事:【Swift】NotificationCenterクラスの使い方!NSNotification.Name型の種類!

NotificationCenter.default.publisher(for: UIApplication.didEnterBackgroundNotification)
    .sink { _ in
        print("アプリがバックグラウンドになった")
    }
    .store(in: &cancellables)

調べてみるとWKExtensionを使用することで実装できるみたいです。

参考文献: WatchOS: getting applicationDidBecomeActive notifications

class AppState {  
    private var cancellable: AnyCancellable?
    
    init() {
        cancellable = NotificationCenter.default.publisher(for: WKExtension.applicationDidEnterBackgroundNotification)
            .sink { _ in
                print("アプリがバックグラウンドになった")
            }
    }
}

WKExtensionクラスとは?

公式リファレンス:WatchKit - Observing messages from the notification center

WKExtensionクラスはwatchOS上で実行されるアプリのの制御と調整を担当するクラスです。アプリの起動や停止といったライフサイクルの取得やリモート通知の登録などを行うことができるようです。

class AppState {

    private var cancellables = Set<AnyCancellable>()
    
    init() {
        NotificationCenter.default.publisher(for: WKExtension.applicationDidBecomeActiveNotification)
            .sink { _ in
                print("アプリがアクティブになった")
            }
            .store(in: &cancellables)
        
        NotificationCenter.default.publisher(for: WKExtension.applicationWillResignActiveNotification)
            .sink { _ in
                print("アプリが非アクティブになった")
            }
            .store(in: &cancellables)
        
        NotificationCenter.default.publisher(for: WKExtension.applicationDidEnterBackgroundNotification)
            .sink { _ in
                print("アプリがバックグラウンドになった")
            }
            .store(in: &cancellables)
        
        NotificationCenter.default.publisher(for: WKExtension.applicationWillEnterForegroundNotification)
            .sink { _ in
                print("アプリがフォアグラウンドになった")
            }
            .store(in: &cancellables)
    }
}

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index