Google Cloud Messaging

Предупреждение

Google не рекомендует GCM с 10 апреля 2018 года. Следующие документы и примеры проектов больше не поддерживаются. Сервер Google и клиентские API будут удалены сразу же после 29 мая 2019 г. Google рекомендует перенести приложения GCM в Firebase Cloud Messaging (FCM). Дополнительные сведения об отмене и миграции GCM см. в статье Google Deprecated Cloud Messaging.

Чтобы начать использование Firebase Cloud Messaging с Xamarin, см. статью Firebase Cloud Messaging.

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

Google Cloud Messaging logo

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

Обзор

Google Cloud Messaging (GCM) — это служба, которая обрабатывает отправку, маршрутизацию и очередь сообщений между серверными приложениями и мобильными клиентскими приложениями. Клиентское приложение — это приложение с поддержкой GCM, которое выполняется на устройстве. Сервер приложений (предоставляемый вами или вашей компанией) — это сервер с поддержкой GCM, с которым взаимодействует клиентское приложение с помощью GCM:

GCM resides between the client app and the app server

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

Google Cloud Messaging in Action

Когда подчиненные сообщения отправляются с сервера приложений в клиентское приложение, сервер приложений отправляет сообщение серверу подключения GCM; сервер подключения GCM, в свою очередь, перенаправит сообщение на устройство под управлением клиентского приложения. Сообщения можно отправлять по протоколу HTTP или XMPP (расширяемый протокол обмена сообщениями и присутствию). Так как клиентские приложения не всегда подключены или запущены, сервер подключения GCM включает и сохраняет сообщения, отправляя их в клиентские приложения по мере их повторного подключения и доступности. Аналогичным образом GCM будет закверять вышестоящий сообщения от клиентского приложения к серверу приложений, если сервер приложений недоступен.

GCM использует следующие учетные данные для идентификации сервера приложений и клиентского приложения и использует эти учетные данные для авторизации транзакций сообщений через GCM:

  • Ключ API — ключ API предоставляет серверу приложений доступ к службам Google; GCM использует этот ключ для проверки подлинности сервера приложений. Прежде чем использовать службу GCM, необходимо сначала получить ключ API из консоли разработчика Google, создав проект. Ключ API должен быть сохранен в безопасности; Дополнительные сведения о защите ключа API см . в рекомендациях по безопасному использованию ключей API.

  • Идентификатор отправителя — идентификатор отправителя авторизует сервер приложений клиентскому приложению— это уникальное число, определяющее сервер приложений, который разрешено отправлять сообщения в клиентское приложение. Идентификатор отправителя также является номером проекта; при регистрации проекта вы получите идентификатор отправителя из консоли разработчиков Google.

  • Маркер регистрации— маркер регистрации — это удостоверение GCM клиентского приложения на определенном устройстве. Маркер регистрации создается во время выполнения. Приложение получает маркер регистрации при первом регистрации в GCM во время работы на устройстве. Маркер регистрации разрешает экземпляр клиентского приложения (работающего на этом конкретном устройстве) получать сообщения от GCM.

  • Идентификатор приложения — удостоверение клиентского приложения (независимо от любого конкретного устройства), которое регистрируется для получения сообщений от GCM. В Android идентификатор приложения — это имя пакета, записанное в AndroidManifest.xml, например com.xamarin.gcmexample.

Настройка Google Cloud Messaging (далее в этом руководстве) содержит подробные инструкции по созданию проекта и созданию этих учетных данных.

В следующих разделах объясняется, как эти учетные данные используются при обмене данными клиентских приложений с серверами приложений с помощью GCM.

Регистрация с помощью GCM

Клиентское приложение, установленное на устройстве, должно сначала зарегистрировать в GCM, прежде чем будет проходить обмен сообщениями. Клиентское приложение должно выполнить шаги регистрации, показанные на следующей схеме:

App registration steps

  1. Клиентское приложение обращается к GCM для получения маркера регистрации, передав идентификатор отправителя в GCM.

  2. GCM возвращает маркер регистрации клиентскому приложению.

  3. Клиентское приложение перенаправит маркер регистрации на сервер приложений.

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

Если клиентское приложение больше не хочет получать сообщения с сервера приложений, оно может отправить запрос серверу приложений для удаления маркера регистрации. Если клиентское приложение получает сообщения о темах (описано далее в этой статье), оно может отменить подписку из раздела. Если клиентское приложение удаляется с устройства, GCM обнаруживает это и автоматически уведомляет сервер приложений о удалении маркера регистрации.

Нижестоящий обмен сообщениями

Когда сервер приложений отправляет нижестоящему сообщению клиентскому приложению, он выполняет действия, показанные на следующей схеме:

Downstream messaging store and forward diagram

  1. Сервер приложений отправляет сообщение в GCM.

  2. Если клиентское устройство недоступно, сервер GCM сохраняет сообщение в очереди для последующей передачи.

  3. Когда клиентское устройство доступно, GCM отправляет сообщение клиентскому приложению на этом устройстве.

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

В этом сценарии обмена сообщениями (где сервер приложений отправляет сообщение в одно клиентское приложение), сообщения могут быть длиной до 4 кб.

Подробные сведения (включая примеры кода) о получении подчиненных сообщений GCM в Android см. в разделе "Удаленные уведомления".

Обмен сообщениями по темам

Обмен сообщениями раздела — это тип нижестоящего обмена сообщениями, в котором сервер приложений отправляет одно сообщение нескольким устройствам клиентского приложения, которые подписываются на раздел (например, прогноз погоды). Сообщения раздела могут составлять до 2 КБ длину, а обмен сообщениями тем поддерживает до одного миллиона подписок на приложение. Если GCM используется только для обмена сообщениями в разделах, клиентское приложение не требуется для отправки маркера регистрации на сервер приложений.

Групповые сообщения

Групповые сообщения — это тип подчиненных сообщений, в которых сервер приложений отправляет одно сообщение нескольким устройствам клиентского приложения, принадлежащим группе (например, группе устройств, принадлежащих одному пользователю). Групповые сообщения могут содержать до 2 КБ длину для устройств iOS и до 4 КБ длину для устройств Android. Группа ограничена не более 20 членами.

Вышестоящий обмен сообщениями

Если клиентское приложение подключается к серверу, поддерживающему XMPP, оно может отправлять сообщения обратно на сервер приложений, как показано на следующей схеме:

Upstream messaging diagram

  1. Клиентское приложение отправляет сообщение серверу подключения GCM XMPP.

  2. Если сервер приложений отключен, сервер GCM сохраняет сообщение в очереди для последующей пересылки.

  3. При повторном подключении сервера приложений GCM перенаправит сообщение на сервер приложений.

  4. Сервер приложений анализирует сообщение для проверки удостоверения клиентского приложения, а затем отправляет "ack" в GCM, чтобы подтвердить получение сообщения.

  5. Сервер приложений обрабатывает сообщение.

Upstream Messages Google объясняет, как структурировать закодированные в формате JSON сообщения и отправлять их на серверы приложений, на которые запущен сервер Cloud Подключение ion на основе Google на основе XMPP.

Настройка Google Cloud Messaging

Прежде чем использовать службы GCM в приложении, необходимо сначала получить учетные данные для доступа к серверам GCM Google. В следующих разделах описаны шаги, необходимые для выполнения этого процесса:

Включение служб Google для приложения

  1. Войдите в консоль разработчиков Google с помощью учетной записи Google (например, ваш адрес gmail) и создайте проект. Если у вас есть существующий проект, выберите проект с поддержкой GCM. В следующем примере создается новый проект с именем XamarinGCM :

    Creating XamarinGCM project

  2. Затем введите имя пакета для приложения (в этом примере имя пакета — com.xamarin.gcmexample) и нажмите кнопку "Продолжить выбор и настройка служб":

    Entering the package name

    Обратите внимание, что это имя пакета также является идентификатором приложения для приложения.

  3. В разделе "Выбор и настройка служб" перечислены службы Google, которые можно добавить в приложение. Щелкните Cloud Messaging:

    Choose Cloud Messaging

  4. Затем нажмите кнопку ENABLE GOOGLE CLOUD MESSAGING:

    Enable Google Cloud Messaging

  5. Ключ API сервера и идентификатор отправителя создаются для приложения. Запишите эти значения и нажмите кнопку CLOSE:

    Server API Key and Sender ID displayed

    Защита ключа API — он не предназначен для общедоступного использования. Если ключ API скомпрометирован, несанкционированные серверы могут публиковать сообщения в клиентских приложениях. Рекомендации по безопасному использованию ключей API содержат полезные рекомендации по защите ключа API.

Просмотр Параметры проекта

Параметры проекта можно просматривать в любое время, войдите в Google Cloud Console и выбрав проект. Например, можно просмотреть идентификатор отправителя, выбрав проект в раскрывающемся меню в верхней части страницы (в этом примере проект называется XamarinGCM). Идентификатор отправителя — это номер проекта, как показано на этом снимке экрана (идентификатор отправителя здесь 9349932736):

Viewing the Sender ID

Чтобы просмотреть ключ API, щелкните диспетчер API и нажмите кнопку "Учетные данные".

Viewing the API key

Дополнительные сведения

  • RFC 6120 и RFC 6121 объясняют и определяют расширяемый протокол обмена сообщениями и присутствия (XMPP).

Итоги

В этой статье представлен обзор Google Cloud Messaging (GCM). Он объяснил различные учетные данные, используемые для идентификации и авторизации обмена сообщениями между серверами приложений и клиентскими приложениями. Он иллюстрировал наиболее распространенные сценарии обмена сообщениями, а также подробно описаны шаги по регистрации приложения в GCM для использования служб GCM.