カテゴリ: Flutterの機能拡張 更新日: 2026/05/25

Flutterでプッシュ通知を実装する方法!Firebase活用ガイド【初心者向け完全解説】

279
Flutterでプッシュ通知を実装する方法!Firebase活用ガイド

先生と生徒の会話形式で理解しよう

生徒

「Flutterでプッシュ通知を使いたいんですが、どうやって実装すればいいんでしょうか?Firebaseが関係あるって聞いたんですが…」

先生

「Flutterでプッシュ通知を送受信するには、Firebase Cloud Messaging(FCM)というサービスを使うのが一般的です。FlutterFireプラグインを通じて実装できますよ。」

生徒

「通知の設定ってAndroidとiOSで違うんですか?Flutterでは共通のコードでできるんですか?」

先生

「設定ファイルは少し異なりますが、Flutterのコード部分はほぼ共通で記述できますよ。Firebaseのセットアップから順に説明していきますね。」

1. FlutterでFirebaseを使ったプッシュ通知の流れ

1. FlutterでFirebaseを使ったプッシュ通知の流れ
1. FlutterでFirebaseを使ったプッシュ通知の流れ

Flutterでプッシュ通知を実装するには、以下のステップを踏みます:

  • Firebaseプロジェクトの作成
  • AndroidとiOSの設定ファイルをFlutterプロジェクトに追加
  • firebase_messagingパッケージの導入
  • 通知の受信・表示の処理を書く

Firebase Cloud Messaging(FCM)はGoogleが提供する無料の通知サービスで、Flutterとの連携も公式にサポートされています。

2. Firebaseプロジェクトの作成と設定

2. Firebaseプロジェクトの作成と設定
2. Firebaseプロジェクトの作成と設定

まず、Firebaseコンソール(https://console.firebase.google.com)にアクセスし、プロジェクトを新規作成します。その後、Flutterアプリを登録して以下のファイルを取得します:

  • Android:google-services.jsonandroid/app/ 配下に配置
  • iOS:GoogleService-Info.plistios/Runner/ 配下に配置

Android側ではさらにbuild.gradleなどの設定が必要です。

3. firebase_messagingパッケージの導入と初期化

3. firebase_messagingパッケージの導入と初期化
3. firebase_messagingパッケージの導入と初期化

次に、FlutterでFirebaseの通知を使うために、必要なパッケージをpubspec.yamlに追加します。


dependencies:
  firebase_core: ^2.24.2
  firebase_messaging: ^14.7.3

初期化処理も必要です。アプリ起動時にFirebaseを初期化しましょう。


void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());
}

Flutterを「実務レベル」で使えるようになりたい人や、 iPhone / Android両対応アプリ開発の流れをまとめて学びたい人には、 定番の実践書がこちらです。

Flutter実践開発をAmazonで見る

※ Amazon広告リンク

4. プッシュ通知の受信処理を書く

4. プッシュ通知の受信処理を書く
4. プッシュ通知の受信処理を書く

FirebaseMessagingを使って通知を受け取る設定を行います。フォアグラウンド・バックグラウンド・終了状態での動作を確認するため、それぞれのイベントに対応する必要があります。


FirebaseMessaging messaging = FirebaseMessaging.instance;

FirebaseMessaging.onMessage.listen((RemoteMessage message) {
  print('フォアグラウンドで通知を受け取りました');
});

FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) {
  print('通知をタップしてアプリが起動しました');
});

これで、ユーザーがアプリを開いているときも通知を受信して処理が可能になります。

5. 通知許可のリクエスト(iOS対応)

5. 通知許可のリクエスト(iOS対応)
5. 通知許可のリクエスト(iOS対応)

iOSでは明示的に通知の許可をユーザーに求める必要があります。以下のようにダイアログを表示します。


NotificationSettings settings = await messaging.requestPermission(
  alert: true,
  badge: true,
  sound: true,
);

requestPermission()を呼び出すことで、iOSデバイスでもプッシュ通知の許可が得られるようになります。

6. トークンの取得と通知の送信テスト

6. トークンの取得と通知の送信テスト
6. トークンの取得と通知の送信テスト

デバイストークンを取得することで、特定の端末に通知を送信できます。


String? token = await FirebaseMessaging.instance.getToken();
print("デバイストークン: $token");

このトークンをFirebaseコンソールの「Cloud Messaging」から直接入力することで、テスト通知を送信できます。

7. Androidの通知チャンネル設定と注意点

7. Androidの通知チャンネル設定と注意点
7. Androidの通知チャンネル設定と注意点

Androidでは通知チャンネルを明示的に設定する必要があります。特にAndroid 8.0以降では、チャンネルを作成しないと通知が表示されません。


await flutterLocalNotificationsPlugin
  .resolvePlatformSpecificImplementation<AndroidFlutterLocalNotificationsPlugin>()
  ?.createNotificationChannel(AndroidNotificationChannel(
    'default_channel',
    '通知チャンネル',
    importance: Importance.high,
  ));

Flutterでローカル通知と組み合わせて使う場合、flutter_local_notificationsパッケージの導入も検討しましょう。

8. バックグラウンドメッセージ処理(静的関数で実装)

8. バックグラウンドメッセージ処理(静的関数で実装)
8. バックグラウンドメッセージ処理(静的関数で実装)

バックグラウンドまたは終了時でも通知を受け取りたい場合、トップレベル関数で処理を定義する必要があります。


Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
  await Firebase.initializeApp();
  print('バックグラウンドで通知を受信: ${message.messageId}');
}

FirebaseMessaging.onBackgroundMessage()で登録も忘れずに行いましょう。


FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);

まとめ

まとめ
まとめ

今回の記事では、Flutterでプッシュ通知を実装する方法について、Firebase Cloud Messagingを活用した一連の流れを丁寧に解説してきました。 Flutterアプリにおけるプッシュ通知は、ユーザーとの接点を強化する重要な機能であり、アプリの継続利用や利便性向上に大きく貢献します。 特にFirebaseを利用することで、AndroidとiOSの両方に対応した通知機能を比較的シンプルな構成で実装できる点は、Flutterならではの魅力と言えるでしょう。

まず理解しておきたいのは、Flutter単体ではプッシュ通知を直接扱うことはできず、Firebase Cloud Messagingという外部サービスと連携する必要がある点です。 Firebaseプロジェクトを作成し、Android用のgoogle-services.jsonやiOS用のGoogleService-Info.plistを正しい場所に配置することで、 FlutterアプリとFirebaseが安全に通信できるようになります。 この初期設定はやや手順が多く感じられますが、一度経験すれば他のFlutterプロジェクトでも同じ流れを応用できます。

次に重要なのが、firebase_coreとfirebase_messagingパッケージの導入と初期化です。 Firebase.initializeAppをアプリ起動時に必ず実行することで、通知機能を含むFirebaseの各種サービスが正しく動作します。 また、FirebaseMessagingを通じてフォアグラウンド、バックグラウンド、アプリ終了時といった さまざまなアプリ状態に応じた通知処理を実装できる点も、Flutterでのプッシュ通知実装における大きなポイントです。

iOS特有の注意点として、ユーザーから明示的に通知許可を取得する必要があることも学びました。 requestPermissionを使ってアラートやサウンドの許可を求めることで、iOS端末でも確実にプッシュ通知を受信できるようになります。 一方、Androidでは通知チャンネルの設定が欠かせません。 Android 8.0以降ではチャンネル未設定の通知は表示されないため、 flutter_local_notificationsと組み合わせた設定が実務では非常に重要になります。

デバイストークンの取得も、プッシュ通知を理解するうえで欠かせない要素です。 FirebaseMessagingから取得できるトークンを使えば、特定のユーザーや端末に向けた通知送信が可能になります。 Firebaseコンソールからのテスト送信を通じて、通知が正しく届くことを確認することで、 実際の運用を想定したFlutterアプリ開発の感覚を身につけることができます。

さらに、バックグラウンドやアプリ終了時の通知処理では、トップレベル関数としてハンドラを定義する必要がある点も重要です。 Flutterでは通常のWidgetクラス内とは異なる書き方が求められるため、 この仕組みを理解しておくことで、より安定したプッシュ通知対応アプリを構築できます。 ここまでの内容を踏まえることで、Flutterにおけるプッシュ通知実装の全体像が明確になったのではないでしょうか。

まとめとして確認したいサンプルコード

最後に、通知初期化と受信処理の基本構成をあらためて整理したサンプルコードを確認しておきましょう。 FlutterとFirebaseを組み合わせたプッシュ通知実装では、このような構成が土台となります。


FirebaseMessaging messaging = FirebaseMessaging.instance;

@override
void initState() {
  super.initState();
  FirebaseMessaging.onMessage.listen((RemoteMessage message) {
    print('通知を受信しました');
  });
}
先生と生徒の振り返り会話

生徒

「Flutterでプッシュ通知を実装する流れが、最初よりもずっと整理できました。 Firebaseを使う理由や、AndroidとiOSそれぞれの注意点も理解できた気がします。」

先生

「それは良いですね。Flutterでの通知実装は最初は難しく感じますが、 Firebase Cloud Messagingの仕組みを押さえれば、再利用しやすい知識になります。」

生徒

「特にトークン取得やバックグラウンド処理は、実際のアプリ運用を想像できて勉強になりました。」

先生

「その視点は大切です。Flutterアプリでは通知がユーザー体験を大きく左右します。 今回学んだ内容をベースに、ログイン連動通知やお知らせ配信などにも挑戦してみてください。」

生徒

「はい。Flutterでできることがまた一つ増えたので、次は実際のアプリに組み込んでみます。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Flutterでプッシュ通知を実装する際、なぜFirebaseが必要なのですか?

Flutterでスマートフォンアプリにプッシュ通知を届ける仕組みとして、Googleが提供するFirebase Cloud Messaging(FCM)を利用するのが一般的だからです。Firebaseは、AndroidとiOSの両方のデバイスに対して、効率的かつ安全にメッセージを配信するためのサーバー機能やインフラを無料で提供してくれます。自前で通知サーバーを構築するのは非常に大変ですが、Firebaseを活用することで、初心者でも比較的簡単に、かつ信頼性の高い通知機能をアプリに組み込むことが可能になります。
Flutterの機能拡張の一覧へ
新着記事
Flutter
Flutterでのリポジトリパターンの実装例
Flutterでリポジトリパターンを実装する方法を完全解説!初心者向けアーキテクチャ設計入門
Java
Java の Objects クラスを使って null チェックを簡単にする方法
JavaのObjectsクラスの使い方を完全ガイド!nullチェックを簡単・安全に行う方法
Java
Java の UUID クラスを使って一意の識別子を作成する方法
JavaのUUIDクラスの使い方を完全ガイド!初心者でもわかる一意な識別子の作成方法
Java
Java の古い日付クラス(Date, Calendar)と新しい日付 API の違い
JavaのDateとCalendarと新しい日付APIの違いとは?初心者向け完全ガイド
人気記事
Java
Java の Random クラスを使ってランダムな数値を生成する方法
JavaのRandomクラスの使い方を完全ガイド!初心者でもわかる乱数生成
Java
Java の getter メソッドと setter メソッドの使い方
Javaのgetterメソッドとsetterメソッドの使い方を完全ガイド!初心者でもわかるアクセス方法
AWS
【AWS】RDSの料金体系まとめ!ざっくり理解・高いと感じる理由も解説
【AWS】RDSの料金体系まとめ!ざっくり理解・高いと感じる理由も解説
AWS
【AWS】VPCとは?初心者向けに仕組み・用途・できることをわかりやすく解説
【AWS】VPCとは?初心者向けに仕組み・用途・できることをわかりやすく解説

🔌 USBポート不足を解消

Type-C 1本で拡張。
開発・作業環境を一気に快適に

UGREEN USB-Cハブを見る

※ Amazon広告リンク