Не выкатываются облачные функции

инфо
Что нужно заранее
  • Проект Firebase подключён к FlutterFlow.
  • Проект на тарифе Blaze.

Облачные функции выполняют серверный код в ответ на события Firebase или HTTP-запросы. Ломаются они обычно по двум причинам: неверная настройка проекта или ошибка в самом коде функции.

В билдере это видно как статус:

  • Out of Date (Error)
  • Not Deployed (Error)

Статус Out of Date у облачной функции

Статус Not Deployed у облачной функции

Что проверить

  1. Права firebase@flutterflow.io

    Нужны роли:

    • Cloud Functions Admin
    • Editor
    • Service Account User

    Как выдать: откройте консоль Firebase, перейдите в Project Settings > Users and Permissions, найдите firebase@flutterflow.io в Advanced Settings Permissions, нажмите Edit и добавьте роли.

    Настройки прав в консоли Firebase

    Добавление ролей участнику проекта

  2. Имя функции

    Имя в коде должно точно совпадать с именем, заданным во FlutterFlow. В примере ниже билдер ждёт logoMaker, а в коде написано data.

    Несовпадение имени функции

  3. Код функции

    Мелкая ошибка в коде блокирует выкатку целиком. Перечитайте код и прогоните его локально — в IDE или через Firebase CLI.

    Проверка кода облачной функции

  4. Тариф Firebase

    Нужен Blaze, а не Spark. Проверьте и статус биллинга в Google Cloud: Firebase может показывать Blaze, а выкатку всё равно блокирует проблема с оплатой на стороне GCP.

  5. Другие функции

    Если push-уведомления или платежи выкатываются нормально, значит, с настройкой Firebase в целом порядок — копайте конкретную функцию.

  6. Регион

    Регион функции во FlutterFlow должен совпадать с регионом проекта Firebase. Значение [default] оставлять нельзя.

    Выбор региона облачной функции

    Регион проекта в консоли Firebase

    совет

    Если функции уже выкачены не в тот регион, удалите их, задайте нужный регион и выкатите заново.

  7. Конфликт протоколов: HTTP и Callable

    Функцию, выкаченную как HTTP, нельзя переделать в Callable — и наоборот. Ошибка выглядит так:

    [makeUserAdmin(us-central1)] Changing from an HTTPS function to a callable function is not allowed. Please delete your function and create a new one instead.

    Что делать: удалить функцию в консоли Firebase, сменить тип во FlutterFlow и выкатить заново.

  8. Файл package.json

    Используйте сгенерированный файл как есть, если не нужны дополнительные пакеты. Он не должен быть пустым или содержать посторонние символы.

    {
      "name": "functions",
      "description": "Firebase Custom Cloud Functions",
      "engines": {
        "node": "18"
      },
      "main": "index.js",
      "dependencies": {
        "firebase-admin": "^11.8.0",
        "firebase-functions": "^4.3.1"
      },
      "private": true
    }
  9. Сторонние пакеты в зависимостях

    Если код использует сторонний пакет — скажем, axios, — он должен быть в секции dependencies.

    Добавление пакета в package.json

  10. Версии пакетов

    Указанные версии должны существовать — сверьтесь со списком версий на npmjs.com.

    Проверка версии пакета

  11. Правила и индексы Firestore

    Невыкаченные правила и индексы блокируют выкатку функций. Выкатите их из FlutterFlow.

Функция не срабатывает

Проверьте настройку триггеров:

  • для триггеров Firestore — путь к документу и имя коллекции;
  • для HTTP-функций — настройку вызова во FlutterFlow;
  • права проекта и правила безопасности: они должны разрешать функции делать то, что она делает.

Функция обрывается по таймауту

Функция падает, если не укладывается в отведённое время. Таймаут задаётся во FlutterFlow:

Настройка таймаута облачной функции

Там же выбирается регион — от него зависит задержка:

Настройка региона облачной функции

заметка

Чем больше таймаут, тем дороже обходятся долгие вызовы.

Долгий первый вызов

После простоя функция отвечает медленнее — это холодный старт. Помогают две вещи: периодический вызов через Cloud Scheduler, чтобы функция не «засыпала», и меньше зависимостей в коде.

перевод официальной документации FlutterFlow

обновлено

⌕ ESC