Firebase Admin Node.js SDKを使ってFlutter Web Appにメッセージ送信をしてみた

2022.05.25

こんにちは、CX事業本部 IoT事業部の若槻です。

最近Firebase Cloud Messaging(FCM)を使用して、サーバーからFlutterアプリケーションへのプッシュ通知を実装する機会がありました。

そこで今回は、Firebase Admin Node.js SDKを使ってFlutter Web Appにメッセージ送信する方法を確認してみます。

やってみた

前提

Firebase Admin Node.js SDKを使用する環境は次のようになります。

$ npm ls typescript ts-node --depth=0
hoge-project@0.1.0
├── ts-node@9.1.1
└── typescript@3.9.10

$ node --version
v14.17.0

また次のエントリの内容のFlutter Web Appが作成済みである前提とします。

インストール

Firebase Admin Node.js SDKをインストールします。

$ npm i firebase-admin

private keyの生成

Firebaseのコンソールで、[Project settings]-[Service account]-[Firebase Admin SDK]で[Generate new private key]をクリックします。

[Generate key]をクリックすると、private keyが記載されたservice account file(<project>-firebase-adminsdk-xxxx-xxxxxxxx.json)がダウンロードされます。

ダウンロードされたservice account fileをプロジェクトのルートなどに配置します。

メッセージを送信する

前回作成したFlutter Web Appを起動し、デバッグコンソールからFCMトークンを取得します。

service account fileのパスおよびFCMトークンを環境変数に指定します。

$ export GOOGLE_APPLICATION_CREDENTIALS=<private_key_json_file_path>
$ export FCM_TOKEN=<FCM_TOKEN>

次のようなスクリプトを作成します。

send-firebase-message.ts

import * as firebaseAdmin from 'firebase-admin';

const FCM_TOKEN = process.env.FCM_TOKEN as string;

firebaseAdmin.initializeApp();

const sendMessage = async () => {
  const params = {
    notification: {
      title: 'チケット当選のご案内',
      body: 'チケットをご用意いたしました。',
    },
    token: FCM_TOKEN,
  };

  await firebaseAdmin.messaging().send(params);
};

sendMessage();

スクリプトを実行します。

$ npx ts-node send-firebase-message.ts

するとFlutter Web Appにメッセージが届きました!

おわりに

Firebase Admin Node.js SDKを使ってFlutter Web Appにメッセージ送信する方法を確認してみます。

Google系のサービスのSDKはあまり使う機会が無いためまだ慣れないですが、なんとか出来て良かったです。

参考

以上