В этом руководстве описывается, как настроить Firebase Cloud Messaging в мобильных и веб-клиентских приложениях, чтобы вы могли надежно получать сообщения.
 Для получения нисходящих сообщений каждое клиентское приложение должно реализовать методы API firebase::messaging::Listener .
Инициализировать FCM
Прежде чем вы сможете использовать FCM для получения доступа к своему регистрационному токену или получения сообщений, его необходимо инициализировать.
 Чтобы инициализировать FCM , вызовите ::firebase::messaging::Initialize и предоставьте ему объект ::firebase::App , а также реализацию класса ::firebase::messaging::Listener . 
MyListener my_listener_implementation;
::firebase::messaging::Initialize(app, &my_listener_implementation);
Доступ к регистрационному токену
При первом запуске приложения FCM SDK генерирует регистрационный токен для экземпляра клиентского приложения. Если вы хотите настроить таргетинг на отдельные устройства или создать группы устройств для FCM , вам потребуется доступ к этому токену.
 Доступ к значению токена можно получить через виртуальную функцию ::firebase::messaging::Listener::OnTokenReceived . 
void OnTokenReceived(const char* token) {
  LogMessage("The registration token is `%s`", token);
  // TODO: If necessary send token to application server.
}
Получать и обрабатывать сообщения
 Для получения сообщений ваш класс Listener должен реализовать виртуальную функцию OnMessage .
 Переопределить OnMessage
 Переопределив метод ::firebase::messaging::Listener::OnMessage , вы можете выполнять действия на основе полученного сообщения и получать данные сообщения: 
void OnMessage(const ::firebase::messaging::Message& message) {
  LogMessage(TAG, "From: %s", message.from.c_str());
  LogMessage(TAG, "Message ID: %s", message.message_id.c_str());
}
Сообщения могут представлять различные типы входящих данных. Чаще всего сообщения отправляются в приложение по инициативе разработчика. Сообщения также отправляются в ваше приложение для отображения событий отправки сообщений, ошибок отправки сообщений и удаления сообщений. Эти особые события можно различить, проверив поле Message::message_type .
Сообщения удалены
 Отправляется в ваше приложение, когда сервер FCM удаляет ожидающие сообщения. Message::message_type будет "deleted_messages" . Сообщения могут быть удалены по следующим причинам:
- Слишком много сообщений хранится на сервере FCM . - Это может произойти, когда серверы приложения отправляют множество несворачиваемых сообщений на серверы FCM , пока устройство находится в автономном режиме. 
- Устройство не подключалось в течение длительного времени, и сервер приложений недавно (в течение последних 4 недель) отправил сообщение приложению на этом устройстве. - После получения этого вызова приложению рекомендуется выполнить полную синхронизацию с сервером приложений.