mobnews

Честно о связи, тарифах и софте

Колонку ведёт Илья Рябов

Новость

Почему UnifiedPush через публичный ntfy на Android дает сбой

Команда мессенджера RCQ — открытый код, сквозное шифрование, Android и iOS — честно разложила на Хабре, почему «красивый» отказ от FCM в пользу UnifiedPush в проде превращается в тыкву.

Илья Рябов, Обозреватель мобильного рынка и охотник за мелким шрифтом·обновлено 01 августа 2026 г.

Почему UnifiedPush через публичный ntfy на Android дает сбой

Уведомления через публичный ntfy.sh не доходят: четыре из пяти попыток разбудить телефон заканчиваются отказом. И так с первого дня работы фичи, а не «что-то сломалось на той стороне».

Где рвётся цепочка

UnifiedPush устроен элегантно на бумаге: ваш сервер делает POST → пуш-сервер отдаёт байты → дистрибьютор на телефоне принимает их через системный бродкаст → приложение получает сигнал. Никакого Google в схеме. Самый популярный пуш-сервер — публичный ntfy.sh, самый популярный дистрибьютор — официальное приложение ntfy. На этой связке по умолчанию стоит почти всё «бесплатное-открытое-без-Google».

А теперь следите за руками. Официальный клиент ntfy из Google Play держит постоянное соединение с ntfy.sh только в сборке с F-Droid. В Play-версии «instant delivery» опциональна — по умолчанию работает через Firebase. Логика авторов ntfy понятная: зачем жечь батарею постоянным сокетом, когда есть FCM.

И вот тут начинается цирк. В регионе, где FCM мёртв (а это Россия, Иран и далее по списку), пользователь ставит ntfy из Play Market. Тот ждёт сигнала через мёртвый Firebase и постоянного канала с ntfy.sh не держит. С точки зрения сервера подписчиков на топике нет. Наш POST получает код 507 — «отказано». Сообщение не кэшируется, не откладывается, не существует.

Цифры из боевого журнала

Срез за 36 часов, только Android-эндпоинты: на одну успешную доставку — больше четырёх отказов. Отказы идут с 15 июня, со дня запуска фичи. Просто на паре тестовых телефонов, которые всегда на связи и в Wi-Fi, это было незаметно — у меня, кстати, тоже: я проверял на Pixel, лежащем на зарядке, всё прилетало за полсекунды. А у живых пользователей в поле — тишина.

Платный тариф ntfy это не лечит. Лимитирование по подписчику срабатывает ровно так же: нет зарегистрированного подписчика на топике — нет доставки, и никакая подписка уровня Pro не воскресит ваш POST.

Что делать, если хочется пушей без Google

Мораль для тех, кто уходит от FCM: «открытый стандарт» без живой инфраструктуры — это не свобода, а тихий отвал уведомлений. Если у вас в регионе FCM не работает, а ntfy стоит из Play Market — у вас сейчас не пуш-сервер, а чёрная дыра: клиент слушает мёртвый Firebase, сервер видит пустой топик и отказывает молча.

Варианты, которые реально работают: ставить ntfy из F-Droid (там постоянное соединение включено по умолчанию), поднимать свой пуш-сервер и свой дистрибьютор, либо вообще не играть в UnifiedPush на публичных инстансах и честно держать свой. В RCQ пошли по последнему пути и написали собственный дистрибьютор — детали в их разборе на Хабре.

Перед тем как раскатывать «свободу от Google» на прод, проверьте на десятке устройств с разными условиями связи: метро, edge, две недели в фоне. Четыре из пяти отказов в логах сервера — это не баг, это и есть поведение публичного ntfy.sh из коробки.