FirebaseからPush通知を送る(CloudFunctionsを使って)


FirebaseCloudMessaging(以下「FCM」)は、iOS/Android/Webでプッシュ通知を送ることができるFirebaseのサービスになります。(しかも無料です!)

配信設定画面は、わかりやすいGUIになっているため、導入後の運用をエンジニア以外でもできるようになっています。

  • 配信設定画面

もちろん、プッシュ開封率などの効果計測も行えますし、Firebaseの他サービス

  • FirebaseAnalutics(アナリティクス)
  • FirebasePredictions(ユーザー行動の予測)

と連携すれば、特定の行動を起こしたユーザーにだけ配信することや特定の行動を起こしそうなユーザーにだけ配信することなどができます。

管理画面経由などはよくありますので、「CloudFunctions」にてユーザーを指定してプッシュ通知を送る方法を記載致しました。
ユースケースとしては、

  • 掲示板などで発言に、「いいね」や「コメント」がついた時に、発言者だけにプッシュ通知を送る
  • 所属しているグループメンバーだけにプッシュ通知を送る

などになるかと思います。

得られるもの

「CloudFunctions」から個別ユーザーへプッシュ通知を送る方法

導入

「Firebase導入」「FCM導入」「FirebaseCLI/CloudFunctions導入」については、下記を参照してください。

内容

index.js
const admin = require('firebase-admin');
const functions = require('firebase-functions');

admin.initializeApp(functions.config().firebase);

//  URLから「CloudFunctions」呼び出し
exports.pushSubmitFromURL = functions.https.onRequest((request, response) => {

  const token = "FCMToken";
  const payload = {
          notification: {
            title: "プッシュタイトル",
            body: "内容",
            badge: "1",             //バッジ数  
            sound:"default"         //プッシュ通知音
          }
        };

  pushToDevice(token,payload);

});

//  アプリから「CloudFunctions」呼び出し
exports.pushSubmitFromApp = functions.https.onCall((request, response) => {

  const token = "FCMToken";
  const payload = {
          notification: {
            title: "プッシュタイトル",
            body: "内容",
            badge: "1",             //バッジ数  
            sound:"default"         //プッシュ通知音
          }
        };

  pushToDevice(token,payload);

});

//  FCM部分
function pushToDevice(token, payload){
  // priorityをhighにしとくと通知までが早くなります
  const options = {
    priority: "high",
  };

  admin.messaging().sendToDevice(token, payload, options)
  .then(pushResponse => {
    return { text: token };
  })
  .catch(error => {
    throw new functions.https.HttpsError('unknown', error.message, error);
  });
}


呼び出しの際のGET/POSTの引数で端末から取得できるFCMトークンを渡せば、その端末だけにプッシュ通知ができます。

以上になります。
Firebaseホント便利ですよね。

足らないこと、間違い等ありましたら、コメントもしくは、@gurensouen
にご連絡いただけますと幸いです。

それでは、良き開発生活を。