使用FCM每天向用户发送通知,消息正文来自Firebase数据库数据



我正在开发React Js,FirebaseBIRTHDAYSweb应用程序,该应用程序允许使用Firebase登录。用户可以在那里添加他们朋友的生日。它将显示个性化的生日列表。

因此,在这里,我希望每天在特定的时间向所有使用Firebase Cloud Messaging的用户发送通知。此外,每个用户的正文都应该不同,并且应该包含Firebase数据库中他们当天(当发送通知时(的生日列表。我试了很多。但它们都不起作用。有没有办法让我做到这一点?

谢谢。

我尝试过的

  1. 仅使用React发送通知。但这里的问题是,我们不应该关闭网络应用程序,对于Mobiles来说,addEventListener("visibilitychange", () => {})不起作用

let notification
let interval
document.addEventListener("visibilitychange", () => {
if (document.visibilityState === "hidden") {
let date = new Date()
let dateNumber = date.getDate()
let monthId = date.getMonth() + 1
let hours = date.getHours()
let minutes = date.getMinutes()
if (hours === 0) {
let requiredNames = []
if (allBirthdays.length !== 0) {
requiredNames = allBirthdays
.filter((p) => p.monthId == monthId && p.day == dateNumber)
.map((p) => {
return `${p.name}`;
})
}
notification = new Notification(`Today's Birthdays(${dateNumber}-${monthId})`, {
body: `${requiredNames.length !== 0 ? requiredNames : "No Birthdays"}`,
icon: logo,
tag: "Same Time"
})
}
interval = setInterval(() => {
date = new Date()
dateNumber = date.getDate()
monthId = date.getMonth() + 1
hours = date.getHours()
minutes = date.getMinutes()
if (hours === 0 && minutes < 15) {
let requiredNames = []
if (allBirthdays.length !== 0) {
requiredNames = allBirthdays
.filter((p) => p.monthId == monthId && p.day == dateNumber)
.map((p) => {
return `${p.name}`;
})
}
notification = new Notification(`Today's Birthdays(${dateNumber}-${monthId})`, {
body: `${requiredNames.length !== 0 ? requiredNames : "No Birthdays"}`,
icon: logo,
tag: "Next Interval"
})
}
}, 900000);
} else {
if (interval) clearInterval(interval)
if (notification) notification.close()
}
})

  1. 我在上面找到了一些视频,但所有视频都只解释了直到我们测试了来自firebase的推送通知,但没有实时实现

FCM基本上只是一种服务,无论应用程序在后台还是终止,您都可以从服务器向客户端发送消息。服务器需要知道您要交付的设备。

实现这一点的方法是:

  1. 将所有用户令牌注册到服务器
  2. 设置每天运行一次的计划云功能
  3. 从rtdb运行查询,获取哪些用户的朋友今天是他的生日,还获取这些用户的代币,然后将消息发送到设备

最新更新