Как Google внедрила функцию push-уведомления? Выполняется ли это посредством опроса, выполняемого службой, работающей в фоновом режиме или по-другому?
Как технология push-уведомлений работает на Android?
Ответ 1
Из того, что я слышал на конференции разработчиков Android в Израиле:
Существует просто TCP-сокет, ожидающий в режим приема на облачном сервере Google. Соединение с TCP было инициировано приложением Google Play. Именно поэтому Google Play должен быть установлен на устройстве для создания Google Cloud Messaging (GCM) (ранее служба Android Cloud для устройств обмена сообщениями - C2DM).
Когда это клиентское сокет TCP получает какое-либо сообщение, сообщение содержит информацию, такую как имя пакета приложения, к которому он должен быть адресован, и, конечно же, данные. Эти данные анализируются и упаковываются в intent, которые транслируются и в конечном итоге принимаются приложением.
Сокет TCP остается открытым, даже когда состояние радиостанции устройства переходит в режим ожидания. Приложения не должны запускаться для получения намерений.
Дополнительная информация на http://developer.android.com/google/gcm/gcm.html
Ответ 2
Android поддерживает одно активное соединение с серверами Google, но оно не использует много энергии или данных, поскольку на нем не отправляется трафик, пока что-то не отправит сообщение GCM в приложение на вашем телефоне. Там только одно соединение на телефоне, используемое всеми приложениями: установка нового приложения, использующего GCM, не добавляет дополнительной нагрузки.
Первым шагом в GCM является то, что сторонний сервер (например, сервер электронной почты) отправляет запрос на сервер GCM Google. Затем этот сервер отправляет сообщение на ваше устройство через это открытое соединение. Система Android просматривает сообщение, чтобы определить, для какого приложения оно, и запускает это приложение. Приложение должно зарегистрироваться на Android для использования GCM, и оно должно иметь соответствующее разрешение. Когда приложение запустится, оно может сразу же создать уведомление с данными из сообщения. Сообщения GCM очень ограничены по размеру, поэтому приложение может вместо этого открывать обычное подключение к стороннему серверу для получения дополнительной информации (например, загрузка заголовков новых писем).
Преимущество использования push-уведомлений заключается в том, что приложениям не нужно запускать с регулярными интервалами, чтобы проверять новые данные, сохраняя как мощность, так и данные. Преимущество наличия централизованного механизма, такого как GCM, заключается в том, что устройству требуется только одно открытое сетевое соединение, а система Android GCM - это единственное, что нужно продолжать работать, вместо того чтобы каждое приложение должно было работать в фоновом режиме, чтобы сохранить свою собственную сеть подключение к своему серверу.
Ответ 3
Вы можете реализовать push-оповещение на андроиде самостоятельно с помощью долгого tcp-соединения. Но это будет связано с поддержанием дополнительного разъема = > разряда батареи. Или вы можете открывать соединение через регулярные интервалы с помощью диспетчера аварийных сигналов.
Google, вероятно, открывает один сокет для всех push-уведомлений C2DM, следовательно, он более эффективен для батареи.
Ответ 4
Да, ты прав. У Google была услуга (служба GTalk), и эта служба в некоторые периоды времени запрашивала серверы Google.