我对Firebase云功能完全陌生(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方法?
我注意到的一件事是,每次应用程序启动时都会调用上述语句。这会以任何方式影响结果吗?
我认为最简单的是topics
,您可以将所有用户订阅到单个topic
,然后向该主题发送通知。您必须将return语句更改为:
return admin.messaging().sendToTopic("Cat", payload);
所以现在订阅topic
“Cat”的所有用户都将收到通知。当然,您也可以将主题更改为您想要的任何内容。
要为用户订阅主题,您需要做的就是写下:
FirebaseMessaging.getInstance().subscribeToTopic("Cat"); //in java code
检查这个以获取更多信息topic messaging