EN
Mobile Developer
Mobile Developer
1 634 subscribers
goals
433 of 1 000 paid subscribers
Сообщество значит все Как только мы собираем цифру, я стартую отдельную ветку стримов, где делаю приложение со всеми пояснениями для Junior и выше
1 359.83 of $ 12 913 money raised
Просто поддержать канал

🔔 Как не убить push-уведомления в Doze: гайд по FCM


🤖 Android любит экономить батарейку — есть всякие Doze и прочие оптимизации (про режим Doze в следующий раз) из-за чего приложения на андроид устройствам могут "засыпать". "Настоящие" же пуш-уведомления обычно должны отрабатываться системой в оперативное время, т.к. сильно связаны с системой. Но есть нюанс: если криво настроен Firebase Cloud Messaging, ваши пуши могут приходить с задержкой или не приходить вообще, что может сказаться на рейтинге вашего приложения.

Чтобы уведомления не терялись и реально доходили до юзера, важно:
1) Корректно выставлять приоритет уведомлений.
2) Грамотно обрабатывать полезную нагрузку (payload).

📌 Приоритеты FCM
У FCM есть два приоритета:
- normal — пуши приходят, когда экран включён. Если экран погас — ждут, пока устройство «проснётся» из Doze.
- high — пуши приходят сразу, даже если экран выключен. FCM может «разбудить» устройство.
Используй high priority, если уведомление действительно срочное и юзер должен его видеть (чаты, важные нотификации, доставка и т.д.).

⚠️ Но тут стоит быть аккуратным - Google может Google может ограничить (throttle) high-приоритетные пуши, если они не приводят к видимому уведомлению или открытию приложения. Поэтому - используй high priority только если точно будет UI-реакция (показ уведомления, открытие экрана и т.д.).

🚀 Как отправлять пуши с нужным приоритетом?
1) Через Firebase Admin SDK
2) Через FCM REST API
3) Из Firebase Console — но там нельзя указать android.priority, так что только для простых кейсов.

🧠 Обработка onMessageReceived
Метод onMessageReceived() вызывается в фоновом потоке. Android даёт несколько секунд, чтобы обработать payload. Для high priority — чуть больше времени, но всё равно мало. Поэтому, не надо тянуть туда async-логики, запросов к серверу и прочих тяжёлых операций.
Если всё-таки нужно потянуть данные (например, картинку по imageUrl), используй:
- WorkManager (expedited) — для high priority
- Обычный WorkRequest — для normal priority
Это даст твоему коду больше времени, и он не упадет из-за таймаутов жизненного цикла.

🧪 Проверка high priority пушей в режиме Doze
1) Введи тестовое устройство в Doze. [инструкция]
2) Получи FCM токен. [инструкция]
3) Отправь пуш с приоритетом high через Admin SDK или cURL.
4) Проверь, что всё дошло чётко и быстро.
💡 Какие можно сделать выводы?
1) Используй priority: "high" для всего, что юзер должен увидеть сразу
2) Оперативно обрабатывай payload внутри onMessageReceived()
3) Используй WorkManager для тяжёлыйх/долгих операций
4) Не увлекайся high priority — Firebase тебя замьютит
5) Тестируй пуши в Doze, а не только на активном экране

Ссылка на оригинальную статью

Subscription levels

Tier 1

$ 1,28 per month
- Твое имя в конце видео с благодарностью
Внеси свое имя в историю канала :) Имя будет во всех видео, которые сняты в этом месяце

Tier 2

$ 5,2 per month
- Доступ к бонусам предыдущего уровня
- Доступ к эксклюзивным видео
- Доступ ко всем видео на две недели раньше их выхода

Tier 3

$ 7,8 per month
- Доступ ко всем видео
- Доступ в группу закрытых чатов, где можно получить помощь по карьерным кейсам, с кодом, обсудить книги и инструменты для саморазвития с опытными людьми (в чате процентов 30 - 40 синьоров)
+ chat

Tier 4

$ 14,2 per month
- Доступ к бонусам предыдущего уровня
- Доступы в чаты
- Дайджест аналитика раз в две недели (разбор ключевых событий в мире разработки с моим скромным мнением по этому поводу)
+ chat

Tier 5

$ 1 292 per month
- Доступ к предыдущим бонусам
- Доступ в чат по саморазвитию
- Доступ в закрытый чат, где я менторю вашу разработку, подсказываю куда идти, отвечаю на вопросы, смотрю код
+ chat
Go up