はじめに

サーバ(Node.js)からプッシュ通知を送信する方法として、firebase-admin を使って簡単なプッシュ通知を送信する方法を整理した。

関連: Vue + Cordova + Firebase でプッシュ通知

TL;DR

目次

  1. はじめに
  2. TL;DR
  3. 環境・条件
    1. 環境1(Mac)
    2. 環境2(Ubuntu)
  4. 詳細
    1. セットアップ
      1. インストール
      2. 秘密鍵(json) 生成
      3. 環境変数の設定
    2. メッセージ送信
      1. コードについてのメモ
  5. まとめ
  6. 参考文献

環境・条件

環境1(Mac)

1
2
3
4
5
6
7
8
9
10
11
12
13
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.15.2
BuildVersion: 19C57

$ node -v
v12.7.0

$ npm -v
6.10.3

$ npm v firebase-admin
firebase-admin@8.9.2 | Apache-2.0 | deps: 7 | versions: 81

環境2(Ubuntu)

1
2
3
4
5
6
7
8
9
10
11
$ grep -i pretty /etc/os-release
PRETTY_NAME="Ubuntu 18.04.2 LTS"

$ node -v
v12.10.0

$ npm -v
6.10.3

$ npm v firebase-admin
firebase-admin@8.9.2 | Apache-2.0 | deps: 7 | versions: 81

詳細

セットアップ

インストール

npmfirebase-admin をインストール

1
$ npm i firebase-admin

秘密鍵(json) 生成

参考: サーバーに Firebase Admin SDK を追加する | Firebase

Firebase のウェブコンソールから xxxx--firebase-adminsdk-xxxx.json の生成

取得したファイルをプロジェクト配下に移動、今回はプロジェクトルートに置いた

1
$ mv ~/Downloads/xxxx--firebase-adminsdk-xxxx.json .

Git の管理下から外すために .gitignore の更新

1
$ echo xxxx-firebase-adminsdk-xxxx.json >> .gitignore

環境変数の設定

GOOGLE_APPLICATION_CREDENTIALS を設定しておくと、firebase-admin が良きに計らってくれるようになる。

1
$ export GOOGLE_APPLICATION_CREDENTIALS="$(pwd)/xxxx-firebase-adminsdk-xxxx.json"

実運用環境には direnv を使って設定している。

1
$ direnv edit .

メッセージ送信

ごくシンプルなプッシュ通知送信を実現するコード。
token はデバイスから取得する必要あり、参考: Vue + Cordova + Firebase でプッシュ通知

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
const admin = require("firebase-admin");
admin.initializeApp();
const token = "FcmTokenOfYourDevice";
const msg = {
notification: {
title: 'title',
body: 'body',
imageUrl: 'https://1.bp.blogspot.com/-5HpqQ1WibQM/W1a4njkhUoI/AAAAAAABNg0/EeLVdx02NAQCaxN1rRO3_-tvZi8aiRHywCLcBGAs/s800/document_shinsa_goukaku.png',
},
token,
};
admin.messaging().send(msg).then(
res => console.log({res})
).catch(
err => console.error({err})
);

実際にテストメッセージを送信し、Android で受信した結果

admin.messaging().send の部分は下記のように書いても良い

1
2
const app = admin.initializeApp();
app.messaging().send().then().catch();

コードについてのメモ

走り書き

まとめ

参考文献

関連記事