はじめに
「一定時間後に通知を出したい」「しばらく遊んでいないユーザーに、もう一度アプリを開いてほしい」
モバイルゲームやアプリを作っていると、こんなことを考える場面ってありますよね。
そんなときに活躍するのがローカル通知(Local Notification)です。
サーバーを用意しなくても、アプリ内部だけで「決まった時間に通知を出す」ことができるので、個人開発や小規模アプリでも取り入れやすい仕組みです。
ただし、いざ実装しようとすると、
- AndroidとiOSでやり方が違っていて混乱する
- どこまで設定すれば動くのかわからない
- 古い記事の方法が今のUnityで使えない
といったところでつまずきやすいのも事実です。
この記事では、Unity初心者〜初級者の方に向けて、
Unity公式の「Mobile Notifications」パッケージを使った、安全で再現性の高いローカル通知の実装方法を、
Android・iOS両対応でやさしく解説していきます。
「ネイティブ実装は避けたい」「まずはシンプルに通知を出せるようになりたい」
そんな方でも、読み終わるころには自分のプロジェクトにローカル通知を組み込める状態になるはずです 🙂
それではまず、ローカル通知がどんな仕組みなのかから見ていきましょう。
結論:Unity公式の「Mobile Notifications」パッケージが最適
Unityでローカル通知を実装するなら、Unity公式の「Mobile Notifications」パッケージを使う方法が最適解です。
AndroidとiOSでは、通知の仕組みや考え方に違いがありますが、
この公式パッケージを使えば、Unity上でほぼ共通の流れとして管理できます。
初心者の方がまず押さえるべきポイントは、次の3つです。
- 最初にProject SettingsでOS別の初期設定を正しく行うこと
- AndroidとiOSの最低限のルール(チャンネル・許可など)を理解すること
- いきなり複雑な通知を作らず、1件のシンプルな通知から動作確認すること
この3点を守れば、ローカル通知は決して難しい機能ではありません。
むしろ、モバイルゲームやアプリの継続率・再訪率を底上げしてくれる強力な武器になります。
このあとの章では、
- ローカル通知で「何ができるのか」
- どこで設定し、どう実装するのか
- 実際につまずきやすい注意点
を順番に解説していきます。
まずは、ローカル通知の基本的な仕組みから見ていきましょう ✨
ローカル通知とは?何ができるのか
ローカル通知(Local Notification)とは、サーバーを介さずに、アプリ自身が端末へ直接送る通知のことです。
「◯時間後に通知する」「指定した日時に通知する」といったスケジュールを、アプリ内部だけで完結させられるのが特徴です。
プッシュ通知のようにサーバー構築やAPI連携が不要なので、
個人開発や小規模なモバイルゲーム・アプリでも導入しやすい仕組みとしてよく使われています。
モバイル向けのUnity開発全体の流れや考え方については、次の記事も参考になります。
ローカル通知でできること
Unityのローカル通知を使うと、例えば次のようなことができます。
- 一定時間後に「スタミナが回復しました」と通知する
- 毎日決まった時間にログインボーナスを知らせる
- しばらく起動していないユーザーに再プレイを促す
特にモバイルゲームでは、ユーザーにアプリの存在を思い出してもらうという点で、
ローカル通知はとても相性が良い機能です。
プッシュ通知との違い
「通知」と聞くとプッシュ通知を思い浮かべる方も多いですが、
ローカル通知とプッシュ通知には明確な違いがあります。
- ローカル通知: アプリ内部だけで完結(サーバー不要)
- プッシュ通知: サーバー経由で配信(ユーザー管理が可能)
まずは実装が簡単で、失敗しにくいローカル通知から導入するのがおすすめです。
Unity初心者の方でも、正しい手順を踏めば問題なく実装できます。

次は、実際にローカル通知を使うための事前準備(パッケージ導入)を行っていきましょう。
事前準備:Mobile Notificationsパッケージ導入
ローカル通知を実装する前に、まずはUnity公式の「Mobile Notifications」パッケージを導入します。
このパッケージを使うことで、Android・iOSそれぞれのネイティブ通知機能を、Unity上から安全に扱えるようになります。
非公式プラグインや独自実装も存在しますが、
将来的なUnityやOSアップデートへの耐性を考えると、公式パッケージを選ぶのが無難です。
パッケージの導入手順
導入手順はとてもシンプルです。次の流れで進めてください。
- Unityエディタ上部メニューから Window > Package Manager を開く
- 左上のプルダウンを Unity Registry に切り替える
- 一覧から Mobile Notifications を探して選択
- Install ボタンをクリック
インストールが完了すると、ローカル通知用のAPIや設定項目がUnityに追加されます。
対応Unityバージョンについて
Unity 2022.3 LTS以降を使用している場合、
Mobile Notifications 2.x系が基本的な対象になります。
LTS(Long Term Support)版を使っていれば、
この記事で紹介する手順をそのまま再現できるケースがほとんどです。
もし古いUnityバージョンを使っている場合は、
パッケージのバージョンやAPI名が異なることがあるため注意してください。

次の章では、Project Settingsで行うAndroid / iOS別の初期設定を見ていきます。
ここを飛ばしてしまうと、コードが正しくても通知が表示されない原因になるので、しっかり確認していきましょう。
Project Settingsで行う初期設定
Mobile Notificationsパッケージを導入したら、次に行うのがProject Settingsでの初期設定です。
ここを正しく設定していないと、コードが合っていても通知が表示されないことがよくあります。
Unityエディタのメニューから、
Edit > Project Settings > Mobile Notifications
を開いてください。
この画面では、AndroidとiOSそれぞれに必要な設定を行います。
Android側の設定ポイント
Androidでは、通知表示に使うアイコンや挙動を事前に設定しておく必要があります。
- Small Icon: 通知バーに表示される小さなアイコン
- Large Icon: 通知詳細に表示される大きめのアイコン
ここで指定する画像アセットには、いくつか重要な注意点があります。
- インスペクターで Read / Write Enabled をONにする
- Small Iconは白黒(モノクロ)のアルファ画像を使用する
この設定を忘れると、
「通知は届いているのにアイコンが表示されない」
といったトラブルにつながりやすいので注意してください。
また、Reschedule Notifications on Device Restart を有効にしておくと、
端末再起動後でも、スケジュールした通知が消えずに再登録されます。
iOS側の設定ポイント
iOSでは、通知を表示する前にユーザーからの許可が必須になります。
Request Authorization on App Launch を有効にすると、
アプリ初回起動時に、通知許可を求めるダイアログが自動で表示されます。
初心者の方は、まずこの設定をONにしておくのがおすすめです。
許可が取れていない状態では、どんなに正しく通知をスケジュールしても表示されません。

ここまで設定できたら、いよいよコードを書いてローカル通知をスケジュールしていきます。
次の章では、Androidでのローカル通知実装から見ていきましょう。
実装編①:Androidのローカル通知
ここからは、実際にコードを書いてローカル通知をスケジュールしていきます。
まずはAndroid向けの実装から見ていきましょう。
Androidでローカル通知を使う場合、通知チャンネルの登録が必須です。
このチャンネルが存在しないと、通知は一切表示されません。
通知チャンネルとは?
通知チャンネルとは、通知の種類ごとにグループ分けする仕組みです。
ユーザーは端末設定から、チャンネル単位で通知のON/OFFや重要度を変更できます。
Unityでは、アプリ起動時などに一度だけチャンネルを登録しておくのが一般的です。
通知チャンネルを登録する
まずは AndroidNotificationChannel を作成し、AndroidNotificationCenter.RegisterNotificationChannel で登録します。
using Unity.Notifications.Android;
void RegisterChannel()
{
var channel = new AndroidNotificationChannel()
{
Id = "default_channel",
Name = "Default Notifications",
Importance = Importance.Default,
Description = "Generic notifications",
};
AndroidNotificationCenter.RegisterNotificationChannel(channel);
}
Id はあとで通知送信時に使うので、
文字列を間違えないように注意してください。
通知内容を作成する
次に、実際に表示される通知の内容を設定します。
ここでは AndroidNotification を使用します。
using System;
using Unity.Notifications.Android;
void SendNotification()
{
var notification = new AndroidNotification()
{
Title = "スタミナが回復しました",
Text = "ゲームに戻って遊びましょう!",
FireTime = DateTime.Now.AddHours(1),
};
AndroidNotificationCenter.SendNotification(notification, "default_channel");
}
この例では、現在時刻から1時間後に通知が表示されます。
Android実装でよくある注意点
- 通知チャンネルの登録は必ず先に行う
- チャンネルIDの文字列ミスに注意
- 実機テストを行わないと確認できない挙動が多い
特にAndroidは、端末メーカーやOS設定によって挙動が変わることがあります。
エミュレーターだけでなく、実機での確認を強くおすすめします。

次は、iOSでのローカル通知実装を見ていきましょう。
Androidとは少し考え方が違うので、ポイントを整理しながら解説します。
実装編②:iOSのローカル通知
続いて、iOS向けのローカル通知実装を見ていきましょう。
Androidと大きく違う点は、「トリガー(通知タイミング)」を明示的に指定するところです。
iOSでは、通知内容と「いつ表示するか」を組み合わせてスケジュールします。
iOSの通知トリガーの種類
UnityのMobile Notificationsでは、主に次の2種類のトリガーが使われます。
- iOSNotificationTimeIntervalTrigger: 一定時間後に通知
- iOSNotificationCalendarTrigger: 日時を指定して通知
初心者の方は、まずTimeIntervalTriggerから使うのがおすすめです。
一定時間後に通知を出す(TimeInterval)
次の例では、アプリ終了後から1時間後に通知を表示します。
using Unity.Notifications.iOS;
void ScheduleIOSNotification()
{
var timeTrigger = new iOSNotificationTimeIntervalTrigger()
{
TimeInterval = new TimeSpan(1, 0, 0),
Repeats = false
};
var notification = new iOSNotification()
{
Identifier = "default_ios_notification",
Title = "スタミナが回復しました",
Body = "ゲームに戻って遊びましょう!",
ShowInForeground = true,
Trigger = timeTrigger
};
iOSNotificationCenter.ScheduleNotification(notification);
}
Identifier は通知を管理するためのIDです。
あとで通知をキャンセルしたい場合にも使うので、重複しない文字列を設定しましょう。
iOS実装で特に注意したいポイント
- 通知許可が取れていないと一切表示されない
- 繰り返し通知には制限がある(7日未満など)
- ShowInForeground をtrueにしないと起動中は表示されない
特に「通知が動かない」と感じた場合は、
まず通知許可が取れているかを必ず確認してください。

次の章では、AndroidとiOSの処理をまとめるための
共通化の設計パターンについて解説します。
Android / iOS共通化の設計パターン
ここまでで、Android・iOSそれぞれのローカル通知実装を見てきました。
実務や個人開発では、これらを1つのスクリプトでまとめて管理するのが一般的です。
そこで使われるのが、プリプロセッサディレクティブ(条件付きコンパイル)です。
プリプロセッサディレクティブとは?
#if や #elif を使うことで、
ビルド対象のプラットフォームごとに実行されるコードを切り替えられます。
Unityでは、次のような定数が用意されています。
- UNITY_ANDROID:Androidビルド時
- UNITY_IOS:iOSビルド時
共通スクリプトの基本例
以下は、1つのメソッドからAndroid / iOSの通知処理を呼び分けるシンプルな例です。
public void ScheduleNotification()
{
#if UNITY_ANDROID
RegisterChannel();
SendNotification();
#elif UNITY_IOS
ScheduleIOSNotification();
#endif
}
このようにしておくと、
- 通知を出すタイミングは共通
- OSごとの差分だけを内部で吸収
という形になり、コードの見通しがかなり良くなります。
共通化するメリット
- Android / iOSで処理が分散しない
- 通知仕様を変更しやすい
- バグ修正・機能追加が楽になる
初心者のうちは、「Android用」「iOS用」とスクリプトを分けたくなりがちですが、
早い段階で共通化しておく方が、後々ラクになるケースが多いです。

次は、通知をより実用的にするための応用機能とカスタマイズを見ていきましょう。
応用:通知を実用レベルにするための工夫
基本的なローカル通知が動くようになったら、
次は実際の運用を想定した使い方を意識していきましょう。
ここでは、モバイルゲームやアプリでよく使われる
「入れておくと便利な機能」や「実務で差が出やすいポイント」を紹介します。
通知をキャンセルする
ゲーム内の状態が変わったとき、
すでに予約している通知をキャンセルしたい場面はよくあります。
例えば、
- ユーザーがアプリに戻ってきた
- スタミナが満タンになった
といった場合、そのまま通知を出すと逆に体験を損ねてしまいます。
OSごとに、未発行の通知をまとめて削除するAPIが用意されています。
// Android
AndroidNotificationCenter.CancelAllScheduledNotifications();
// iOS
iOSNotificationCenter.RemoveAllScheduledNotifications();
通知を出す前に、
「今、本当に必要な通知か?」を一度考えるクセをつけるのがおすすめです。
通知からアプリを開いたときの処理
ローカル通知は、
通知をタップしてアプリを開いたときの挙動も重要です。
Androidでは IntentData、iOSでは Data に文字列を設定できます。
JSON形式などで情報を持たせておくと、
- 特定の画面を開く
- 報酬を直接表示する
といった分岐処理が可能になります。
ローカライズ対応(多言語対応)
海外配信を考えている場合、
通知文言も言語ごとに切り替える必要があります。
Unityでは Application.systemLanguage を使うことで、
端末の言語設定を判定できます。
まずは、
- 日本語
- 英語
の2言語対応から始めると、実装負荷も低くおすすめです。
通知は「少なく・わかりやすく」
ローカル通知は便利ですが、
多すぎると逆効果になりやすい機能でもあります。
- 1日に何度も通知しない
- 目的がはっきりした通知だけを出す
この2点を意識するだけでも、ユーザー体験は大きく変わります。

次の章では、初心者の方が特につまずきやすい
ローカル通知の注意点・落とし穴をまとめていきます。
よくあるつまずき・注意点まとめ
ローカル通知は仕組み自体はシンプルですが、
OS仕様・端末差分・設定漏れによって「動かない」「届かない」と感じやすい機能でもあります。
ここでは、初心者の方が特につまずきやすいポイントをまとめておきます。
繰り返し通知の制限(特にiOS)
iOSでは、繰り返し通知にいくつか制限があります。
例えば、TimeIntervalTriggerを使った繰り返し通知は、一定条件を満たさないと登録できません。
「毎日同じ時間に通知したい」といったケースでは、
CalendarTriggerを使う、または1回分ずつ再スケジュールするといった工夫が必要になります。
大量の通知を一度に登録しない
「3週間分の通知をまとめて登録する」といった実装は、
特にAndroid端末でパフォーマンス問題を引き起こすことがあります。
- 必要最小限の通知だけを登録する
- 状況に応じて再スケジュールする
この考え方は、安定した運用のためにとても重要です。
一部Android端末で通知が届かない問題
HuaweiやXiaomiなど、一部のAndroid端末では、
独自の省電力・バックグラウンド制限により、通知が抑制される場合があります。
これはアプリ側だけでは完全に制御できないため、
- 重要な通知に頼りすぎない設計にする
- ユーザーに設定変更を促す説明を用意する
といった割り切りと対策が必要になります。
フォアグラウンド時に通知が表示されない
iOSでは、アプリ起動中(フォアグラウンド)に通知を表示したい場合、
ShowInForeground を true に設定する必要があります。
これを忘れると、
- バックグラウンドでは届く
- 起動中は何も起きない
という状態になり、バグだと勘違いしやすいので注意してください。
日時・タイムゾーンのズレに注意
日時指定の通知を使う場合、
タイムゾーンの扱いにも注意が必要です。
特に海外配信や、端末のタイムゾーン変更が起こり得るアプリでは、
意図しない時間に通知が届くケースがあります。
日時管理の考え方については、次の記事も参考になります。

次の章では、通知を活かすためのUIや導線設計について解説します。
「通知ON/OFF」を用意するだけでも、ユーザー体験は大きく変わりますよ 🙂
UI・操作導線を整えると通知はもっと活きる
ローカル通知は「実装できたかどうか」だけでなく、
ユーザーが納得して受け取れる設計になっているかがとても重要です。
特に大切なのが、通知に関する設定UIです。
通知ON / OFFをユーザーに委ねよう
通知を一方的に送り続けると、
「うるさいアプリ」「すぐ通知を切られるアプリ」になりがちです。
そこでおすすめなのが、
- 通知を受け取るかどうかを選べる
- どんな通知が来るのか事前に説明している
といった設定画面(Options / Settings)を用意することです。
設定画面をしっかり作ることで、
- 通知OFFによるストア評価低下を防げる
- ユーザーの不満を減らせる
- 長期的な継続率が上がりやすくなる
といったメリットがあります。
設定画面UIは「作り込まなくていい」
「UIを1から作るのは大変そう…」と感じる方も多いですが、
通知設定のような定番UIはテンプレートを使うのが効率的です。
以下のアセットは、モバイル向けUIが一通り揃っており、
通知設定画面との相性もとても良いです。
スイッチやトグル、設定リストなどが最初から用意されているため、
通知ON/OFFのUIを短時間で実装できます。
操作・入力と組み合わせた通知設計
ローカル通知は「時間が来たら出す」だけでなく、
プレイヤーの行動と組み合わせて設計すると、より自然で効果的になります。
たとえば、
- 最後にプレイしたステージで中断している
- 特定の操作を行ったあとにアプリを終了した
- チュートリアル途中で離脱した
こうした操作・入力の状態を元に通知内容を変えると、
「自分のための通知だ」と感じてもらいやすくなります。
操作状態をもとに通知内容を変える
Unityでは、ボタン操作やスワイプ、仮想スティックなど、
モバイル特有の入力を使う場面が多いですよね。
それらの入力イベントをフックして、
- この操作をしたら通知を予約する
- この操作をしたら既存の通知をキャンセルする
といった制御を行うことで、
無駄な通知を減らし、意味のある通知だけを残すことができます。
入力周りは「安定した仕組み」を使うのがコツ
モバイル入力を自前で作り込むと、
通知ロジックとは別のところでハマってしまうことも少なくありません。
操作周りを安定させたい場合は、
既存の仕組みやテンプレートを活用するのも一つの手です。
スティック操作やボタン入力が最初から整理されているため、
「どの操作で、どの通知を制御するか」という設計に集中しやすくなります。
学習を深めたい人向け:参考リソース
ここまで読んで、「ローカル通知の実装イメージはつかめたけど、
モバイルゲーム開発全体についても、もう少し体系的に理解したい」と感じた方もいると思います。
ローカル通知は、
- アプリの設計
- UI/UX
- ユーザー導線
といったモバイル開発全体の知識とセットで考えることで、はじめて本領を発揮します。
そういった基礎から一通り押さえたい方には、次の書籍がとても参考になります。
Unityによるモバイルゲーム開発
✅ Amazonでチェックする
✅ 楽天でチェックする
この書籍では、
- Unityでのモバイルゲーム開発の全体像
- スマホ向けに考慮すべき設計ポイント
- 実際の開発フロー
といった内容が体系的にまとめられています。

ローカル通知を「とりあえず動かす」段階から、
「どう使えばユーザー体験が良くなるか」まで考えたい方には、ちょうど良いステップアップ教材です。
まとめ
今回は、Unityでローカル通知を実装する方法について、
Android・iOS両対応で、初心者向けに一通り解説してきました。
この記事のポイントを振り返ると、次のようになります。
- ローカル通知はサーバー不要で、モバイルゲームと相性が良い
- Unity公式のMobile Notificationsパッケージを使うのが安全
- AndroidとiOSは仕組みが違うが、共通スクリプトで管理できる
- まずは1件のシンプルな通知から実装・確認するのが大切
ローカル通知は、実装そのものよりも、
「いつ・誰に・どんな通知を出すか」という設計が重要な機能です。
最初から完璧を目指す必要はありません。
まずは、
- 一定時間後に1件通知を出す
- 不要になったらキャンセルする
といった基本から試してみてください。
そこから少しずつ、
ユーザーの行動やプレイ状況に合わせた通知へ広げていくと、
自然と「活きるローカル通知」になっていきます 🙂
参考文献・公式ドキュメント
本記事の内容は、以下の公式ドキュメント・技術記事を参考に整理しています。
より詳細な仕様確認や、バージョン差分の把握をしたい場合は、あわせてご確認ください。
- Unity Mobile Notifications Package Manual(v1.x / 英語)
- Mobile Notifications Settings(v2.1 / 日本語)
- Unity 2022.3 マニュアル:Mobile Notifications(日本語)
- GitHub:Unity Mobile Notifications(公式リポジトリ)
- Unity Mobile Notificationsの使い方まとめ(はてなブログ)
- Unityでローカル通知を実装する方法(iOS / Android)
- Unity Mobile Notificationsの注意点まとめ(Zenn)
- Unityローカル通知の実装メモ(個人ブログ)
- Stack Overflow:Unityで週次通知を設定する方法
※Unityの通知仕様はOS・Unityバージョンによって変更されることがあります。
実装時は、必ず最新の公式ドキュメントもあわせて確認するようにしてください。
よくある質問(FAQ)
- Qアプリを完全に終了しても通知は届きますか?
- A
はい、基本的には届きます。
ローカル通知はOS側にスケジュールされるため、アプリを終了していても表示されます。ただし、Androidの一部端末では、
省電力設定やバックグラウンド制限によって通知が抑制される場合があります。
- Q毎日同じ時間に通知を出すことはできますか?
- A
可能です。
iOSでは CalendarTrigger を使う方法、
または1回分ずつ再スケジュールする方法が一般的です。Androidでは、同様の日時指定通知を設定できますが、
大量に登録しすぎないよう注意しましょう。
- Q通知が届かないとき、まず何を確認すればいいですか?
- A
まずは次の3点をチェックしてください。
- 通知許可(特にiOS)がONになっているか
- Project Settingsの設定漏れがないか
- 実機でテストしているか
これだけでも、
「原因がわからない…」という状態から抜け出せることが多いです。









※当サイトはアフィリエイト広告を利用しています。リンクを経由して商品を購入された場合、当サイトに報酬が発生することがあります。
※本記事に記載しているAmazon商品情報(価格、在庫状況、割引、配送条件など)は、執筆時点のAmazon.co.jp上の情報に基づいています。
最新の価格・在庫・配送条件などの詳細は、Amazonの商品ページをご確認ください。