Push-уведомления
Push-уведомления доставляют сообщения даже когда приложение закрыто. Работают они через Firebase Cloud Messaging (FCM), который разносит сообщения по устройствам Android и iOS. Типичные поводы:
- новое содержимое — сообщение в чате, обновление;
- напоминание или предложение, возвращающее пользователя в приложение;
- полезная информация по делу — статус заказа, событие рядом.
Схема работы такая. FlutterFlow собирает уведомление — заголовок, текст, дополнительные данные — и отдаёт его FCM. FCM разносит его по устройствам.
Каждое устройство опознаётся по своему Device Token, который выдаёт FCM. Приложение на устройстве принимает уведомление, показывает его и, если нужно, открывает конкретный экран.
Подключение
Уведомления отправляют вручную из панели проекта либо действием в ответ на событие в приложении.
- Пройдены все шаги подключения Firebase. Особое внимание — пунктам 5 и 8 в разделе Allow FlutterFlow to Access Your Project: пользователю firebase@flutterflow.io должна быть выдана роль Cloud Functions Admin.
- Проект Firebase переведён на тариф Blaze — без него не работают Cloud Functions, а на них держится вся схема: получение токена FCM и отправка уведомлений из FlutterFlow.
- Действующий Apple ID.
- Оплаченное участие в Apple Developer Program.
Включение
Push-уведомления не работают:
- на симуляторе iOS — нужно физическое устройство;
- для пользователей, вышедших из аккаунта. Если уведомления нужны и им, подключите анонимный вход Firebase;
- когда приложение открыто на экране.
- Откройте Settings and Integrations > Push Notifications и включите Enable Push Notifications.
- Нажмите Deploy — в проект Firebase развернутся облачные функции, без которых уведомления не работают.
- При необходимости включите Allow Scheduling — отправку по расписанию. Тогда станет доступен Scheduler Granularity, шаг планировщика:
- нужно отправить строго в 11:37 — выбирайте 1 minute;
- небольшая задержка допустима — 15 minutes или 1 hour;
- чем мельче шаг, тем чаще запускается функция и тем дороже это обходится (до $0,50 в месяц);
- шаг в час обходится примерно в $0,05 в месяц.
Если при развёртывании появляется ошибка с предложением обратиться в поддержку, скорее всего проект Firebase был переведён на Blaze совсем недавно. Изменения расходятся 10–15 минут — подождите и повторите.

Настройка Automatically Prompt Users for Permission включена по умолчанию: приложение спрашивает разрешение на уведомления при запуске. Это может помешать сценарию входа.
Выключив её, момент запроса выбираете вы — тогда нужно самостоятельно вызвать Request Permission в подходящем месте. По умолчанию настройку рекомендуется оставлять включённой.
Настройка iOS
Для iOS нужны два дополнительных шага.
Шаг 1. Создать ключ
Apple требует ключ, которым подтверждается отправитель уведомлений.
Откройте раздел Keys в аккаунте разработчика и нажмите (+). Введите Key Name, отметьте Apple Push Notifications service (APNs) и нажмите Configure. Выберите Environment — Sandbox, Production или оба — и при необходимости задайте ограничение ключа. Затем Save, Continue и Register. Скачайте файл ключа и сохраните его: он понадобится для Firebase, а второй раз его скачать нельзя.
Проверив уведомления в отладочном окружении, заведите отдельный ключ для продакшена.
Шаг 2. Загрузить ключ в Firebase
Откройте Firebase Project Dashboard > Project Settings, вкладку Cloud Messaging. Прокрутите до раздела Apple app configuration и найдите APNs Authentication Key.
Нажмите Upload и выберите файл ключа из предыдущего шага. Введите Key ID — он указан в записи ключа в разделе Keys, — и Team ID из раздела Membership details аккаунта разработчика.
Отправка вручную
Откройте FlutterFlow > Settings and Integrations > Push Notifications и раздел Manually Trigger Notifications. Заполните поля и нажмите Send Notification; в подтверждающем окне введите «Send Notification» и нажмите кнопку ещё раз.
Что заполняется:
-
Notification Title — заголовок.
-
Notification Text — текст сообщения.
-
Notification Image — картинка рядом с уведомлением, необязательно.
-
Target Audience — кому отправлять: iOS, Android или All.
-
Deliver With Sound — со звуком.
-
Batch Notifications — отправлять пачками. Включайте только при аудитории больше 10 тысяч.
-
Scheduled Time — дата и время отправки в вашем часовом поясе. Доступно, если включён Allow Scheduling.
-
User References — отправка конкретным пользователям. Ссылка на документ из коллекции
usersуказывается в формате/users/user_id.советСсылку на документ проще всего скопировать в Firestore Data Manager.

-
Initial Page — страница, которая откроется при нажатии на уведомление.
Уведомления с данными
Вместе с уведомлением можно передать данные — чтобы открывшийся экран сразу показал что-то конкретное.
Пример: новостное приложение шлёт уведомление о срочной новости, и при нажатии открывается страница с заголовком, кратким содержанием и картинкой именно этой новости.
В качестве данных передаются только DocumentReference из Firestore.
Нужна страница, принимающая параметр типа DocumentReference. Собирая уведомление, укажите её в Initial Page, а в разделе Parameter Data вставьте ссылку на документ. Затем нажмите Send Notification.
На принимающей странице остальные поля подтягиваются запросом к бэкенду по этой ссылке.

Действие Trigger Push Notification
Действие отправляет уведомление в ответ на событие в приложении: пришло сообщение, записались на приём, изменилась цена.
Свойство Audience определяет получателей:
- Single Recipient — одному пользователю. Например, создателю группы о том, что в неё вступил новый участник.
- Multiple Recipients — нескольким. Например, всем участникам группы о том же событии.
- Нужно указать ссылку на документ пользователя-получателя.
- Остальные поля уведомления заполняются как обычно.

Проверка облачной функции
Облачную функцию отправки можно вызвать напрямую из консоли Google Cloud, минуя FlutterFlow, — это удобно при отладке. Как это делается и как оформить запрос — в разделе проверки облачных функций.
Счётчик на значке приложения (только iOS)
Действие Update App Badge Count выставляет число на значке приложения — обычно это количество непрочитанного.
В Android счётчик появляется на значке сам вместе с push-уведомлением. Сделать так же на iOS мешает вот эта проблема, поэтому на iOS счётчик не выставляется автоматически при получении уведомления — его нужно менять вручную, пока приложение работает.

- Мессенджер — увеличивать счётчик при каждом новом сообщении, пока приложение открыто, и уменьшать по мере прочтения.
- Почта — то же самое с письмами.
- Календарь — показывать число событий на сегодня.
Задаётся действие одним полем — Badge Count.

Частые вопросы
Уведомления не работают, облачная функция возвращает PERMISSION_DENIED: Missing or insufficient permissions
Дело в настройках организации в Google Cloud: она может запрещать автоматическую выдачу прав служебным аккаунтам по умолчанию.
Лечится ручной выдачей роли Editor нужному служебному аккаунту. Откройте страницу IAM в GCP и назначьте её:
- для App Engine (Gen 1):
{firebase-project-id}@appspot.gserviceaccount.com - для Compute Engine (Gen 2):
{project-number}-compute@developer.gserviceaccount.com

Проверьте также, что эти аккаунты и их роли перечислены на вкладке разрешений у App Engine Default service account, Default compute service account и firebase-adminsdk. Для этого откройте страницу Service Accounts в GCP, щёлкните по каждому адресу и выдайте доступ на вкладке разрешений.
Ниже — как это выглядит для App Engine Default service account.
