Firebase Admin SDK for Node.js を使ってFCMのメッセージをサーバーから送信する

要件

Admin SDKを使用するには、Node.js 10.10.0以上が必要です。

firebase-adminのインストール

package.jsonファイルを作成し、firebase-admin npmパッケージをインストールします。

npm init
npm install firebase-admin --save

秘密鍵の作成

  1. Firebaseコンソールでプロジェクトを開く
  2. 「プロジェクトの概要」→「Settings」→「新しい秘密鍵の生成」を選択する
  3. 「キーを生成」を選択し、秘密鍵ファイルをダウンロードする。

SDKを初期化する

秘密鍵のファイルを読み込んで、SDKを初期化します。

// 秘密鍵ファイルのパス
const serviceAccount = require("./serviceAccountKey.json");
const app = admin.initializeApp({
    credential: admin.credential.cert(serviceAccount)
});
// console.log(defaultApp.name); //=> '[DEFAULT]'

特定のデバイスにメッセージを送信する

メッセージを送信するデバイスの登録トークンを設定します。

const registrationToken = 'YOUR_REGISTRATION_TOKEN';

送信するメッセージを作成します。

const message = {
    data: { score: '850', time: '2:45' },
    token: registrationToken
};

提供された登録トークンに対応するデバイスにメッセージを送信します。

admin.messaging().send(message)
    .then((response) => {
        // 応答はメッセージID文字列です。
        console.log('メッセージが正常に送信されました:', response);
        defaultApp.delete();
    })
    .catch((error) => {
        console.log('メッセージの送信中にエラーが発生しました:', error);
        defaultApp.delete();
    });

複数のデバイスにメッセージを送信する

メッセージを送信するデバイスの登録トークンを設定します。
最大500の登録トークンを含むリストを作成します。

const registrationTokens = [
    'YOUR_REGISTRATION_TOKEN_1',
    'YOUR_REGISTRATION_TOKEN_N',
];

送信するメッセージを作成します。

const message = {
    data: { score: '850', time: '2:45' },
    tokens: registrationTokens,
}

提供された登録トークンに対応するデバイスにメッセージを送信します。

admin.messaging().sendMulticast(message)
    .then((response) => {
        console.log(response.successCount + ' 通のメッセージが正常に送信されました');
        if (response.failureCount > 0) {
            const failedTokens = [];
            response.responses.forEach((resp, idx) => {
                if (!resp.success) {
                    failedTokens.push(registrationTokens[idx]);
                }
            });
            console.log('失敗の原因となったトークンのリスト: ' + failedTokens);
        }
        defaultApp.delete();
    })
    .catch((error) => {
        console.log('メッセージの送信中にエラーが発生しました:', error);
        defaultApp.delete();
    });

トピックにメッセージを送信する

トピックを付与したメッセージを作成します。

// トピック名
const topic = 'weather';

const message = {
    data: { score: '850', time: '2:45' },
    topic: topic
};

トピックをサブスクライブしているデバイスにメッセージを送信します。

admin.messaging().send(message)
    .then((response) => {
        // 応答はメッセージID文字列です。
        console.log('メッセージが正常に送信されました:', response);
        app.delete();
    })
    .catch((error) => {
        console.log('メッセージの送信中にエラーが発生しました:', error);
        app.delete();
    });

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください