Help us understand the problem. What is going on with this article?

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

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

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

  • 配信設定画面 スクリーンショット 2020-06-14 7.47.46.png

もちろん、プッシュ開封率などの効果計測も行えますし、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
にご連絡いただけますと幸いです。

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

gurensouen
元格闘家で10年間続けて、5年間プロとして活動。2017年にプログラマーになりたくて学校入学。無事卒業!現在アプリエンジニアとして働いています!何かを始めるのに遅いことなんてないことを体現します。 ツイッター:https://twitter.com/gurensouen
https://twitter.com/gurensouen
admin-guild
「Webサービスの運営に必要なあらゆる知見」を共有できる場として作られた、運営者のためのコミュニティです。
https://admin-guild.slack.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした