【发布时间】:2020-08-25 08:05:36
【问题描述】:
是否可以从应用内发送通知,而不是从 Firebase 上的云功能发送通知? 原因是,我想做类似的事情:FCM Push Notifications for Flutter,他们有这个功能将被部署到firebase:
export const sendToTopic = functions.firestore
.document('puppies/{puppyId}')
.onCreate(async snapshot => {
const puppy = snapshot.data();
const payload: admin.messaging.MessagingPayload = {
notification: {
title: 'New Puppy!',
body: `${puppy.name} is ready for adoption`,
icon: 'your-icon-url',
click_action: 'FLUTTER_NOTIFICATION_CLICK' // required only for onResume or onLaunch callbacks
}
};
return fcm.sendToTopic('puppies', payload);
});
此方法在 firebase 云功能上按预期工作,但我需要路径
.document('puppies/{puppyId}')
根据用户所在的聊天室进行动态调整,因此每次发送新消息时他都会收到通知,因此“chatroom22”将是一个变量:
.document('chatroom22/{roomId}')
那么是否可以在应用程序代码中执行此操作,或者可以在已部署的函数中执行此操作?
回应道格·史蒂文森的回答
好的,这是有道理的,并且有效。但是,现在每个人都会收到通知。我只希望给定聊天室中的人收到通知。我已经尝试过这样的事情,其中用户设备令牌被保存给给定的聊天室,然后我想通知所有这些令牌:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().functions);
var newData;
exports.myTrigger = functions.firestore.document('messages/{messageId}/room/{roomId}/message/{messageId2}').onCreate(async (snapshot, context) => {
//
if (snapshot.empty) {
console.log('No Devices');
return;
}
newData = snapshot.data();
const deviceIdTokens = await admin
.firestore()
.collection('messages/{messageId}/room/{roomId}/tokens/{tokenId}')
.get();
var tokens = [];
for (var token of deviceIdTokens.docs) {
tokens.push(token.data().device_token);
}
var payload = {
notification: {
title: `${newData.sender}`,
body: `${newData.message}`,
sound: 'default',
},
data: {
push_key: 'Push Key Value',
key1: newData.message,
},
};
try {
const response = await admin.messaging().sendToDevice(tokens, payload);
console.log('Notification sent successfully');
} catch (err) {
console.log(err);
}
});
但它似乎不适用于通配符..我怎样才能获得每个聊天室的具体目的地?
【问题讨论】:
标签: flutter google-cloud-firestore google-cloud-functions firebase-cloud-messaging