颤抖每24小时自动更新一次Firebase的最佳方法是啥?

Posted

技术标签:

【中文标题】颤抖每24小时自动更新一次Firebase的最佳方法是啥?【英文标题】:flutter what is the best way to update Firebase every 24 hours automatically?颤抖每24小时自动更新一次Firebase的最佳方法是什么? 【发布时间】:2019-05-07 01:25:51 【问题描述】:

我想每天早上 6 点自动更新 Firestore document。 例如,有一个报价应用程序,每天早上将报价更新为新报价,以便用户可以看到不同的报价。 我不介意在 ios 设备或 android 上执行代码,因为我有两部手机。 但我想要一个应用程序来更新文档,即使我在睡觉。 这样做的最佳方法是什么?

【问题讨论】:

这些似乎是您可能想要在服务器端而不是客户端做的事情。 How to schedule background tasks in Flutter?的可能重复 【参考方案1】:

好消息有点可能。

后台任务简介

Android 上,您将使用WorkManager。 您可以要求Android 框架将您的任务安排在未来的某个地方(不支持确切的时间)。

iOS 上,您在 XCode 中启用 Background Fetch 或手动编辑 Info.plist 文件。

<key>UIBackgroundModes</key>
  <array>
    <string>fetch</string>
  </array>
</key>

WorkManager 插件

因为有很多仪式将所有东西连接在一起,所以有一个方便的Flutter 插件可以帮助你。

flutter_workmanager 插件在一个统一的 Dart API 中同时支持 WorkManagerperformFetch

void callbackDispatcher() 
  Workmanager.executeTask((backgroundTask) 
    switch(backgroundTask) 
      case Workmanager.iOSBackgroundTask:
      case "firebaseTask":
        print("You are now in a background Isolate");
        print("Do some work with Firebase");
        Firebase.doSomethingHere();
        break;
    
    return Future.value(true);
  );


void main() 
  Workmanager.initialize(callbackDispatcher);
  Workmanager.registerPeriodicTask(
    "1",
    "firebaseTask",
    frequency: Duration(days: 1),
    constraints: WorkManagerConstraintConfig(networkType: NetworkType.connected),
  );
  runApp(MyApp());

【讨论】:

【参考方案2】:

抱歉,在这种情况下,您需要在 Android 上使用 WorkManager。这是一种在这种情况下使用后台服务的方法。在 iOS 中我不知道怎么做。

我认为在 Flutter 中创建后台服务是不可能的,因为它是在其他上下文中运行的。

【讨论】:

在移动设备上执行这些逻辑不是一个好主意吗?我的意思是后台执行。 当你有办法做到这一点时,这是个好主意。目前,我没有找到只使用 Flutter 的方法。 你认为这行得通吗? [pub.dartlang.org/packages/background_fetch

以上是关于颤抖每24小时自动更新一次Firebase的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

从 Firebase 到 BigQuery 的实时或每小时数据同步

创建一个每 24 小时运行一次的活动?

安排定期 mysql 脚本每小时自动运行一次

每 24 小时运行一个 php 任务

[使用AWS lambda函数每1小时更新Firebase数据库

Firestore限制每小时或每天读写一次,以防止用户在检查器中设置计时器