Как работают push-уведомления?

25

Мне интересно, как работает система push-уведомлений?

Есть ли активное соединение TCP / IP, которое работает в фоновом режиме с серверами Google?

opc0de
источник
1
Посмотрите Википедию - которую по общему признанию немного трудно прочитать. В основном, проще говоря: клиент подключается к серверу и запрашивает информацию - и тогда ответ приходит «с задержкой», когда информация доступна (или никогда, если ее нет), за которой следует Новый запрос. Так что да, это требует постоянного фонового соединения TCP / IP, грызущего батарею.
Иззи
@ Иззи, что не может быть правдой, потому что (1) в документах говорится, что Intent создается, когда приходит сообщение, и (2) что работает на Android, может поддерживать соединение открытым, которое Android никогда не сможет убить?
Майкл
@ Майкл Какие документы? Я не программист Android, чтобы понять всю глубину (и это не доска обсуждений), поэтому я, вероятно, не могу спорить с вами здесь. Я слышал, что слушатели (для трансляций) могут устанавливаться динамически - но я никогда не слышал об этих намерениях (ИМХО они должны быть объявлены в Manifest). Я мог бы вообразить, что какой-то сервис Google выполняет «настоящую работу», а приложение просто регистрирует «получателя». Приведенное выше описание было более «общим», а не специфичным для Android, и я постарался сделать его простым;)
Иззи

Ответы:

25

Да, Android поддерживает одно активное соединение с серверами Google, но не использует много энергии или данных, потому что по нему не передается трафик, пока что-то не отправит сообщение GCM в приложение на вашем телефоне. На телефоне есть только одно соединение, используемое всеми приложениями: установка нового приложения, использующего GCM, не добавляет дополнительной нагрузки.

Первый шаг в GCM заключается в том, что сторонний сервер (например, сервер электронной почты) отправляет запрос на сервер GCM Google. Затем этот сервер отправляет сообщение на ваше устройство через это открытое соединение. Система Android просматривает сообщение, чтобы определить, для какого приложения оно предназначено, и запускает это приложение. Приложение должно быть зарегистрировано в Android, чтобы использовать GCM, и оно должно иметь соответствующее разрешение. Когда приложение запускается, оно может сразу создать уведомление с данными из сообщения. Размер сообщений GCM очень ограничен, поэтому приложение может вместо этого открыть обычное соединение со сторонним сервером для получения дополнительной информации (например, загрузки заголовков новых писем).

Преимущество использования push-уведомлений заключается в том, что приложения не должны запускаться через регулярные промежутки времени для проверки новых данных, что экономит как энергию, так и данные. Преимущество наличия централизованного механизма, такого как GCM, состоит в том, что устройству требуется только одно открытое сетевое соединение, и единственной вещью, которая должна работать, является система Android GCM, а не каждое приложение, работающее в фоновом режиме для поддержания собственной сети. подключение к собственному серверу.

Дэн Халм
источник
Я бы добавил только 1 комментарий: сообщения GCM могут иметь размер 4 КБ, поэтому они не ограничены. developer.android.com/google/gcm/gcm.html
Мози
Что держит это соединение открытым? Любое действие или служба Android могут быть убиты в любое время.
Майкл
1
Спасибо за информацию. На мой вопрос , знаете ли вы какой URL у открытого сокета? (URL-адрес подключения с устройства к серверам GCM, который открыт и используется для данных уведомлений)
Sabeti
6

Android OS теперь использует GCM (Google Cloud Messaging) для Push Notification WS. Вы можете получить лучшую идею здесь ; он предоставит вам архитектурный обзор службы полного push-уведомления с ее жизненным циклом.

Надеюсь, это поможет.

Bhavesh
источник
Есть ли способ сделать подобное без необходимости полагаться на серверы Google?
Майкл
@Michael Используете сервисы Amazon Cloud? Кажется, у них есть сопоставимая концепция. Но для «как» это не то место;)
Иззи
1

Поздний ответ на старый вопрос, но стоит поставить его.

GCM устарел в апреле прошлого года 2018 года, и Google рекомендовал использовать вместо него FCM, что аналогично GCM.

  1. нам не нужно писать собственную логику повторных попыток регистрации или подписки
  2. Вы можете использовать Firebase Notifications, серверное решение для уведомлений с веб-консолью, которое позволяет любому отправлять уведомления целевой аудитории на основе аналитических данных Firebase Analytics.
  3. Он имеет основную инфраструктуру GCM.
  4. Одиночное сообщение может передавать полезную нагрузку до 4 КБ клиентскому приложению.
Аджай Дипак
источник
1
С точки зрения приложения FCM не похож на GCM, он идентичен. FCM - это просто новое имя GCM.
Роберт