Разработчики, публикующие приложения в RuStore, часто обнаруживают, что привычный Firebase Cloud Messaging не доставляет уведомления на часть устройств без сервисов Google — и именно для этого сценария создан RuStore Push SDK. Библиотека позволяет отправлять push-уведомления через инфраструктуру RuStore, независимо от наличия Google Play Services на устройстве пользователя.
В этой статье разберём, как работает SDK, как подключить его к проекту, получить токен устройства, отправить тестовое уведомление и исправить типичные ошибки интеграции. Материал ориентирован на Android-разработчиков, использующих Kotlin или Java.
Что такое RuStore Push SDK и когда он нужен
RuStore Push SDK — это клиентская библиотека от VK, которая обеспечивает приём push-уведомлений в приложениях, распространяемых через магазин RuStore. Она работает по схожему с FCM принципу: приложение регистрируется в push-сервисе, получает уникальный токен устройства, а сервер разработчика использует этот токен для отправки сообщений через API RuStore.
Интеграция становится необходимой в нескольких ситуациях. Во-первых, если ваша аудитория использует устройства без сервисов Google — например, смартфоны Huawei и Honor новых поколений. Во-вторых, если RuStore является основным или единственным каналом дистрибуции приложения. В-третьих, если требуется резервный канал доставки уведомлений на случай сбоев FCM.
- 📱 Доставка уведомлений на устройства без Google Mobile Services
- 🔄 Работа параллельно с FCM как резервный канал
- 📊 Поддержка data- и notification-сообщений
- 🛠 Официальная поддержка со стороны команды RuStore
Подготовка: регистрация проекта в консоли RuStore
Прежде чем добавлять библиотеку в код, необходимо зарегистрировать приложение в консоли разработчика RuStore и создать для него push-проект. Без этого шага SDK не сможет авторизоваться на сервере, а вы не получите учётные данные для серверной отправки сообщений.
Порядок действий выглядит так. Войдите в консоль разработчика RuStore, откройте раздел, связанный с push-уведомлениями, и привяжите приложение по его applicationId (имени пакета). После создания проекта вам будут доступны идентификатор проекта и ключи для серверной авторизации — сохраните их в защищённом месте, они понадобятся на стороне бэкенда.
⚠️ Внимание: имя пакета приложения в консоли должно точно совпадать сapplicationIdв файлеbuild.gradle. Несовпадение даже в одном символе приведёт к ошибке регистрации токена, и диагностировать её бывает непросто.
Подключение SDK к проекту
Библиотека распространяется через репозиторий Maven, который нужно добавить в конфигурацию проекта. Откройте файл settings.gradle или корневой build.gradle и убедитесь, что репозиторий RuStore указан в блоке repositories. Точный актуальный адрес репозитория и номер последней версии SDK стоит брать из официальной документации RuStore — они могут меняться от версии к версии.
Затем добавьте зависимость в файл build.gradle уровня модуля приложения:
dependencies {
implementation "ru.rustore.sdk:pushclient:<версия>"
}
После синхронизации проекта инициализируйте SDK в классе Application вашего приложения. Инициализация обычно выполняется в методе onCreate() и требует передачи контекста и идентификатора проекта, полученного в консоли. Конкретную сигнатуру методов сверяйте с документацией вашей версии SDK — API может отличаться между релизами.
☑️ Проверка подключения SDK
Получение push-токена и обработка сообщений
Токен — это идентификатор конкретного устройства, по которому сервер отправляет уведомления. Вам нужно запросить его через API SDK, сохранить и передать на свой бэкенд. Важный нюанс: токен может обновляться — при переустановке приложения, очистке данных или по внутренним причинам сервиса. Поэтому недостаточно получить его один раз при первом запуске.
Для приёма сообщений необходимо реализовать сервис-обработчик, унаследованный от класса, предоставляемого SDK (аналог FirebaseMessagingService). В нём переопределяются колбэки: получение нового токена, приём сообщения, ошибки доставки. Этот сервис нужно объявить в AndroidManifest.xml с соответствующим intent-фильтром — без этого система не сможет доставлять в него события.
- 🔑 Запрашивайте токен при каждом запуске приложения и сравнивайте с сохранённым
- 📡 Отправляйте обновлённый токен на свой сервер сразу после изменения
- 🧩 Обрабатывайте оба типа сообщений: уведомления и data-сообщения
- 🗑 Предусмотрите удаление токена при выходе пользователя из аккаунта
Отправка уведомлений с сервера
Клиентская часть — только половина работы. Для отправки уведомлений ваш бэкенд должен обращаться к push-API RuStore, авторизуясь с помощью ключей, выданных в консоли. Запрос обычно содержит токен целевого устройства, заголовок, текст сообщения и произвольные данные в поле payload.
Структурно процесс выглядит так: ваш сервер получает от приложения токен, сохраняет его в базе с привязкой к пользователю, а при наступлении события (новое сообщение, акция, напоминание) формирует HTTPS-запрос к API RuStore. Формат запроса и параметры авторизации подробно описаны в официальной документации — используйте именно её как источник истины, поскольку API может обновляться.
Почему нельзя отправлять push прямо с устройства
Ключи серверной авторизации нельзя встраивать в приложение — любой, кто декомпилирует APK, получит возможность рассылать уведомления всем вашим пользователям. Отправка должна выполняться только с доверенного сервера, где ключи хранятся в секретах.
Типичные ошибки и их диагностика
Чаще всего проблемы возникают не в коде, а в конфигурации. Если уведомления не приходят, начните проверку с самого простого: пришёл ли токен на устройство и дошёл ли он до вашего сервера. Отсутствие токена почти всегда означает проблему инициализации SDK или несовпадение идентификаторов проекта.
| Симптом | Вероятная причина | Что проверить |
|---|---|---|
| Токен не выдаётся | Неверный projectId или applicationId | Совпадение с данными консоли RuStore |
| Токен есть, push не приходит | Ошибка в серверном запросе | Код ответа API и формат payload |
| Push приходит, но не показывается | Нет разрешения на уведомления (Android 13+) | Запрос runtime-разрешения POST_NOTIFICATIONS |
| Работает на части устройств | Ограничения фоновой работы прошивки | Настройки автозапуска и батареи на устройстве |
| Ошибка после обновления SDK | Изменение API между версиями | Changelog и миграционный гид в документации |
⚠️ Внимание: начиная с Android 13, показ уведомлений требует runtime-разрешения POST_NOTIFICATIONS. Если приложение его не запросило, система молча скроет все push-сообщения, хотя с технической стороны доставка будет работать исправно. Это одна из самых частых причин «пропавших» уведомлений на новых устройствах.
Совместимость с FCM и другими push-сервисами
RuStore Push SDK можно использовать параллельно с Firebase Cloud Messaging и другими push-провайдерами (например, HMS Push Kit для устройств Huawei). Типовая архитектура выглядит так: приложение регистрируется во всех доступных сервисах, собирает токены от каждого и передаёт их на сервер, а бэкенд выбирает подходящий канал доставки в зависимости от устройства.
Чтобы избежать дублирования уведомлений, сервер должен отправлять сообщение только через один канал для каждого устройства. Логика выбора обычно строится на признаках: есть ли на устройстве Google Services, какой токен был получен последним, через какой магазин установлено приложение. Простой и надёжный вариант — хранить для каждого устройства приоритетный канал и обновлять его при смене токенов.
Тестирование перед релизом
Перед публикацией сборки в RuStore прогоните полный цикл: установка приложения, получение токена, отправка тестового уведомления, открытие уведомления и переход на нужный экран. Проверять стоит минимум на двух устройствах — с сервисами Google и без них, поскольку поведение фоновых процессов может отличаться.
Обратите внимание на сценарии, которые часто упускают: доставка при выгруженном из памяти приложении, поведение после перезагрузки устройства, обновление токена после переустановки. Именно в этих случаях всплывают проблемы с ограничениями прошивок и обработкой событий жизненного цикла.
Как логировать работу SDK при отладке
Оберните все колбэки SDK (получение токена, приём сообщения, ошибки) в логирование через Logcat с отдельным тегом, например RuStorePush. В debug-сборках можно выводить токен и содержимое payload в лог — это сильно ускоряет поиск проблем. В release-сборке логирование чувствительных данных отключите.
Часто задаваемые вопросы
Работает ли RuStore Push SDK на устройствах с Google Services?
Да, SDK функционирует независимо от наличия Google Mobile Services. На устройствах с GMS можно использовать FCM и RuStore Push параллельно, выбирая канал доставки на серверной стороне.
Обязательно ли публиковать приложение в RuStore, чтобы использовать push-сервис?
Push SDK ориентирован на приложения, распространяемые через RuStore, и требует регистрации проекта в консоли разработчика RuStore. Актуальные условия использования уточняйте в официальной документации сервиса.
Что делать, если токен перестал приходить после обновления SDK?
Проверьте changelog новой версии — API инициализации мог измениться. Также убедитесь, что идентификатор проекта и applicationId по-прежнему совпадают с данными консоли, и очистите данные приложения на тестовом устройстве для повторной регистрации.
Можно ли отправлять уведомления по топикам, как в FCM?
Возможности сегментации и рассылки по темам зависят от текущей версии API RuStore. Сверяйтесь с официальной документацией: если топики не поддерживаются, групповую рассылку можно реализовать на своём сервере, итерируясь по списку токенов целевой аудитории.
Почему уведомления приходят с задержкой на некоторых устройствах?
Вероятная причина — агрессивная оптимизация фоновых процессов в прошивке (это характерно для ряда производителей). Проверьте настройки автозапуска и расхода батареи для приложения на конкретном устройстве и предусмотрите в интерфейсе подсказку пользователю о необходимых разрешениях.