Как Google реализовал функцию push-уведомлений? Работает ли он посредством опроса, выполняемого службой, работающей в фоновом режиме или другим способом?
Как Google реализовал функцию push-уведомлений? Работает ли он посредством опроса, выполняемого службой, работающей в фоновом режиме или другим способом?
Ответы:
Из того, что я слышал во время конференции разработчиков Android в Израиле:
На облачном сервере Google просто есть TCP-сокет, ожидающий в режиме принятия . TCP-соединение было инициировано приложением Google Play. Вот почему Google Play должен быть установлен на устройстве, чтобы заставить работать Google Cloud Messaging (GCM) (ранее Android Cloud to Device Messaging Service - C2DM ).
Когда этот сокет TCP-клиента получает какое-либо сообщение, оно содержит такую информацию, как имя пакета приложения, к которому оно должно быть адресовано, и, конечно, сами данные. Эти данные анализируются и упаковываются в намерение , которое передается и в конечном итоге принимается приложением.
Разъем TCP остается открытым, даже когда состояние радиосвязи устройства переходит в режим ожидания. Приложения не должны быть запущены, чтобы получить намерения.
Более подробная информация на http://developer.android.com/google/gcm/gcm.html
Android поддерживает одно активное соединение с серверами Google, но не использует много энергии или данных, потому что по нему не передается трафик, пока что-то не отправит сообщение Google Cloud Messaging (GCM) в приложение на вашем телефоне. На телефоне есть только одно соединение, используемое всеми приложениями: установка нового приложения, использующего GCM, не добавляет дополнительной нагрузки.
Первый шаг в GCM заключается в том, что сторонний сервер (например, сервер электронной почты) отправляет запрос на сервер GCM Google. Затем этот сервер отправляет сообщение на ваше устройство через это открытое соединение. Система Android просматривает сообщение, чтобы определить, для какого приложения оно предназначено, и запускает это приложение. Для использования GCM приложение должно быть зарегистрировано на Android и должно иметь соответствующее разрешение. Когда приложение запускается, оно может сразу создать уведомление с данными из сообщения. Размер сообщений GCM очень ограничен, поэтому приложение может вместо этого открыть обычное соединение со сторонним сервером для получения дополнительной информации (например, загрузки заголовков новых писем).
Преимущество использования push-уведомлений заключается в том, что приложения не должны запускаться через регулярные промежутки времени для проверки новых данных, что экономит как энергию, так и данные. Преимущество наличия централизованного механизма, такого как GCM, состоит в том, что устройству требуется только одно открытое сетевое соединение, и единственной вещью, которая должна работать, является система Android GCM, а не каждое приложение, работающее в фоновом режиме, чтобы поддерживать свою собственную сеть. подключение к собственному серверу.
Вы можете реализовать push-уведомление на Android самостоятельно с помощью длинного опроса TCP-соединения. Но это потребовало бы наличия дополнительной розетки => разряд батареи. Или вы можете открывать соединение через регулярные промежутки времени с помощью диспетчера тревог.
Google, вероятно, открывает один сокет для всех push-уведомлений C2DM, следовательно, это более эффективный аккумулятор.
По состоянию на 10 апреля 2018 года Google устарел GCM. API сервера и клиента GCM устарели и будут удалены, как только 11 апреля 2019 года. Миграция приложений GCM в Firebase Cloud Messaging (FCM), которая наследует надежную и масштабируемую инфраструктуру GCM, а также множество новых функций.
На устройствах Android, когда вы получаете push-уведомления, изображение и сообщение приложения отправителя появляются в строке состояния. Точно, когда клиент нажимает на уведомление, он / она попадает в приложение.