我的数据库结构是这样的:
"users": {
"PXZwwGvu0lNwJeov8CMMrETnzVx1": {
"name": "Ada Lovelace",
"timestamp" : July 4, 2018 at 4:31:27 PM UTC+5:45
"happy": true,
}
"PXZwwGvu0lNwJeov8CMMrETnzVx2": {
"name": "Charles Babbage",
"timestamp" : July 5, 2018 at 5:29:15 PM UTC+5:45
"happy": true,
}
"PXZwwGvu0lNwJeov8CMMrETnzVx3": {
"name": "Elon Musk",
"timestamp" : July 7, 2018 at 9:21:37 PM UTC+5:45
"happy": true,
}
}
此处的“时间戳记”表示文档的创建时间。我想在文档创建后的一天刚好将字段“ happy”的值从true更改为false。用户可以在文档创建后关闭应用程序创建,但字段值仍应更改。 有什么办法吗?
答案 0 :(得分:2)
我可能为此设置了一个Cloud Function。这是一段可在Google基础架构上运行的代码,可以与Firebase(和其他云)资源进行交互。
如果您schedule a Cloud Function to run every hour,则可以运行数据库查询来查找所有时间戳在23到24小时之间的用户,并进行更新。
在伪代码中,它看起来像这样:
var now = Date.now();
var 24hoursago = now - ...;
var 23hoursago = now - ...;
var ref = firebase.database().ref("users");
var query = ref.orderByChild("timestamp").startAt(24hoursago).end(23hoursago);
query.once("value").then(function(snapshot) {
snapshot.forEach(function(user) {
user.ref.update({ happy: false });
});
});
答案 1 :(得分:1)
您可以使用Firebase JobDispatcher,它使用JobScheduler在后台运行任务,并且可以为例如24小时设置触发器,然后更新Firebase数据库子级。
例如,作业可以在创建后的24小时内仅用此行触发。
.setTrigger(Trigger.executionWindow(60*60*24,60*60*24+60))
该设备在没有Google设备的情况下也可以使用 播放已安装的服务,并希望在 应用。在这种情况下,该库在内部使用 AlarmManager。如果设备上提供了Google Play服务,则 它使用Google Play服务中的计划引擎。
提示:如果使用Google Play,它将使用AlarmManager支持<= 21的API级别 服务不可用。
对于在API级别21上运行的设备,它使用JobScheduler。
提示2:如果您需要重新安排工作,可以使用此
jobFinished(your_job,true); // this line will reschedule your job after is finished