iOS
 Computer >> コンピューター >  >> プログラミング >> iOS

iOSアプリがフォアグラウンドかバックグラウンドかを判定する方法【NotificationCenter活用】

iOS開発において、アプリが現在フォアグラウンド(前面)で動作しているのか、バックグラウンド(背面)に移行したのかを把握することは非常に重要です。バックグラウンドでのダウンロード処理や、アプリが前面に復帰した際のイベント処理など、状態に応じた適切なハンドリングが求められるためです。

本記事では、NotificationCenter(通知センター)を使って、アプリのフォアグラウンド・バックグラウンドの状態変化を検知する方法を解説します。

NotificationCenterとは?

NotificationCenterは、登録されたオブザーバー(観察者)へ情報をブロードキャスト(一斉配信)するための通知ディスパッチ機構です。Appleの公式ドキュメントも参考にしてみてください。

参考:Apple公式ドキュメント – NotificationCenter

今回はこのNotificationCenterにオブザーバーを登録し、アプリの状態変化時に呼び出される処理を実装していきます。

実装手順

ステップ1:プロジェクトの作成

Xcodeを開き、「New Project」→「Single View Application」を選択して、新しいプロジェクトを作成します。ここではプロジェクト名を「ForegroundBackground」とします。

ステップ2:NotificationCenterのインスタンスを生成

viewDidLoad内で、NotificationCenterのデフォルトインスタンスを取得します。

let notificationCenter = NotificationCenter.default

ステップ3:バックグラウンド・フォアグラウンドのオブザーバーを登録

アプリが非アクティブになる直前に発火する willResignActiveNotification と、アクティブになった直後に発火する didBecomeActiveNotification の2つの通知に対して、オブザーバーを登録します。

notificationCenter.addObserver(self, selector: #selector(backgroundCall), name: UIApplication.willResignActiveNotification, object: nil)

notificationCenter.addObserver(self, selector: #selector(foregroundCall), name: UIApplication.didBecomeActiveNotification, object: nil)

ステップ4:セレクターメソッドを実装

通知を受け取った際に呼び出されるメソッドを実装します。@objc属性を付けることで、セレクターとして指定できるようになります。

@objc func foregroundCall() {
    print("App moved to foreground")
}

@objc func backgroundCall() {
    print("App moved to background!")
}

ステップ5:ブレークポイントを設定してアプリを実行

print文にブレークポイントを設定し、アプリを起動します。ホームボタンを押してバックグラウンドに移行したり、アプリに戻ったりすることで、それぞれの通知が正しく発火していることを確認できます。

完成コード

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let notificationCenter = NotificationCenter.default

        notificationCenter.addObserver(self, selector: #selector(backgroundCall), name: UIApplication.willResignActiveNotification, object: nil)

        notificationCenter.addObserver(self, selector: #selector(foregroundCall), name: UIApplication.didBecomeActiveNotification, object: nil)
    }

    @objc func foregroundCall() {
        print("App moved to foreground")
    }

    @objc func backgroundCall() {
        print("App moved to background!")
    }
}

まとめ

NotificationCenterを活用することで、わずか数行のコードでアプリのフォアグラウンド・バックグラウンドの状態変化を簡単に検知できます。バックグラウンドタスクの制御や、アプリ復帰時のデータ再読み込みなど、実際のアプリ開発で幅広く応用できるテクニックなので、ぜひマスターしておきましょう。

  1. iOS 11でFaceTimeが使えない・繋がらないときの対処法まとめ

    FaceTimeは、家族や友人とコミュニケーションを取るためのAppleの優れたサービスです。特に海外に住む人との連絡には最適で、インターネット接続さえあれば無料でビデオ通話ができる、最も手軽で低コストな手段といえます。しかし、iOS 11環境下でFaceTimeがうまく動作しないトラブルに遭遇することがあります。せっかくの通話ができず、非常に困ってしまう経験をお持ちの方も多いのではないでしょうか。この記事では、「FaceTimeが利用できない」「FaceTimeが機能しない」といった問題に直面したときに試せる、さまざまな解決策を詳しく解説します。FaceTimeとは?初めての方のために簡単に

  2. Windowsタスクスケジューラでタスクをバックグラウンド(非表示)またはフォアグラウンドで実行する方法

    Windowsでは、タスクスケジューラを利用して、特定のアプリケーションやバッチファイルをバックグラウンド(非表示)またはフォアグラウンド(画面に表示)で実行したいケースがあります。本記事では、Windowsのスケジュールされたタスクをバックグラウンドまたはフォアグラウンドで実行するように設定する手順を、ステップバイステップでわかりやすく解説します。 タスクをバックグラウンドで実行する設定方法 スケジュールされたタスクの実行方式(表示/非表示)は、タスクのプロパティにある「全般」タブで設定できます。 基本の手順 1. 新しくタスクを作成した場合、デフォルトでは「ユーザーがログオンしているときの