我有一个适用于iOS和Android的移动应用,并且我正在尝试实现一项功能,该功能可在用户存在该应用后的X分钟内发送推送通知。
在我的数据库中,我已经可以知道用户何时不再处于活动状态。
我考虑过使用App Engine,Firebase函数和FCM https://firebase.googleblog.com/2017/03/how-to-schedule-cron-jobs-with-cloud.html
但是cron.yaml似乎是静态的(定期发送通知), 而且我正在寻找一种动态方法,可以动态确定发送推送通知的时间。
例如-基于一些数据库数据, 闲置30分钟后,有1位使用者会收到通知, 而其他用户会在15分钟后得到它。
如何实现特定行为? 谢谢。
答案 0 :(得分:1)
这是我为解决通知计划问题所做的工作。我允许5分钟的容限(即,如果您想在10:03发送通知,那么它将在10:05发送)。
假设您有一个函数sendNotificationFunction(userId, notificationMessage)
,该函数已准备好以userId
和notificationMessage
作为参数并将通知发送给该特定用户。
在firebase实时数据库中,我创建了一个节点,该节点具有有关通知时间表的信息:
scheduleNotification: {
<pushId>: {
"userId":<userId>,
"scheduledTimestamp":<1530000000000>,
"notificationMessage":<Message that you want to send>
}
}
使功能每5分钟触发一次,并检查要安排的通知。
exports.every5MinTrigger = functions.https.onRequest((req,res)=>{
let currentTime = new Date().getTime(); //Say 10:00
let startTime = currentTime; //10:00
let endTime = currentTime + 5*60*1000; //10:05
firebase.database.ref().child("scheduleNotification").orderByChild("scheduledTimestamp").once('value').then((snap)=>{
if(snap.exists()){
snap.forEach(childSnap=>{
let userId = childSnap.child('userId').val()
let notificationMessage = childSnap.child('notificationMessage').val()
//Now you have userId and your notification's language. Call your sendNotificationFunction() Here
})
}
})
})
在您的Firebase云功能中部署此功能。然后您将获得此函数的网址,假设它像这样:https://us-central1-<your-project>.cloudfunctions.net/every5MinTrigger
。
每5分钟从您的cron作业中调用此https://us-central1-<your-project>.cloudfunctions.net/every5MinTrigger
网址,这样它将在接下来的5分钟内安排通知。
希望有帮助。