iOS対応

【Unity×iOS】アプリが非表示・再表示された時の検知方法|バックグラウンド復帰対応ガイド

iOSでは、ユーザーがホーム画面に戻ったり、別のアプリに切り替えたりすると、アプリがバックグラウンド状態に入ります。
また、再びアプリに戻ってきた時にはフォアグラウンドに復帰します。
Unityアプリでも、この「非表示→再表示」イベントを正しく検知して処理を分岐させることはとても重要です。
この記事では、UnityでiOSのアプリ非表示・再表示を検知する方法を、コピペできるサンプル付きで解説します!

この記事で分かること

  • iOSアプリのライフサイクル(フォアグラウンド・バックグラウンド)とは?
  • Unity標準のイベントで非表示・再表示を検知する方法
  • コピペOK!OnApplicationPauseとOnApplicationFocusの使い分け
  • よくある落とし穴と実装時の注意点

iOSアプリのライフサイクルとは?

iOSアプリは、次のようなライフサイクルで状態が切り替わります。

状態説明
フォアグラウンド画面に表示され、操作可能な状態
バックグラウンド非表示状態だが一時的にメモリ上に存在
サスペンドメモリにも存在せず停止寸前状態(iOS管理)

ユーザーがホームボタン(もしくはスワイプ)でアプリを閉じたり、別アプリに切り替えた時に、バックグラウンド→再表示(復帰)が発生します。

これをUnityで検知できれば、

  • ゲームを一時停止したり
  • データのオートセーブをしたり
  • ネットワークセッションを切断したり など、ユーザー体験の向上に繋げることができます!

Unity標準のイベントで非表示・再表示を検知する

Unityには、アプリ状態の変化を検知できる標準イベントが2つ用意されています。

OnApplicationPause(bool pauseStatus)

  • pauseStatus == true ならアプリがバックグラウンドへ移行
  • pauseStatus == false ならアプリがフォアグラウンド復帰
void OnApplicationPause(bool pauseStatus)
{
    if (pauseStatus)
    {
        Debug.Log("アプリがバックグラウンドに入りました");
    }
    else
    {
        Debug.Log("アプリがフォアグラウンドに復帰しました");
    }
}

ほとんどのケースでは、これだけで十分です!

OnApplicationFocus(bool hasFocus)

  • hasFocus == true なら操作可能な状態
  • hasFocus == false なら外れた状態(例えばコールが来た時なども)
void OnApplicationFocus(bool hasFocus)
{
    if (hasFocus)
    {
        Debug.Log("アプリにフォーカスが戻りました(操作可能)");
    }
    else
    {
        Debug.Log("アプリからフォーカスが外れました");
    }
}

注意点:
OnApplicationFocusは単純なバックグラウンド移行以外にも反応するため、
確実に「非表示→再表示」を検知したいなら、OnApplicationPauseを使う方が安全です。

【コピペOK】バックグラウンド検知スクリプト

このスクリプトを、シーンに存在するどこかのGameObjectにアタッチしておけばOK!

using UnityEngine;

public class AppLifecycleHandler : MonoBehaviour
{
    private void OnApplicationPause(bool pauseStatus)
    {
        if (pauseStatus)
        {
            Debug.Log("バックグラウンドへ移行");
            // 例)自動セーブ、ネットワーク切断
        }
        else
        {
            Debug.Log("フォアグラウンドに復帰");
            // 例)データ再ロード、ネットワーク再接続
        }
    }

    private void OnApplicationFocus(bool hasFocus)
    {
        Debug.Log($"アプリフォーカス状態: {(hasFocus ? "取得" : "喪失")}");
        // ※通知表示後など、細かい制御が必要ならこちらも併用
    }
}

よくある落とし穴と注意点

問題解説対策
通知バナーが出たときにもOnApplicationFocusが呼ばれるフォーカス喪失だけでは必ずしも「非表示」とは限らないOnApplicationPause中心で管理する
アプリ復帰直後にシーン遷移してしまう状態復帰タイミングで別処理が動くと不具合の原因に1フレーム遅らせる or フラグ管理
iOSのタスクキル(完全終了)時は検知できないアプリが生きていないため通知されないバックグラウンド復帰だけに絞って設計する

まとめ

ポイント内容
アプリ非表示・再表示はUnity標準イベントで検知可能OnApplicationPause(bool) を活用
iOSではバックグラウンド復帰管理が重要自動セーブ、ネット切断/再接続に応用
OnApplicationFocusは補助的に使う細かいUXチューニングに便利

iOS向けUnityアプリでは、非表示・再表示イベントを正しく処理することがユーザー満足度に直結します!
ぜひ今回紹介したテクニックを、あなたのアプリに取り入れてみてください。