X分钟后使用Firebase功能发送推送通知

时间:2018-07-22 02:51:48

标签: android ios firebase google-app-engine push-notification

我有一个适用于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分钟后得到它。

如何实现特定行为? 谢谢。

1 个答案:

答案 0 :(得分:1)

这是我为解决通知计划问题所做的工作。我允许5分钟的容限(即,如果您想在10:03发送通知,那么它将在10:05发送)。

假设您有一个函数sendNotificationFunction(userId, notificationMessage),该函数已准备好以userIdnotificationMessage作为参数并将通知发送给该特定用户。

  1. 在firebase实时数据库中,我创建了一个节点,该节点具有有关通知时间表的信息:

    scheduleNotification: {
        <pushId>: {
            "userId":<userId>,
            "scheduledTimestamp":<1530000000000>,
            "notificationMessage":<Message that you want to send>
        }
    }
    
  2. 使功能每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

  3. 每5分钟从您的cron作业中调用此https://us-central1-<your-project>.cloudfunctions.net/every5MinTrigger网址,这样它将在接下来的5分钟内安排通知。

希望有帮助。