Push-уведомления для Supabase без Edge Functions

Entrig
Ib Entrig Team

Supabase не отправляет push-уведомления автоматически при событиях в базе данных. Вызова supabase.notifications.send() не существует. Чтобы отправить уведомление, нужно собрать цепочку: триггер Postgres, Edge Function, учётные данные FCM и APNs, токены устройств и код выбора получателей.

Этот подход работает и хорошо документирован. Ниже — его составные части и управляемая альтернатива. Для Flutter доступно руководство Flutter; англоязычные руководства есть также для React Native, Expo, Capacitor, iOS и Android.

Что нужно для push-уведомлений

Каждому push нужны четыре вещи: токен устройства, место для его хранения, триггер, определяющий время отправки, и служба доставки до устройства — FCM для Android и APNs для iOS. Здесь мы подключаем эти части к Supabase.

Самостоятельная реализация

Без инструмента даже один тип уведомления в приложении Supabase потребует:

  1. Хранить токены устройств и регистрировать или удалять их при входе и выходе.
  2. Написать триггер Postgres на нужной таблице, например AFTER INSERT или AFTER UPDATE.
  3. Вызвать Edge Function из триггера, обычно через pg_net или webhook базы, потому что Postgres не может напрямую вызвать FCM и APNs.
  4. Определить получателя внутри Function: одного пользователя, несколько через join или всех пользователей. SQL- или JS-логика различается для каждого типа уведомлений.
  5. Вызвать FCM и APNs, сформировать payload для платформы и обработать ошибки, истёкшие токены и повторные попытки.
  6. Повторить шаги 2–5 для каждого нового типа и каждой платформы.

Сами по себе эти шаги несложны. Нагрузка на сопровождение возникает, когда для каждого уведомления появляются новая Edge Function и новый запрос получателей. Зато всё остаётся в вашей инфраструктуре и миграциях.

Управляемый подход

Entrig заменяет шаги 2–5 настройкой. Уведомление состоит из трёх частей:

  • Trigger: таблица и событие (INSERT, UPDATE, DELETE), при необходимости с условием.
  • Users: способ поиска получателей — Direct (внешние ключи к одному пользователю), Indirect via Join Table (рассылка через таблицу связей) или Broadcast (все пользователи с возможным фильтром).
  • Message: заголовок, текст и поля payload с {{placeholders}} из строки, вызвавшей триггер.

При сохранении Entrig создаёт и устанавливает триггер и функцию Postgres в проекте Supabase. Собственную Edge Function писать и развёртывать не нужно. На клиенте SDK инициализируется API-ключом и регистрирует устройство для ID пользователя; доставку в FCM и APNs выполняет Entrig.

Что всё равно потребуется

Управляемый сервис не отменяет требований платформ. В любом случае необходимо:

  • создать проект Firebase и JSON сервисного аккаунта для Android,
  • получить ключ аутентификации APNs для нативной доставки iOS,
  • включить push capability и background modes в iOS-проекте,
  • запросить разрешение на уведомления и обработать нажатия и deeplinks,
  • хранить в базе ID пользователя, совпадающий с ID регистрации устройства.

Самостоятельно или Entrig

СамостоятельноEntrig
Новый тип уведомленияНовый SQL, запрос получателей, логика Edge Function и деплойНастройка в панели, активна после сохранения
Установка триггераПишете и добавляете миграцией самиГенерируется и устанавливается автоматически
BackendFunction или сервер, который нужно поддерживатьСобственный backend не нужен; Entrig выполняет доставку
Токены устройствХранение, обновление и очистка на вашей сторонеSDK регистрирует токены; отклонённые становятся невалидными
Повторы доставкиЛогика FCM/APNs пишется вамиПри временных ошибках отправка автоматически повторяется

Руководства по платформам

Все руководства создают один групповой чат и три уведомления: вступление участника, новое сообщение и новая группа.

Frequently asked questions

Есть ли в Supabase встроенные push-уведомления?

Нет. В Supabase нет встроенного сервиса push-уведомлений и функции supabase.notifications.send(). Нужно связать триггер Postgres с Edge Function, вызывающей FCM и APNs, либо использовать управляемый сервис вроде Entrig.

Можно ли отправлять push из Supabase без собственной Edge Function?

Да. Entrig генерирует и устанавливает триггер и функцию Postgres в проекте Supabase и обеспечивает доставку. Уведомление настраивается в панели, а не в написанной и развёрнутой вами Edge Function.

Какие платформы поддерживаются?

Flutter, React Native, Expo, Capacitor, нативные iOS и Android; для каждой есть SDK и пошаговое руководство.