Flutter, как лучше всего автоматически обновлять Firebase каждые 24 часа?

Я хочу обновлять Firestoredocument каждый день в 6 утра автоматически. Например, есть приложение с расценками, которое каждое утро обновляет расценки на новые, чтобы пользователь мог видеть разные расценки. Я не возражаю против выполнения кода на устройстве iOS или Android, потому что у меня есть оба телефона. Но я хочу, чтобы приложение обновляло документ, даже если я сплю. Как лучше всего это сделать?

Это похоже на то, что вы, возможно, захотите сделать на стороне сервера, а не на стороне клиента.

Alex Meuer 05.12.2018 16:01

Возможный дубликат Как запланировать фоновые задачи во Flutter?

timr 01.08.2019 13:32
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
1 217
2

Ответы 2

К сожалению, в этом случае вам понадобится WorkManager на Android. Это способ использовать фоновую службу в этом случае. В iOS не знаю как.

Я думаю, что во Flutter невозможно создавать фоновые службы, потому что он работает в другом контексте.

Разве не рекомендуется выполнять эту логику на мобильном устройстве? Я имею в виду фоновое исполнение.

Daibaku 05.12.2018 14:07

Если у вас есть способы сделать это, это хорошая идея. На данный момент я не нашел способа использовать только Flutter.

Ascension 05.12.2018 14:13

Как вы думаете, это сработает? [pub.dartlang.org/packages/background_fetch

Daibaku 05.12.2018 14:45

Хорошие новости: отчасти это возможно.

Краткое описание фоновых задач

На Android вы должны использовать WorkManager. Вы можете попросить платформу Android запланировать вашу задачу где-нибудь в будущем (точные часы не поддерживаются).

На iOS вы включаете Background Fetch в XCode или вручную редактируете файл Info.plist.

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

Плагин WorkManager

Поскольку соединение всего вместе требует большого количества церемоний, существует удобный плагин Flutter, который вам поможет.

Плагин flutter_workmanager поддерживает как WorkManager, так и performFetch в одном унифицированном API Dart.

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());
}

Другие вопросы по теме