google-cloud-messagingНачало работы с Google-облачным обменом сообщениями


замечания

Виртуальные сообщения Google: обзор

Google Cloud Messaging (GCM) - это бесплатный сервис, который позволяет разработчикам отправлять сообщения между серверами и клиентскими приложениями. Это включает в себя нисходящие сообщения от серверов к клиентским приложениям и восходящие сообщения от клиентских приложений к серверам.

Например, легкое нисходящее сообщение может информировать клиентское приложение о том, что новые данные должны быть получены с сервера, как в случае уведомления о «новом письме». Для случаев использования, таких как обмен мгновенными сообщениями, сообщение GCM может передавать до 4 килобайт полезной нагрузки клиентскому приложению. Служба GCM обрабатывает все аспекты очереди сообщений и доставки в целевое клиентское приложение и обратно.


Обзор архитектуры

Реализация GCM включает сервер соединений Google, сервер приложений в вашей среде, который взаимодействует с сервером соединения по протоколу HTTP или XMPP, и клиентское приложение.

Обзор архитектуры

Вот как взаимодействуют эти компоненты:

  • Серверы Google GCM Connection принимают исходящие сообщения с вашего сервера приложений и отправляют их в клиентское приложение. Сервер соединения XMPP также может принимать сообщения, отправленные вверх от клиентского приложения, и перенаправлять их на ваш сервер приложений. Дополнительные сведения см. В разделе О сервере подключения GCM .
  • На вашем сервере приложений вы реализуете протокол HTTP и / или XMPP для связи с серверами (серверами) GCM. Серверы приложений отправляют нисходящие сообщения на сервер соединения GCM; сервер соединений завершает и сохраняет сообщение, а затем отправляет его в клиентское приложение. Если вы реализуете XMPP, ваш сервер приложений может получать сообщения, отправленные из клиентского приложения.
  • Клиентское приложение - это клиентское приложение с поддержкой GCM. Чтобы получать и отправлять сообщения GCM, это приложение должно зарегистрироваться в GCM и получить уникальный идентификатор, называемый регистрационным маркером. Дополнительные сведения о том, как реализовать клиентское приложение, см. В документации для вашей платформы.

Ключевые идеи

Ниже приведены ключевые термины и понятия, связанные с GCM. Он разделен на следующие категории:

  • Компоненты - объекты, которые играют основную роль в GCM.
  • Учетные данные . Идентификаторы и токены, которые используются в GCM, чтобы гарантировать, что все стороны прошли аутентификацию, и что сообщение идет в нужное место.

GCM-компоненты и учетные данные.

Компоненты

  • Серверы GCM Connection - серверы Google, участвующие в отправке сообщений между сервером приложений и клиентским приложением.
  • Клиентское приложение - клиентское приложение с поддержкой GCM, которое взаимодействует с вашим сервером приложений.
  • Сервер приложений - сервер приложений, который вы пишете как часть реализации GCM. Сервер приложений отправляет данные в клиентское приложение через сервер подключения GCM. Если ваш сервер приложений реализует протокол XMPP, он также может получать сообщения, отправленные вверх по течению от клиентских приложений.

полномочия

  • Удостоверение личности отправителя
    Уникальное числовое значение, созданное при настройке вашего проекта API. Идентификатор отправителя используется в процессе регистрации для идентификации сервера приложений, которому разрешено отправлять сообщения в клиентское приложение.

  • Ключ сервера
    Ключ, сохраненный на сервере приложений, который дает авторизованный доступ к сервисам Google для сервера приложений. В HTTP ключ сервера включен в заголовок POST-запросов, отправляющих сообщения. В XMPP ключ сервера используется в запросе аутентификации SASL PLAIN в качестве пароля для аутентификации соединения. Не включайте ключ сервера в любой код вашего клиента. Вы получаете ключ сервера при создании своего проекта API.

  • ID приложения
    Клиентское приложение, которое регистрируется для приема сообщений. Как это реализовано, зависит от платформы:

    • Android : используйте имя пакета из манифеста приложения.
    • iOS : используйте идентификатор пакета приложения.
    • Chrome : используйте имя расширения Chrome.
  • Регистрационный токен
    Идентификатор, выданный серверами соединений GCM, в клиентское приложение, которое позволяет ему получать сообщения. Обратите внимание, что токены регистрации должны храниться в секрете.


Поток жизненного цикла

  • Зарегистрируйтесь, чтобы включить GCM . Экземпляр клиентского приложения регистрируется для получения сообщений. Дополнительные сведения см. В разделе Регистрация приложений для клиентов .
  • Отправлять и получать сообщения с нисходящего потока .
    • Отправить сообщение. Сервер приложений отправляет сообщения в клиентское приложение:
      1. Сервер приложений отправляет сообщение на серверы подключения GCM.
      2. Сервер соединения GCM устанавливает и сохраняет сообщение, если устройство находится в автономном режиме.
      3. Когда устройство подключено к сети, сервер соединения GCM отправляет сообщение на устройство.
      4. На устройстве клиентское приложение получает сообщение в соответствии с реализацией платформы. Подробную информацию см. В документации для конкретной платформы.
    • Получите сообщение. Клиентское приложение получает сообщение с сервера соединения GCM. Подробную информацию о том, как клиентское приложение в этой среде обрабатывает полученные сообщения, см. В документации к конкретной платформе.
  • Отправлять и получать сообщения вверх . Эта функция доступна только в том случае, если вы используете сервер соединений XMPP .
    • Отправить сообщение. Клиентское приложение отправляет сообщения на сервер приложений:
      1. На устройстве клиентское приложение отправляет сообщения на сервер соединения XMPP. Подробную информацию о том, как клиентское приложение может отправлять сообщение через XMPP, см. В документации к конкретной платформе.
      2. Сервер соединения XMPP устанавливает и сохраняет сообщение, если сервер отключен.
      3. Когда сервер приложений повторно подключен, сервер соединения XMPP отправляет сообщение на сервер приложения.
    • Получите сообщение. Сервер приложения получает сообщение с сервера соединения XMPP, а затем выполняет следующие действия:
      1. Разбирает заголовок сообщения для проверки информации отправителя клиентского приложения.
      2. Отправляет «ack» на сервер соединения XMPP, чтобы подтвердить получение сообщения.
      3. Необязательно анализирует полезную нагрузку сообщения, как определено клиентским приложением.

Официальную документацию можно найти здесь .

Обработка нижестоящего сообщения в Android

Внедрите onMessageReceived , который поймает уведомление, отправленное с сервера GCM.

  @Override
  public void onMessageReceived(String from, Bundle data) {
     String message = data.getString("message");
     Log.d(TAG, "From: " + from);
     Log.d(TAG, "Message: " + message);
     // Handle received message here.
  }
 

Обработка нижестоящего сообщения в iOS

Чтобы получить уведомление, выполните application:didReceiveRemoteNotification:fetchCompletionHandler: (или application:didReceiveRemoteNotification: для iOS <8.0) и вызовите сообщение GCMService:appDidReceiveMessage:message для подтверждения приема сообщения GCM.

- (void)application:(UIApplication *)application
    didReceiveRemoteNotification:(NSDictionary *)userInfo {
  NSLog(@"Notification received: %@", userInfo);
  // This works only if the app started the GCM service
  [[GCMService sharedInstance] appDidReceiveMessage:userInfo];
  // Handle the received message
  // ...
}

- (void)application:(UIApplication *)application
    didReceiveRemoteNotification:(NSDictionary *)userInfo
    fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))handler {
  NSLog(@"Notification received: %@", userInfo);
  // This works only if the app started the GCM service
  [[GCMService sharedInstance] appDidReceiveMessage:userInfo];
  // Handle the received message
  // Invoke the completion handler passing the appropriate UIBackgroundFetchResult value
  // ...
}
 

Отправлять нисходящие сообщения из облака

Отправьте сообщение с использованием протокола сервера HTTP-протокола GCM:

  https://gcm-http.googleapis.com/gcm/send
  Content-Type:application/json
  Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA
  {
    "to": "/topics/foo-bar",
    "data": {
      "message": "This is a GCM Topic Message!",
     }
  }
 

Чтобы сделать это в Postman , вам просто нужно установить следующее ( некоторые подробности относятся к тому, что упоминалось выше ):

  1. Установить тип запроса на POST
  2. В заголовках установите следующее:
    • Content-Type = application / json
    • Авторизация = <Ваш ключ сервера GCM>
  3. Задайте параметры полезной нагрузки в Body ( в этом примере мы использовали опцию raw , см. Снимок экрана (2) )
  4. Отправьте запрос на https://gcm-http.googleapis.com/gcm/send

Скриншоты:

(1) введите описание изображения здесь

(2) введите описание изображения здесь

Обратите внимание, что запрос был успешным с сообщением message_id в ответе.

PS: Я сохраняю образец Server Key видимым, чтобы другие могли его попробовать, даже если они еще не создали проект. НО, обратите внимание, что ключ сервера всегда должен храниться в секрете.