2018年3月28日水曜日

firebase-admin を使って nodejs から Firebase を操作するサンプル

概要

firebase-ruby だとリアルタイムデータベースを扱えないので nodejs の firebase-admin を使ってみました
今回紹介するサンプルはリアルタイムデータベースからデータを取得して一定条件だった場合に特定のペイロードにプッシュ通知を送信するサンプルです

環境

  • macOS 10.13.2
  • firebase-admin 5.11.0
  • nodejs 8.7.0

サンプルコード

事前に Firebase Admin SDK の管理画面から新しい秘密鍵を生成して JSON ファイルをダウンロードしておいてください

var admin = require('firebase-admin');

var serviceAccount = require('./project-firebase-adminsdk-xxxxx-xxxxxxxxxx.json');

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: 'https://project-name.firebaseio.com/'
});

var db = admin.database();
var ref = db.ref("path/to/ref");
ref.on("child_added", function(snapshot) {
  var val = snapshot.val();
  console.log(val.id);
  // ある条件に合う場合は
  if (val.id.startsWith("push_")) {
    // プッシュ通知を送信する
    console.log("send push");
    var topic = "topic";
    var payload = {
      notification: {
        title: "Hello",
        body: "This message sent from nodejs"
      }
    };
    admin.messaging().sendToTopic(topic, payload)
      .then(function(response) {
        console.log("Successfully sent message:", response);
      })
      .catch(function(error) {
        console.log("Error sending message:", error);
      });
  }
},function (errorObject) {
  console.log("The read failed: " + errorObject.code);
});

ref.on を使うことでデータが登録される度に function(snapshot) がコールされます
イベントにはいくつが種類があり今回は child_added というイベントを指定しています
このイベントは子要素が追加されたときだけ関数内の処理が実行されるイベントです

プッシュ通知は admin.messaging().sendToTopic で行います
今回は特定のトピックに対して送信しています
あとのその結果を表示しているだけです

参考サイト

0 件のコメント:

コメントを投稿