在Firebase Swift中检查并比较消息的时间

时间:2018-11-22 22:55:59

标签: swift firebase firebase-realtime-database nsdate

我要做的是我有一个用Swift制作的消息应用程序,并且我将Firebase用作数据库。我想要做的是像Snapchat一样具有消失消息的功能。但是,我不确定该怎么做。我在数据库中的消息上有一个时间戳,但是我不确定如何使用它。 This是我要尝试的操作,我只是不知道确切的代码。

这是我的数据库结构的图片。让我知道您是否需要更多信息。谢谢

Here

1 个答案:

答案 0 :(得分:0)

我建议通过在Swift中使用NSDate().timeIntervalSince1970 * 1000,然后在您编写的cron作业中使用Date().getTime();,以自1970年1月1日以来的毫秒数来管理Firebase中的时间戳在JavaScript中。您可以在创建每个帖子时将let date = Int64(NSDate().timeIntervalSince1970 * 1000)存储在Firebase中的date节点下的Firebase中。然后,您可以使用Firebase Functions和Google Cloud创建一个cron作业,每小时运行一次,以查询帖子并删除时间戳为date超过一天的帖子。

这是一个很棒的教程,介绍如何开始使用cron:https://firebase.googleblog.com/2017/03/how-to-schedule-cron-jobs-with-cloud.html

您的cron作业将需要用node.js进行编码,并且看起来像这样:

// example cron job after setting everything up in the tutorial
    exports.hourly_job =
        functions.pubsub.topic('hourly-tick').onPublish((event) => {
        // get current date and time
        var currentDate = new Date();
        console.log("Hourly Deletion Ran at: " + currentDate);
        var currentNumMilliseconds = currentDate.getTime();
        // remove a days worth of time
        var oneDayAgo = currentNumMilliseconds - (3 * 24 * 60 * 1000);
        var cutoffDate = new Date(oneDayAgo);
        console.log("Query start at date: " + oneDayAgo);
        // the firebase database ref where your posts are stored
        const ref = admin.database().ref('posts');
        // query all posts more than a day old
        ref.orderByChild('date').startAt(oneDayAgo).once('value').then(function (snapshot) {
            // for each snapshot returned from the query that is older than one day, delete
            snapshot.forEach(function(childSnapshot) {
                var key = childSnapshot.key;
                var postObject = childSnapshot.val();   
                ref.child('key').remove();
            });

        });
    });