Как настроить push-уведомления через Firebase Cloud Messaging
Практика3 минРедакция Innovialabs
Коротко
Подключите Firebase к Android и iOS, загрузите APNs-ключ, сохраняйте FCM-токены устройств на сервере и отправляйте сообщения через Firebase Admin SDK; топики подходят для рассылок по интересам, а тестовая отправка из консоли быстро проверяет доставку.
Коротко: как работает FCM
Firebase Cloud Messaging (FCM) — бесплатный сервис Google для доставки push-уведомлений на Android, iOS и в веб. Схема простая:
- Приложение получает у FCM токен устройства.
- Приложение отправляет токен на ваш сервер.
- Сервер просит FCM доставить сообщение по токену или топику.
- На Android FCM доставляет сам, на iOS — через APNs Apple.
Шаг 1. Проект Firebase и Android
- Создайте проект в Firebase Console.
- Добавьте Android-приложение с тем же package name, что в проекте.
- Скачайте
google-services.jsonи положите в модульapp. - Подключите Gradle-плагин Google Services и зависимость
firebase-messaging. - Начиная с Android 13 нужно запросить разрешение POST_NOTIFICATIONS во время работы приложения.
Сервис для приёма токенов и сообщений:
class PushService : FirebaseMessagingService() {
override fun onNewToken(token: String) {
// отправьте токен на свой сервер
}
override fun onMessageReceived(message: RemoteMessage) {
// обработка сообщений, пока приложение открыто
}
}
Зарегистрируйте сервис в AndroidManifest.xml с intent-filter com.google.firebase.MESSAGING_EVENT.
Шаг 2. iOS и APNs-ключ
- Добавьте iOS-приложение в Firebase с вашим Bundle ID, скачайте
GoogleService-Info.plist. - В Apple Developer создайте APNs Authentication Key (файл
.p8). Сохраните его — скачать повторно нельзя. - В Firebase: Project settings → Cloud Messaging → Apple app configuration — загрузите ключ, укажите Key ID и Team ID.
- В Xcode включите capability Push Notifications и Background Modes → Remote notifications.
- В коде запросите разрешение у пользователя и зарегистрируйтесь для удалённых уведомлений; Firebase SDK свяжет APNs-токен с FCM-токеном.
Один .p8-ключ работает для всех приложений команды и в обоих окружениях APNs, в отличие от устаревших сертификатов, которые нужно было продлевать.
Шаг 3. Работа с токенами
- Сохраняйте токен на сервере вместе с ID пользователя, платформой и датой обновления.
- Обновляйте токен при каждом вызове
onNewTokenили его аналога на iOS. - У одного пользователя может быть несколько устройств — храните список токенов.
- Удаляйте токены, на которые FCM возвращает ошибку о незарегистрированном устройстве.
- При выходе из аккаунта отвязывайте токен от пользователя.
Шаг 4. Отправка с сервера
Используйте FCM HTTP v1 API — старый legacy API отключён. Проще всего через Firebase Admin SDK с сервисным аккаунтом:
import { initializeApp, applicationDefault } from "firebase-admin/app";
import { getMessaging } from "firebase-admin/messaging";
initializeApp({ credential: applicationDefault() });
await getMessaging().send({
token: deviceToken,
notification: { title: "Заказ отправлен", body: "Отследите доставку в приложении" },
data: { screen: "order", orderId: "1042" },
});
- notification — заголовок и текст, система показывает их сама.
- data — ваши ключи для логики, например экран для перехода.
Ключ сервисного аккаунта храните в секретах сервера, а не в репозитории и не в приложении.
Шаг 5. Топики
Топик — это рассылка всем, кто на него подписан, без хранения токенов:
- клиент вызывает
subscribeToTopic("news"); - сервер отправляет сообщение с
topic: "news"вместоtoken.
Топики хороши для публичных категорий (новости, акции). Для персональных уведомлений используйте токены.
Шаг 6. Проверка доставки
- Скопируйте токен устройства из логов.
- В Firebase Console откройте Messaging, создайте уведомление и нажмите Send test message, вставив токен.
- Проверьте три состояния: приложение открыто, свернуто, закрыто.
- iOS проверяйте на реальном устройстве.
Если сообщение не пришло: проверьте разрешение на уведомления, загруженный APNs-ключ, совпадение Bundle ID и package name, а также режим экономии энергии на Android.