【发布时间】:2017-11-16 18:39:15
【问题描述】:
我正在尝试制作一个向给定用户发送推送通知的云功能。
用户进行了一些更改,并在 firebase 数据库中的一个节点下添加/更新了数据(该节点代表一个用户 ID)。在这里,我想触发一个向用户发送推送通知的功能。
我对 DB 中的用户有以下结构。
Users
- UID
- - email
- - token
- UID
- - email
- - token
到目前为止,我有这个功能:
exports.sendNewTripNotification = functions.database.ref('/{uid}/shared_trips/').onWrite(event=>{
const uuid = event.params.uid;
console.log('User to send notification', uuid);
var ref = admin.database().ref('Users/{uuid}');
ref.on("value", function(snapshot){
console.log("Val = " + snapshot.val());
},
function (errorObject) {
console.log("The read failed: " + errorObject.code);
});
当我收到回调时,snapshot.val() 返回 null。知道如何解决这个问题吗?也许之后如何发送推送通知?
【问题讨论】:
-
uuid的console.log是否显示正确的值?
-
是的,uuid 是正确的。
-
使用反引号替换您的参考文献中
uuid的值:admin.database().ref(`Users/${uuid}`)。你也应该使用once()而不是on()。on()让听者依附;不是您想要的云功能。 -
此外,您的函数应返回一个承诺,向 Cloud Functions 指示您的工作何时完成并且可以安全清理。如果你在没有返回承诺的情况下进行异步工作,它就不会按照你想要的方式工作。浏览这些视频教程以了解更多信息可能是个好主意:youtube.com/playlist?list=PLl-K7zZEsYLkPZHe41m4jfAxUi0JjLgSM
-
Doug 是正确的 - 使用 Cloud Functions,您应该返回一个承诺,以便它可以观察链执行,然后在完成时停止实例。因为它无法知道在这种情况下正在发生异步工作,所以函数在异步工作实际完成之前就已经完成。
标签: android firebase firebase-cloud-messaging google-cloud-functions