【发布时间】:2017-08-12 16:09:19
【问题描述】:
我只是想让我的应用在有人喜欢那里的事件时向用户发送通知。
我尝试过这样做:
exports.likeAddedNotification = functions.database.ref('/eventLikes/{eventID}/{userWhoLikedID}').onWrite(event => {
const userWhoLikedID = event.params.userWhoLikedID;
console.log("User has liked a post " + userWhoLikedID);
admin.database().ref('events/' + event.params.eventID).once('value').then(function(snapshot) {
var usersID = snapshot.val().userId;
console.log("The person who made the post is " + usersID);
//Send notification to that user
var payload = {
"group_id": "batch_push_sender",
"push_time": "now",
"message": {
"body": usersID + " liked your event"
},
"recipients": {
"custom_ids": [usersID]
},
"sandbox": true, // Only for iOS
};
notificationRequest.write(JSON.stringify(payload));
notificationRequest.end();
console.log("Sent a notification to " + usersID);
});
});
(很抱歉包含这么多代码,但我觉得这可能都是相关的) 如果我使用此代码并删除
var payload = ...
和
notificationRequest.write(JSON.stringify(payload));
notificationRequest.end();
它完全符合我的预期。它会写信到控制台,说明哪些帖子被点赞以及谁点赞了该帖子。
我真的不确定问题是由于在闭包中做了太多事情,还是我只是做错了什么,或者是 Batch API 导致了错误。
如果您知道一个更好的推送通知网站,它允许使用 UDID 作为自定义标识符,这样我就不必手动处理每个设备的令牌,请告诉我!
【问题讨论】:
-
A) 确保返回你的 Promise,这是保证工作人员继续工作的唯一方法。由于通知是同步的,因此您的请求很可能被中止。 B) 您应该查看 Firebase Admin SDK 的消息传递功能。
-
我们在 Github 上有一个例子 github.com/firebase/functions-samples/tree/master/…
-
结合起来,这些都是詹姆斯的好答案! :-)
-
同意!将其作为@JamesDaniels 的答案,我会接受!
-
好吧,结合起来,让它少了一点点的格式。 ??????
标签: javascript node.js firebase push-notification google-cloud-functions