Google Cloud Messaging
Google Cloud Messaging (GCM) — это бесплатный сервис от компании Google, предназначенный для передачи данных (push-уведомлений) от серверов приложений на мобильные устройства под управлением операционной системы Android, а также на веб-приложения, работающие в браузере Google Chrome. Сервис выступал в роли посредника (брокера), обеспечивая надёжную и энергоэффективную доставку сообщений, не требуя от приложения постоянно поддерживать активное сетевое соединение с сервером. В 2016 году Google объявила о прекращении поддержки GCM и переходе на его преемника — Firebase Cloud Messaging (FCM).
История
Предпосылки и запуск
До появления GCM разработчикам Android-приложений приходилось самостоятельно реализовывать механизмы постоянного опроса сервера (polling) или поддерживать долгоживущие TCP-соединения. Это приводило к повышенному расходу заряда батареи и трафика. Для решения этой проблемы Google в 2010 году запустила сервис Android Cloud to Device Messaging (C2DM), который стал предшественником GCM. C2DM был экспериментальным и имел ряд ограничений: требовал регистрации через веб-интерфейс, не поддерживал отправку сообщений через браузер и имел лимиты на количество сообщений.
В июне 2012 года на конференции Google I/O был анонсирован Google Cloud Messaging как эволюция C2DM. GCM устранил многие недостатки предшественника: предоставил простой REST API, снял ограничения на количество отправляемых сообщений, добавил поддержку Chrome и упростил процесс регистрации приложений.
Развитие и замена
В течение нескольких лет GCM активно развивался. В 2014 году была добавлена поддержка уведомлений для веб-приложений через Chrome. В 2015 году сервис получил возможность отправлять «топик-сообщения» (topic messages), позволяющие подписывать устройства на определённые темы и получать сообщения по ним без необходимости указывать конкретные идентификаторы устройств.
В мае 2016 года Google анонсировала Firebase Cloud Messaging (FCM) — новый сервис, построенный на базе GCM, но интегрированный в платформу Firebase. FCM унаследовал все возможности GCM, добавив при этом улучшенную аналитику, A/B-тестирование уведомлений, автоматическую отправку на основе данных и более простую настройку. Google рекомендовала разработчикам мигрировать на FCM, а 29 мая 2019 года официально прекратила поддержку GCM, после чего старые API перестали работать. Все существующие проекты на GCM были автоматически перенесены на FCM.
Архитектура и принцип работы
Основные компоненты
Архитектура GCM включала три ключевых элемента:
- Сервер приложения (App Server) — серверная часть разработчика, которая отправляет сообщения через GCM-серверы Google.
- GCM-серверы Google — центральные серверы, принимающие сообщения от сервера приложения и доставляющие их на целевые устройства.
- Клиентское приложение — приложение на устройстве пользователя (Android или Chrome), которое регистрируется для получения сообщений.
Процесс доставки
- Регистрация: При первом запуске приложение обращается к GCM-серверу и получает уникальный идентификатор — Registration ID (токен). Этот токен передаётся на сервер приложения и используется для идентификации устройства.
- Отправка: Когда сервер приложения хочет отправить уведомление, он формирует HTTP-запрос (POST) к GCM-серверу по адресу
https://android.googleapis.com/gcm/send`. В запросе указываются:
- Registration ID получателя (или список ID).
- Ключ авторизации (API Key), полученный разработчиком в консоли Google.
- Полезная нагрузка (payload) — данные, которые будут переданы приложению (например, текст сообщения, заголовок, иконка).
- Доставка: GCM-сервер принимает запрос, проверяет авторизацию, находит устройство по Registration ID и отправляет ему сообщение. Если устройство офлайн, сообщение ставится в очередь и доставляется при восстановлении соединения. Время хранения сообщения в очереди по умолчанию составляло 4 недели.
- Обработка: На устройстве операционная система Android получает сообщение и передаёт его целевому приложению. Приложение может обработать данные в фоновом режиме (например, загрузить новые данные) или отобразить уведомление в строке состояния.
Типы сообщений
GCM поддерживал два основных типа сообщений:
- Сообщения-уведомления (Notification messages): Обрабатываются системой Android напрямую. Приложение получает готовое уведомление с заголовком, текстом и иконкой, которое отображается в строке состояния. Разработчик не может изменить поведение при получении такого сообщения (оно либо отображается, либо нет).
- Сообщения-данные (Data messages): Содержат произвольный набор пар «ключ-значение». Приложение получает эти данные и само решает, что с ними делать: показать уведомление, обновить интерфейс, запустить фоновую задачу. Этот тип давал разработчику полный контроль.
Классификация и характеристики
Основные возможности
- Бесплатность: Сервис не взимал плату за отправку сообщений, что делало его доступным для разработчиков любого масштаба.
- Масштабируемость: GCM был рассчитан на миллиарды устройств и мог обрабатывать огромные объёмы сообщений.
- Энергоэффективность: Использование единого постоянного соединения с серверами Google вместо множества соединений от разных приложений существенно экономило заряд батареи.
- Надёжность: Сервис гарантировал доставку сообщений (с учётом очередей для офлайн-устройств) и предоставлял механизмы повторной отправки при сбоях.
- Безопасность: Передача данных осуществлялась по зашифрованному каналу (HTTPS). Для авторизации сервера приложения использовался API Key.
- Многоплатформенность: Поддержка Android (начиная с версии 2.2) и Chrome (настольного и мобильного).
Ограничения
- Размер сообщения: Максимальный размер полезной нагрузки составлял 4 КБ (4096 байт). Для передачи больших объёмов данных требовалось использовать другие механизмы (например, загружать данные по ссылке из сообщения).
- Зависимость от Google Play Services: На Android для работы GCM требовалось наличие установленных сервисов Google Play (Google Play Services). На устройствах без них (например, в некоторых китайских смартфонах или кастомных прошивках) сервис не работал.
- Отсутствие гарантии мгновенной доставки: Хотя сервис старался доставлять сообщения как можно быстрее, задержки могли возникать из-за перегрузки сети, состояния устройства или настроек энергосбережения.
Применение
Мобильные приложения
GCM широко использовался в самых разных категориях Android-приложений:
- Социальные сети и мессенджеры: Уведомления о новых сообщениях, лайках, комментариях, запросах в друзья.
- Новостные и информационные приложения: Оповещения о выходе новых статей, срочных новостях, изменениях курсов валют.
- Игры: Уведомления о завершении строительства, приглашения от друзей, бонусы за возвращение в игру.
- Электронная коммерция: Оповещения о статусе заказа, скидках, брошенных корзинах.
- Бизнес-приложения: Уведомления о новых задачах, встречах, изменениях в документах.
Веб-приложения (Chrome)
GCM также позволял отправлять push-уведомления на веб-сайты, открытые в браузере Google Chrome (как на десктопе, так и на Android). Для этого использовался API Service Worker. Это давало возможность сайтам оповещать пользователей о новых событиях даже после закрытия вкладки с сайтом. Примеры: уведомления о новых письмах в Gmail, о новых сообщениях в Facebook (продукт Meta, признанной экстремистской и запрещённой в РФ), о завершении загрузки файла.
Критика и недостатки
Основные претензии к GCM были связаны с его зависимостью от инфраструктуры Google. В регионах, где сервисы Google были заблокированы или ограничены (например, в Китае), GCM не работал, что вынуждало разработчиков создавать собственные альтернативные системы push-уведомлений. Также критиковалась ограниченная документация и сложность отладки на ранних этапах. Некоторые разработчики отмечали, что на устройствах с агрессивными настройками энергосбережения GCM мог задерживать доставку сообщений на неопределённое время.
Наследие
Google Cloud Messaging стал важным этапом в развитии мобильной экосистемы Android. Он предоставил разработчикам стандартизированный, надёжный и бесплатный инструмент для взаимодействия с пользователями, что способствовало росту популярности платформы. Несмотря на то, что сервис был упразднён, его архитектура и принципы работы легли в основу Firebase Cloud Messaging, который продолжает выполнять те же функции, но с более широкими возможностями и интеграцией с другими сервисами Firebase.
Источники
- Официальная документация Google Cloud Messaging (архивная версия)
- Документация Firebase Cloud Messaging
- Анонс GCM на Google I/O 2012
- Статья «Google Cloud Messaging for Android» на сайте Android Developers Blog
- Объявление о прекращении поддержки GCM (2019)
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →