LoginSignup
0
1

Flutter × FCMでpush通知(Android)実装メモ

Last updated at Posted at 2023-12-26

Flutterでpush通知を実装したのですが、
モバイルアプリやFirebaseの経験がない状態だと、
関連情報が多すぎて全体像が掴みにくい印象を持ったので、開発の流れのメモです。

ステップ1. FirebaseプロジェクトにAndroidアプリを追加する

こちらのサイトが分かりやすかったです。
週間Flutter大学:https://blog.flutteruniv.com/flutter-firebase/#toc9
リンク先の"2-7 Firebase の初期化と設定"まで進みます。

ステップ2. FlutterにFirebaseプラグインをインストール&設定する

FirebaseプラグインをFlutterにインストールします。
これは公式の通り。
AndroidManifest.xmlのどこに書くかが分かりにくいです。chatGPTに聞くといいです。
Firebase公式:https://firebase.google.com/docs/cloud-messaging/flutter/client?hl=ja#install_the_fcm_plugin

ステップ3. FirebaseからFlutterに通知をテストしてみる

まず、Flutter側で端末のIDを取得します。この値はテスト送信時に使います。

main.dart
final fcmToken = await FirebaseMessaging.instance.getToken();
print(fcmToken);

テスト送信の方法は以下のリンクを参考にしました。
Qiita: https://qiita.com/yana1316/items/9bd3806efc9cbdddcba9#firebase-cloud-messaging%E3%81%8B%E3%82%89%E3%81%AE%E9%80%81%E4%BF%A1%E3%83%86%E3%82%B9%E3%83%88

アプリをバックグラウンドにして、テストしてみるとバナーが出ると思います!

:warning:アプリがフォアグラウンドにある時に通知を送ると、バナーは出ません。
  ので、フォアグラウンドの状態の場合は通知が来たらローカル通知を使ってバナーを出します。
https://firebase.google.com/docs/cloud-messaging/flutter/receive?hl=ja#foreground_messages
flutter_local_notificationsの使い方は...chatGPTに聞きました。
↓サンプルコード

show_notification.dart
import 'package:flutter_local_notifications/flutter_local_notifications.dart';

final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
    FlutterLocalNotificationsPlugin();

void showNotification(RemoteMessage message) {
  const AndroidNotificationDetails androidPlatformChannelSpecifics =
      AndroidNotificationDetails(
    'your_channel_id', // チャンネルID
    'your_channel_name', // チャンネル名
    'your_channel_description', // チャンネルの説明
    importance: Importance.max,
    priority: Priority.high,
    showWhen: false,
    icon: "アイコン名",
  );
  const NotificationDetails platformChannelSpecifics =
      NotificationDetails(android: androidPlatformChannelSpecifics);
  flutterLocalNotificationsPlugin.show(
    0, // 通知ID
    message.notification!.title, // 通知のタイトル
    message.notification!.body, // 通知の本文
    platformChannelSpecifics,
  );
}

このshowNotification関数を通知が来たら実行するように設定します。

main.dart
// アプリが起動してる場合にメッセージが来た場合の処理
  FirebaseMessaging.onMessage.listen((RemoteMessage message) {
    print("message has come");
    showNotification(message);
  });

これでアプリがフォアグラウンドにあっても通知が来ました!

ステップ4. バックエンドから通知を指示する

本番ではFirebaseから手作業で送るわけには行きませんので
バックエンドから送る必要があります。

こちらの記事を参考にさせていただきました。
Qiita:https://qiita.com/nishi-sankosc/items/b9040ee57e6b7223ff21
参考:URLにプロジェクト名を入れるところだけ間違いやすいので注意です。
https://15dog.hatenablog.com/entry/2018/10/24/FCM%28Firebase_Cloud_Messaging%29_%E3%81%AE%E6%96%B0API%E3%81%AB%E7%A7%BB%E8%A1%8C%E3%81%97%E3%81%9F#:~:text=%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%20%C2%A0%7C%C2%A0%20Firebase-,%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%20%E3%82%A8%E3%83%B3%E3%83%89%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88%E3%81%AE%E6%9B%B4%E6%96%B0,-%E5%85%A8%E7%84%B6%E3%83%8F%E3%83%9E%E3%82%8B%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88

これで、バックエンドからFirebaseを介してFlutterアプリに通知を送る、と言う流れが完成しました!
iOSに関しては機会があれば書こうと思います!
ありがとうございました:blush:

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1