54
48

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

FirebaseAdvent Calendar 2020

Day 19

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

Last updated at Posted at 2020-06-14

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
にご連絡いただけますと幸いです。

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

54
48
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
54
48

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?