Push-уведомления

Push-уведомления доставляют сообщения даже когда приложение закрыто. Работают они через Firebase Cloud Messaging (FCM), который разносит сообщения по устройствам Android и iOS. Типичные поводы:

  • новое содержимое — сообщение в чате, обновление;
  • напоминание или предложение, возвращающее пользователя в приложение;
  • полезная информация по делу — статус заказа, событие рядом.

Схема работы такая. FlutterFlow собирает уведомление — заголовок, текст, дополнительные данные — и отдаёт его FCM. FCM разносит его по устройствам.

Каждое устройство опознаётся по своему Device Token, который выдаёт FCM. Приложение на устройстве принимает уведомление, показывает его и, если нужно, открывает конкретный экран.

Подключение

Уведомления отправляют вручную из панели проекта либо действием в ответ на событие в приложении.

инфо
Что нужно заранее
инфо
Дополнительно для iOS

Включение

внимание

Push-уведомления не работают:

  • на симуляторе iOS — нужно физическое устройство;
  • для пользователей, вышедших из аккаунта. Если уведомления нужны и им, подключите анонимный вход Firebase;
  • когда приложение открыто на экране.
  1. Откройте Settings and Integrations > Push Notifications и включите Enable Push Notifications.
  2. Нажмите Deploy — в проект Firebase развернутся облачные функции, без которых уведомления не работают.
  3. При необходимости включите Allow Scheduling — отправку по расписанию. Тогда станет доступен Scheduler Granularity, шаг планировщика:
    • нужно отправить строго в 11:37 — выбирайте 1 minute;
    • небольшая задержка допустима — 15 minutes или 1 hour;
    • чем мельче шаг, тем чаще запускается функция и тем дороже это обходится (до $0,50 в месяц);
    • шаг в час обходится примерно в $0,05 в месяц.
внимание
Только что перешли на Blaze

Если при развёртывании появляется ошибка с предложением обратиться в поддержку, скорее всего проект Firebase был переведён на Blaze совсем недавно. Изменения расходятся 10–15 минут — подождите и повторите.

img.png

инфо

Настройка 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.

    pn-with-data-2

  • Initial Page — страница, которая откроется при нажатии на уведомление.

Уведомления с данными

Вместе с уведомлением можно передать данные — чтобы открывшийся экран сразу показал что-то конкретное.

Пример: новостное приложение шлёт уведомление о срочной новости, и при нажатии открывается страница с заголовком, кратким содержанием и картинкой именно этой новости.

внимание

В качестве данных передаются только DocumentReference из Firestore.

Нужна страница, принимающая параметр типа DocumentReference. Собирая уведомление, укажите её в Initial Page, а в разделе Parameter Data вставьте ссылку на документ. Затем нажмите Send Notification.

совет

На принимающей странице остальные поля подтягиваются запросом к бэкенду по этой ссылке.

pn-with-data.avif

Действие Trigger Push Notification

Действие отправляет уведомление в ответ на событие в приложении: пришло сообщение, записались на приём, изменилась цена.

Свойство Audience определяет получателей:

  • Single Recipient — одному пользователю. Например, создателю группы о том, что в неё вступил новый участник.
  • Multiple Recipients — нескольким. Например, всем участникам группы о том же событии.
совет
  • Нужно указать ссылку на документ пользователя-получателя.
  • Остальные поля уведомления заполняются как обычно.

trigger push notifications

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

Облачную функцию отправки можно вызвать напрямую из консоли Google Cloud, минуя FlutterFlow, — это удобно при отладке. Как это делается и как оформить запрос — в разделе проверки облачных функций.

Счётчик на значке приложения (только iOS)

Действие Update App Badge Count выставляет число на значке приложения — обычно это количество непрочитанного.

инфо
Про платформы

В Android счётчик появляется на значке сам вместе с push-уведомлением. Сделать так же на iOS мешает вот эта проблема, поэтому на iOS счётчик не выставляется автоматически при получении уведомления — его нужно менять вручную, пока приложение работает.

badge-count

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

Задаётся действие одним полем — Badge Count.

set-app-badge-count-ios

Частые вопросы

Уведомления не работают, облачная функция возвращает 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

pn-faq-img-1

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

Ниже — как это выглядит для App Engine Default service account. pn-faq-img-2

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

обновлено

⌕ ESC