Firebase Cloud Messaging

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

Firebase Cloud Messaging hero image

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

Обзор

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

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

FCM sits between the client app and an app server

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

Firebase Cloud Messaging в действии

При отправке нижестоящего сообщения клиентскому приложению с сервера приложений сервер приложений отправляет сообщение серверу подключения FCM, предоставленному Google; сервер подключения FCM, в свою очередь, перенаправит сообщение на устройство под управлением клиентского приложения. Сообщения можно отправлять по протоколу HTTP или XMPP (расширяемый протокол обмена сообщениями и присутствию). Так как клиентские приложения не всегда подключены или запущены, сервер подключения FCM включает и сохраняет сообщения, отправляя их в клиентские приложения по мере их повторного подключения и доступности. Аналогичным образом FCM будет заквещать вышестоящий сообщения от клиентского приложения к серверу приложений, если сервер приложений недоступен. Дополнительные сведения о серверах подключения FCM см. в разделе "О сервере Firebase Cloud Messaging".

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

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

  • Ключ API — ключ API предоставляет серверу приложений доступ к службам Firebase; FCM использует этот ключ для проверки подлинности сервера приложений. Эти учетные данные также называются ключом сервера или ключом веб-API. Примером ключа API является AJzbSyCTcpfRT1YRqbz-jIwp1h06YdauvewGDzk.

  • Идентификатор приложения — удостоверение клиентского приложения (независимо от любого конкретного устройства), которое регистрируется для получения сообщений от FCM. Примером идентификатора приложения является 1:415712510732:android:0e1eb7a661af2460.

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

Настройка Firebase Cloud Messaging (далее в этом руководстве) содержит подробные инструкции по созданию проекта и созданию этих учетных данных. При создании проекта в консоли Firebase создается файл учетных данных с именем google-services.json . Добавьте этот файл в проект Xamarin.Android, как описано в разделе "Удаленные уведомления" с помощью FCM.

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

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

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

App registration steps diagram

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

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

  3. Клиентское приложение (необязательно) перенаправит маркер регистрации на сервер приложений.

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

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

Подчиненные сообщения

На следующей схеме показано, как Firebase Cloud Messaging хранит и пересылает подчиненные сообщения:

FCM uses store and forward for downstream messaging

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

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

  2. Если клиентское устройство недоступно, сервер FCM сохраняет сообщение в очереди для последующей передачи. Сообщения хранятся в хранилище FCM не более 4 недель (дополнительные сведения см. в разделе "Настройка срока жизни сообщения").

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

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

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

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

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

Обмен сообщениями по темам позволяет серверу приложений отправлять сообщение нескольким устройствам, которые приняли участие в определенном разделе. Вы также можете создавать и отправлять сообщения тем с помощью графического интерфейса уведомлений консоли Firebase. FCM обрабатывает маршрутизацию и доставку сообщений тем клиентам, подписанным на подписку. Эту функцию можно использовать для таких сообщений, как оповещения о погоде, фондовые цитаты и заголовки новостей.

Topic messaging diagram

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

  1. Клиентское приложение подписывается на раздел, отправляя сообщение подписки на FCM.

  2. Сервер приложений отправляет сообщения раздела в FCM для распространения.

  3. FCM перенаправит сообщения тем клиентам, которые подписаны на этот раздел.

Дополнительные сведения о обмене сообщениями по темам Firebase см. в разделе "Обмен сообщениями" Google на Android.

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

Прежде чем использовать службы FCM в приложении, необходимо создать новый проект (или импортировать существующий проект) через консоль Firebase. Чтобы создать проект Firebase Cloud Messaging для приложения, выполните следующие действия.

  1. Войдите в консоль Firebase с помощью учетной записи Google (например, адрес Gmail) и нажмите кнопку CREATE NEW PROJECT:

    Create New Project button

    Если у вас есть существующий проект, щелкните импорт проекта Google.

  2. В диалоговом окне "Создание проекта" введите имя проекта и нажмите кнопку CREATE PROJECT. В следующем примере создается новый проект с именем XamarinFCM :

    Create a Project dialog

  3. В обзоре консоли Firebase нажмите кнопку "Добавить Firebase" в приложение Android:

    Add Firebase to your Android app

  4. На следующем экране введите имя пакета приложения. В этом примере имя пакета — com.xamarin.fcmexample. Это значение должно соответствовать имени пакета приложения Android. Псевдоним приложения также можно ввести в поле псевдонима приложения:

    Entering FCM Example as the app nickname

  5. Если приложение использует динамические ссылки, приглашения или Google Auth, необходимо также ввести сертификат подписи отладки. Дополнительные сведения о поиске сертификата подписи см. в статье "Поиск MD5 или SHA1" хранилища ключей. В этом примере сертификат подписи остается пустым.

  6. Нажмите кнопку "ДОБАВИТЬ ПРИЛОЖЕНИЕ":

    Clicking the Add App button

    Ключ API сервера и идентификатор клиента автоматически создаются для приложения. Эти сведения упакованы в файл google-services.json , который автоматически скачан при нажатии кнопки ADD APP. Не забудьте сохранить этот файл в безопасном месте.

Подробный пример добавления google-services.json в проект приложения для получения push-уведомлений FCM в Android см. в разделе "Удаленные уведомления" с помощью FCM.

Дополнительные материалы

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

  • Google Build App Server Send Requests объясняет, как отправлять сообщения с сервера приложений.

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

  • Сведения о сообщениях FCM описывают различные типы сообщений, которые можно отправлять с помощью Firebase Cloud Messaging.

Итоги

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