我要做的是我有一个用Swift制作的消息应用程序,并且我将Firebase用作数据库。我想要做的是像Snapchat一样具有消失消息的功能。但是,我不确定该怎么做。我在数据库中的消息上有一个时间戳,但是我不确定如何使用它。 This是我要尝试的操作,我只是不知道确切的代码。
这是我的数据库结构的图片。让我知道您是否需要更多信息。谢谢
答案 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();
});
});
});