虎視眈々と

Flutter × Firebaseを研究するアプリエンジニア

FirestoreとCloud Functionsを使ってPush通知を打つ

f:id:superman199323:20181119224536j:plain

FirestoreとCloud Functionsを使ってPush通知を打つ

特に細かく説明しないが、自分は下記のコードをデプロイすることでPush通知が打てた。

細かい実装についてはコメントで解説している。

import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';

// 初期設定
admin.initializeApp(functions.config().firebase);
const firestore = admin.firestore();

// Push通知を打つ
exports.sendNotifications = functions.firestore
  .document('/group/{groupId}/message/{messageId}')
  .onCreate((event, snapshot) => {
    // 該当のデータが更新されるとフックする
    const topic = "/topics/" + snapshot.params.groupId;

    // フックした時のデータを取得する
    const groupId = snapshot.params.groupId;
    const messageId = snapshot.params.messageId;

    // 取得したらFirestoreにデータを取得しにいく
    const messageRef = firestore.doc('group/' + groupId + '/message/' + messageId);

    return messageRef.get().then((message) => {

      // 取得できたらここが呼ばれる
      const data = message.data();
      const uid = data.uid;
      const messageName = data.message;

      const payload = {
        notification: {
          title: 'テスト',
          body: messageName
        }
      };

      const option = {
        priority: "high"
      };

      return admin.messaging().sendToTopic(topic, payload, option).then(function(response) {
        console.log("Successfully sent message:", response);
      })
      .catch(function(error) {
          console.log("Error sending message:", error);
      });

    }).catch((e) => {
      console.log(e);
    });
});