Blog スタッフブログ

Android Flutter iOS システム開発

[Flutter]FCMプッシュ通知を受信しパラメータを処理する

こんにちは、株式会社MIXシステム開発担当のBloomです。

早速本題のFlutterでFirebase Cloud Messagingによるプッシュ通知を受信し、通知のペイロードに含まれるパラメータを処理する手順について、

お仕事の中で得た知見を共有させていただきたいと思います。

導入

まずはFlutterプロジェクトでFirebaseを利用できるように設定しましょう。

Flutter アプリに Firebase を追加する – Firebase

導入が完了したらさらにCloud Messagingの設定を行います。

Flutter で Firebase Cloud Messaging クライアント アプリを設定する – Firebase

上記手順のgetToken()まで成功し、通知を配信できるようになったらリスナーの設定に移りましょう。

パラメータ処理

では、実際に通知のパラメータを処理してみましょう。通知を処理するタイミングは以下の三つがあります。

1.アプリがフォアグラウンドにある場合

2.アプリがオンメモリの状態でバックグラウンドにあり、通知から起動された場合

3.アプリが完全に終了されている状態で通知から起動された場合

今回はこのそれぞれでパラメータを処理していきます。

  void setNotificationListener() {
    // 1.フォアグラウンドで受信した場合
    FirebaseMessaging.onMessage.listen((RemoteMessage message) {
      print('Message data: ${message.data}');
      RemoteNotification? notification = message.notification;
      AndroidNotification? android = notification?.android;
      AppleNotification? ios = notification?.apple;
      if (notification != null) {
        if (ios != null) {
          // iOS用の処理はこちらで行います。AppleNotificationクラスにはbadgeなどが含まれます。
        }
        if (android != null) {
          // Android用の処理はこちらで行います。
        }
        // 共通のデータペイロードです。パラメータ処理はここから行います。
        var data = message?.data;
        if (data != null) {
          // 辞書型でデータを取り出せます。
          var value = data["key"];
        }
      }
    });
    // 2.アプリがオンメモリの状態で通知から起動した場合
    FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) {
      print('onMessageOpenedApp Message data: ${message}');
      var data = message?.data;
      if (data != null) {
        var value = data["key"];
      }
    });

    // 3.アプリが完全に終了している状態で通知から起動した場合
    FirebaseMessaging.instance.getInitialMessage().then((message) {
      print('getInitialMessage Message data: ${message}');
      var data = message?.data;
      if (data != null) {
        var value = data["key"];
      }
    });
  }

これだけでプッシュ通知のペイロードを処理できました。良かったですね。

参考文献

Flutter アプリでメッセージを受信する – Firebase