【发布时间】:2018-05-19 10:39:13
【问题描述】:
我对 Firebase Cloud Functions 完全陌生(接触 2 天)。当 Firebase 数据库检测到已添加新数据时,我正在尝试向我的应用程序的所有用户发送通知。这是我目前所拥有的:
exports.sendNotification = functions.database.ref("/uploads/{pushId}").onCreate(event => {
const snapshot = event.data;
var str = snapshot.child("name").val();
console.log(str);
if (snapshot.previous.val()) {
return 0;
}
if (snapshot.val().name != "ADMIN") {
return 0;
}
const text = snapshot.val().text;
const payload = {
notification: {
title: snapshot.name,
body: ""
}
}
//return admin.messaging().sendToDevice(tokens, payload);
});
我知道代码现在处于混乱状态,这是由于来自各个教程网站的几次复制和测试。我可以从 console.log 成功获取数据的名称,但无法向所有用户发送通知。
我知道大多数使用令牌和设备 ID。但是有没有更简单的方法可以发送给我的每一位用户?我是否需要为我的应用程序添加任何 Java 代码才能使此通知正常工作?
编辑 1: 按照彼得的建议,我更新了我的功能:
exports.sendNotification = functions.database.ref("/uploads/{pushId}").onCreate(event => {
const snapshot = event.data;
var str = snapshot.child("name").val();
console.log(str);
if (snapshot.previous.val()) {
console.log("RETURN 1");
return 0;
}
const payload = {
notification: {
title: str,
body: ""
}
}
return admin.messaging().sendToTopic("Users", payload)
.then(function(response){
console.log("Notification sent ", response);
})
.catch(function(error){
console.log("Error sending notification: ", error);
});
});
我还在我的代码中添加了以下 java:
FirebaseMessaging.getInstance().subscribeToTopic("Users");
我现在遇到的问题是,在 Firebase 控制台上它说通知正在成功发送,但在我的手机上我没有收到任何东西。在我的情况下是否必须使用 onMessageReceived 方法?
我注意到的一件事是,每次应用启动时都会调用上述语句。这会以任何方式影响结果吗?
【问题讨论】:
标签: javascript node.js firebase firebase-cloud-messaging google-cloud-functions