【コピペで使える CloudFunctions】Firebaseでプッシュ通知を送る処理
この記事では Firebase の CloudFunctions を利用してプッシュ通知を送る処理の解説をします。 コピペして利用できるように、どのように書くと Firestore のデータにアクセスできるのかなど、 なるべく完結に書いていきたいと思います。
前提として以下の箇所までできている人を対象とします。
- Firestoreにデータの格納ができる > 解説はこちらから
- CloudMessagingでプッシュ通知が遅れる > 解説はこちらから
- Firebaseにコンソールからアクセスすることができる > 解説はこちらから
以下のソースコードは こちらのサイト を参考にさせていただきました。
Firestoreのデータ構造
Firestoreのデータ構造は以下のようになっています。
プッシュする内容を作成するメソッド
fcmToken : プッシュ通知をするデバイスのトークン
text : 通知したい任意のテキスト
const pushMessage = (fcmToken, text) => ({
notification: {
title: '新しいオファーを受信しました。',
body: `${text}`,
},
data: {
data: 'test', // ← 任意のデータを送れる
},
token: fcmToken
});
送信用メソッド
どこのドキュメントの追加をハンドリングするかを初めの一行に書きます。
以下の場合だと users/{userID}/offers/{offerID}
になります。
snapshot.data()
で追加したデータにアクセスできます。
context.params.userID
で users/{userID}/offers/{offerID}
の userID
にアクセスできます。
exports.sendOffer = functions.firestore.document('users/{userID}/offers/{offerID}').onCreate((snapshot, context) => {
const offerID = snapshot.data().id // ← これで offers の id フィールドが取得できる
const userID = context.params.userID // ← これで userID が取得できる
const fcmTokenRef = firestore.doc(`users/${userID}/info/notification`)
fcmTokenRef.get().then((fcmToken) => {
const token = fcmToken.data()
admin.messaging().send(pushMessage(token.fcmToken, "プッシュ通知テスト"))
.then((response) => { console.log('Successfully sent message:', response) })
.catch((e) => { console.log('Error sending message:', e) })
}).catch((e) => console.log(e))
});
ソースコード全体
以下はソースコード全体になります。
const functions = require('firebase-functions')
const admin = require('firebase-admin')
admin.initializeApp()
const firestore = admin.firestore()
const pushMessage = (fcmToken, text) => ({
notification: {
title: '新しいオファーを受信しました。',
body: `${text}`,
},
data: {
data: 'test',
},
token: fcmToken
});
exports.sendOffer = functions.firestore.document('users/{userID}/offers/{offerID}').onCreate((snapshot, context) => {
const offerID = snapshot.data().id
const userID = context.params.userID
const fcmTokenRef = firestore.doc(`users/${userID}/info/notification`)
fcmTokenRef.get().then((fcmToken) => {
const token = fcmToken.data()
admin.messaging().send(pushMessage(token.fcmToken, "プッシュ通知テスト"))
.then((response) => { console.log('Successfully sent message:', response) })
.catch((e) => { console.log('Error sending message:', e) })
}).catch((e) => console.log(e))
});
以上で端末側からFirestoreにデータを送信したタイミングで任意の端末にプッシュ通知が送ることができます。
0 コメント