【问题标题】:Change the field value in Firebase Firestore automatically after a certain time一段时间后自动更改 Firebase Firestore 中的字段值
【发布时间】:2018-08-22 02:09:34
【问题描述】:

我的数据库结构是这样的:

"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。用户可以在文档后关闭应用程序创建,但字段值仍应更改。 有什么办法吗?

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

    我可能会为此设置一个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 });
      });
    });
    

    【讨论】:

      【解决方案2】:

      您可以使用 Firebase JobDispatcher;它使用JobScheduler 在后台运行任务,您可以设置触发器,比如说 24 小时,然后更新您的 Firebase 子数据库。

      例如,作业可以在创建后 24 小时触发。

      .setTrigger(Trigger.executionWindow(60*60*24,60*60*24+60))
      

      当设备没有谷歌时,这个库也可以工作 已安装播放服务并希望在 应用。在这种情况下,这个库内部使用 AlarmManager。如果设备上提供 Google Play 服务,则 它使用 Google Play 服务中的调度引擎。

      提示:它使用 AlarmManager 来支持 API 级别

      对于在 API 级别 21 上运行的设备,它使用 JobScheduler。

      提示 2:如果您需要重新安排您的工作,您可以使用这个:

      jobFinished(your_job,true);  // this line will reschedule your job after is finished
      

      【讨论】:

      • 如果用户在定时任务操作之前卸载了应用程序怎么办? JobDispatcher 是否仍会执行该操作?
      • 不,因为作业将被终止
      猜你喜欢
      • 1970-01-01
      • 2019-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多