Ваше первое многоадресное push-сообщение с использованием тем FCM

1. Введение

Цели

В этой лабораторной работе вы узнаете, как настроить ваше мультиплатформенное приложение, чтобы вы могли многоадресно отправлять push-сообщения различным подгруппам экземпляров вашего приложения, используя темы FCM.

После завершения вы сможете использовать инфраструктуру FCM для управления этими подгруппами, а также для многоадресной рассылки push-сообщений по подгруппам.

Обзор тем

Темы — это поддерживаемый инфраструктурой FCM способ передачи сообщений подгруппам экземпляров вашего приложения.

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

Темы должны использоваться для общедоступного контента. Например, сообщения об обновлениях погоды. Если вы хотите отправлять конфиденциальные сообщения, используйте Firebase Admin SDK для многоадресной рассылки сообщений на несколько устройств .

Многоадресная рассылка на основе тем оптимизирована для пропускной способности.

Что вы узнаете

  • Как подписывать (и отписывать) пользователей на темы из мобильного приложения.
  • Как отправлять многоадресные push-сообщения с помощью тем.
  • Как отправлять сообщения в комбинации тем, используя условия темы.
  • Как управлять подписками на темы на стороне сервера и делать массовые подписки и отписки.

Что вы будете строить

  • Android-приложение, которое подписывается/отписывается на темы и получает сообщения при отправке в темы.
  • Интеграция на стороне сервера с использованием Firebase Admin SDK, который будет использоваться для отправки тематических сообщений через API FCM.

Что вам понадобится

  • Браузер на ваш выбор, например Chrome.
  • IntelliJ IDEA IDE для разработки Java-приложений.
    • Обязательно включите поддержку Gradle при установке.
  • Android Studio IDE для разработки приложений для Android.
  • Устройство для запуска приложения Android. Любой из:
    • Эмулятор Android. (Требуется установка в Android Studio ).
    • Физическое устройство Android, подключенное к вашему компьютеру и переведенное в режим разработчика.
  • Аккаунт Google для создания и управления вашим проектом Firebase.

2. Настройка

Получить код

Клонируйте репозиторий GitHub из командной строки:

git clone https://github.com/firebase/quickstart-android.git fcm-codelab

Пример кода будет клонирован в fcm-codelab .

cd fcm-codelab

Стартовое приложение для этой лаборатории кода находится в каталоге messaging fcm-topics-codelab . Выполните следующие шаги, чтобы получить стартовый код. Он содержит два каталога StockNewsApp и StockNewsServer . Первый содержит начальное приложение для Android, а второй — начальный серверный код.

git checkout fcm-topics-codelab
cd messaging/fcm-topics-codelab/starter

Завершенная версия этой кодовой лаборатории находится в messaging/fcm-topics-codelab/completed .

Создайте проект Firebase

  1. В консоли Firebase нажмите « Добавить проект» , назовите проект Firebase StockNews и нажмите «Продолжить». Примечание. Запомните идентификатор проекта для вашего проекта Firebase (или щелкните значок « Изменить », чтобы указать предпочтительный идентификатор проекта).

fc08f9a7808e4553.png

  1. Вы можете пропустить включение Google Analytics. Для целей этой кодлабы он вам не нужен. Нажмите «Продолжить».
  2. Щелкните Создать проект .

Поздравляем! Вы только что создали свой проект Firebase. Теперь вы можете нажать на название проекта, чтобы войти в консоль.

3. Конфигурация приложения Firebase для конкретной платформы

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

  • Зарегистрируйте нужную платформу в проекте Firebase.
  • Загрузите файл конфигурации для конкретной платформы и добавьте его в код.

Для целей этой кодовой лаборатории мы собираемся добавить приложение Android Firebase.

84e0b3199bef6d8a.png Настроить Android

  1. В консоли Firebase выберите «Настройки проекта» в верхней части левой панели навигации в шестеренке «Настройки» и щелкните значок Android в разделе « Ваши приложения » на странице « Общие ».

Вы должны увидеть следующий диалог: 8254fc299e82f528.png

  1. Важным значением, которое необходимо указать, является имя пакета Android . Установите его на com.ticker.stocknews .
    1. Указанное здесь имя пакета должно совпадать с именем, указанным в AndroidManifest.xml вашего начального кода StockNewsApp . Если вы хотите найти или изменить его, выполните следующие действия:
      1. В каталоге StockNewsApp откройте файл app/src/main/AndroidManifest.xml .
      2. В элементе manifest найдите строковое значение атрибута package . Это значение является именем пакета Android.
  1. В диалоговом окне Firebase вставьте скопированное имя пакета в поле имени пакета Android .
  2. Вам не нужен сертификат подписи отладки SHA-1 для этой лаборатории кода, потому что это приложение не будет выпущено. Оставьте это поле пустым.
  3. Щелкните Зарегистрировать приложение .
  4. Продолжая в Firebase Console, следуйте инструкциям по загрузке файла конфигурации google-services.json .
  5. Вы можете пропустить оставшиеся шаги настройки, так как все остальное уже настроено в коде начального приложения. Вы найдете свое приложение в списке на главной странице Firebase Console.
  6. Скопируйте только что загруженный файл google-services.json в папку messaging/fcm-topics-codelab/starter/StockNewsApp/app .

4. Создайте и запустите свое приложение

Вы готовы начать работу над своим приложением! Сначала создайте и запустите приложение.

Импортировать стартовое приложение

Запустите Android Studio и импортируйте messaging/fcm-topics-codelab/starter/StockNewsApp из каталога начального кода.

После загрузки проекта вы также можете увидеть предупреждение о том, что Git не отслеживает все ваши локальные изменения, вы можете нажать « Игнорировать » или « X » в правом верхнем углу. (Вы не будете отправлять какие-либо изменения обратно в репозиторий Git.)

В верхнем левом углу окна проекта вы должны увидеть что-то вроде изображения ниже, если вы находитесь в представлении Android . (Если вы находитесь в представлении « Проект» , вам нужно будет развернуть проект, чтобы увидеть то же самое)

b574ea0089ee87c6.png

Обратите внимание, что Android Studio может потребоваться несколько секунд для компиляции проекта в фоновом режиме в первый раз. В это время вы увидите счетчик в строке состояния в нижней части Android Studio:

4bc64eb3b99eb0ae.png

Мы рекомендуем вам подождать, пока это не завершится, прежде чем вносить изменения в код. Это позволит Android Studio использовать все необходимые компоненты.

Кроме того, если вы получите сообщение «Перезагрузить, чтобы изменения языка вступили в силу?» или что-то подобное, выберите «Да».

Настройка эмулятора

Если вам нужна помощь в настройке эмулятора Android, обратитесь к статье Запустите свое приложение .

Понять стартовый код приложения для Android

  • Стартовый код представляет собой легкое приложение для Android с минимальной функциональностью и пользовательским интерфейсом.
  • Зависимость от Firebase-messaging SDK уже добавлена ​​в файл app/build.gradle .

f04ff8f48d186dff.png

  • В AndroidManifest.xml уже добавлен обработчик обратного вызова MESSAGING_EVENT .
    • Этот обработчик, StockNewsMessagingService.java , расширяет класс FirebaseMessagingService , который предоставляет различные функции, связанные с Firebase Cloud Messaging. См. документацию FirebaseMessagingService , чтобы узнать больше. b843c4d33ee53166.png
    88fad1960f4a6ff5.png
    • Функция onNewToken при создании или обновлении токена регистрации FCM. Дополнительную информацию см. в разделе Генерация токена мониторинга .
    • Функция onMessageReceived , когда сообщение получено, а приложение находится на переднем плане. В настоящее время он просто регистрирует полученное сообщение.
  • Кроме того, в AndroidManifest.xml также предоставляется класс Android- Application с именем StockNewsApplication . a4982a8731492dfc.pngccde692f7f68dc5a.png
    • Этот класс будет первым, который будет создан при запуске приложения.
    • В StockNewsApplication класса onCreate добавлен вызов создания токена регистрации FCM. Он сгенерирует действительный токен регистрации FCM и зарегистрирует его.
  • MainActivity.java добавляет RecyclerView , который отображает выбор категорий акций.
  • SubscriptionAdapter.java реализует RecyclerView.Adapter , который рисует экран выбора категории акций.
    • У каждой категории акций есть название и переключатель подписки рядом с ним.
    • Изменение переключателя должно привести к вызову подписки/отписки темы FCM.
    • Вы реализуете эти вызовы в следующих разделах.
  • Класс model/StockCategories.java содержит список всех категорий акций и связанных с ними названий тем.

b32663ec4e865a18.png

Запустите стартовое приложение

  1. Подключите Android-устройство к компьютеру или запустите эмулятор.
  2. На верхней панели инструментов выберите целевое устройство Android или эмулятор и нажмите кнопку запуска.

5b27fc5b237e06b9.png

  1. Пользовательский интерфейс приложения будет выглядеть следующим образом:

ff5b1a1c53231c54.png

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

927eb66bc909f36b.png

5. Отправьте тестовое сообщение

Теперь вы готовы отправить тестовое сообщение в экземпляр приложения, который вы настроили на последнем шаге.

Импортируйте код стартового сервера

Запустите IntelliJ IDEA и откройте проект messaging/fcm-topics-codelab/starter/StockNewsServer .

Представление проекта на левой панели навигации должно выглядеть примерно так:

da20711f6527dff6.png

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

Понять стартовый код сервера

  • Стартовый код сервера представляет собой Java-проект на основе Gradle.
  • В файл build.gradle уже добавлена ​​зависимость от SDK firebase-admin . Этот SDK предоставляет доступ к различным функциям отправки сообщений FCM.

650fc733298588f8.png

  • Наконец, есть два класса, а именно:
    • FcmSender.java : этот класс содержит следующие примечательные методы:
      • initFirebaseSDK : инициализирует SDK firebase-admin.
      • sendMessageToFcmRegistrationToken : отправить сообщение на токен регистрации FCM.
      • sendMessageToFcmTopic : отправить сообщение в тему FCM.
      • sendMessageToFcmTopicCondition : отправить сообщение в условие темы FCM.
    • FcmSubscriptionManager.java : этот класс содержит методы, позволяющие управлять подписками на темы со стороны сервера.
      • initFirebaseSDK : инициализирует SDK firebase-admin.
      • subscribeFcmRegistrationTokensToTopic : подпишите регистрационные токены FCM на тему FCM.
      • unsubscribeFcmRegistrationTokensFromTopic : отписать регистрационные токены FCM от темы FCM.

Настройка кода сервера

  1. Во-первых, нам нужно настроить учетную запись службы Firebase, которая позволяет SDK firebase-admin авторизовать вызовы API FCM.
    1. Перейдите в консоль Firebase, щелкните значок шестеренки рядом с Обзором проекта на левой панели навигации и выберите Настройки проекта . 8c2108d4d7c915e9.png
    2. На странице настроек выберите Сервисные учетные записи и нажмите Создать сервисную учетную запись . 84b128cc5dac0a85.png
    3. Теперь нажмите кнопку « Создать новый закрытый ключ », и начнется автоматическая загрузка файла вашего ключа.
    4. Переименуйте файл ключа в service-account.json и скопируйте его в messaging/fcm-topics-codelab/starter/StockNewsServer/src/main/resources .
    5. И FcmSender.java и FcmSubscriptionManager.java загружают файл service-account.json из пути к классам, используя следующий код. 8dffbee658e0bdd.png
  2. На этом серверный код готов. Запустите Build -> Build Project из верхней строки меню.

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

  1. В FcmSender.java найдите функцию sendMessageToFcmRegistrationToken и вставьте токен registrationToken FCM, скопированный из раздела « Запуск начального приложения », в поле RegistrationToken.
  2. В main функции раскомментируйте только функцию sendMessageToFcmRegistrationToken и нажмите «Выполнить», чтобы выполнить код.
    1. Обратите внимание, как токен регистрации FCM устанавливается в поле Token объекта message .
    2. Кроме того, обратите внимание, как мы использовали API send интерфейса FirebaseMessaging .

52e4a3ec3f816473.png

  1. Это должно отправить сообщение экземпляру приложения, которое вы настроили на предыдущем шаге.
  2. Когда экземпляр приложения находится на переднем плане, вы должны увидеть содержимое сообщения в журнале.

d3540ec1089f97dd.png

  1. И когда экземпляр приложения находится в фоновом режиме, вы увидите, что сообщение появляется в области уведомлений.

31203deca59c03fe.png

Отлично, вы использовали Firebase Admin SDK для отправки сообщений экземпляру приложения. Узнайте больше об использовании Firebase Admin SDK на вашем сервере .

6. Реализуйте подписку на тему / отписку

На этом этапе вы будете реализовывать действия по подписке и отмене подписки на тему с помощью переключателя «Категория акций» в приложении для Android.

Когда пользователь приложения переключает переключатель для определенной категории акций, будет сделан запрос на подписку или отказ от подписки.

Код проверки

  • Перейдите к классу SubscriptionAdapter.java в коде приложения для Android и найдите класс RecyclerViewViewHolder .

6c0614199e684f6.png

  • Конструктор класса настраивает прослушиватель для переключателя подписки с помощью setOnCheckedChangeListener .
  • В зависимости от переключателя действия подписки и отмены подписки выполняются путем вызова методов subscribeToStockCategory и unsubscribeFromStockCategory соответственно.
  • Метод setData onBindViewHolder адаптера RecyclerView для привязки ViewHolder к соответствующей категории акций.

Реализовать подписку на тему

  1. В методе subscribeToStockCategory вы реализуете вызов API-интерфейса subscribeToTopic объекта FirebaseMessaging . Код может выглядеть примерно так:
   void subscribeToStockCategory() {
      // Making call to FCM for subscribing to the topic for stockCategory
     FirebaseMessaging.getInstance().subscribeToTopic(stockCategory.getTopicName()).addOnSuccessListener(
          unused -> {
            // Subscribing action successful
            Log.i(TAG, "Subscribed to topic: " + stockCategory.getTopicName());
            Toast.makeText(itemView.getContext(), "Subscribed to " + stockCategory.getCategoryName(),
                Toast.LENGTH_SHORT).show();
          });
    }

Реализовать отписку темы

  1. Точно так же в условии else вы реализуете вызов API-интерфейса unsubscribeFromTopic . Что-то вроде следующего:
void unsubscribeFromStockCategory() {
      // Making call to FCM for unsubscribing from the topic for stockCategory
      FirebaseMessaging.getInstance().unsubscribeFromTopic(stockCategory.getTopicName())
          .addOnSuccessListener(unused -> {
            // Unsubscribing action successful
            Log.i(TAG, "Unsubscribed from topic: " + stockCategory.getTopicName());
            Toast.makeText(itemView.getContext(), "Unsubscribed from " + stockCategory.getCategoryName(),
                Toast.LENGTH_SHORT).show();
          });
    }

Давайте попробуем

  1. Запустите приложение и переключите параметры категории акций, чтобы выполнить действия «Подписаться» и «Отписаться». Это будет выглядеть примерно так:

Подписывайся

Отписаться

7. Отправка вашего первого сообщения в теме

На этом шаге вы реализуете код на стороне сервера для отправки сообщения темы FCM.

Реализовать интеграцию на стороне сервера для отправки тематического сообщения

  1. В коде сервера перейдите к FcmSender.java и найдите метод с именем sendMessageToFcmTopic .

56381dd1b40cde9c.png

  1. В первой строке укажите тему FCM, в которую вы хотите отправить сообщение.
    • Это строка вида: /topics/<Topic Name> . Например, /topics/Technology .
  2. В следующих строках создайте новый объект message (аналогичный тому, который определен в функции sendMessageToFcmRegistrationToken ).
    • Разница будет заключаться в том, что вместо установки поля Token объекта message вы зададите поле Topic .
Message message = Message.builder()
        .putData("FOOTECH", "$1000")
        .setNotification(
            Notification.builder()
                .setTitle("Investor confidence in Tech Stocks growing")
                .setBody("Foo Tech leading the way in stock growth for Tech sector.")
                .build())
        .setTopic(topicName)
        .build();
  1. Теперь добавьте вызов экземпляра FirebaseMessaging для отправки сообщения (идентичный вызову отправки, сделанному в функции sendMessageToFcmRegistrationToken ).
FirebaseMessaging.getInstance().send(message);
  1. Наконец, обновите main функцию и разрешите вызов только функции sendMessageToFcmTopic .

9a6aa08dd7c28898.png

Отправить сообщение и подтвердить получение

  1. Перед отправкой сообщения темы сначала убедитесь, что экземпляр вашего приложения подписан на тему, в которую вы хотите отправить сообщение.
    1. Это можно сделать с помощью соответствующего переключателя. Например:
    4668247408377712.png
  2. Теперь вы можете отправить свое тематическое сообщение, выполнив main функцию FcmSender.java .
  3. Как и раньше, вы должны иметь возможность наблюдать получение сообщения в экземпляре приложения.
    1. Экземпляр приложения на переднем плане
    c144721399f610fe.png
    1. Экземпляр приложения в фоновом режиме
    44efc7dfd57e8e9a.png
  4. Бонус: попробуйте отписаться от темы, в которую вы отправили сообщение, и повторно отправить сообщение. Вы заметите, что сообщение не доставляется экземпляру приложения.

8. Отправка вашего первого сообщения о состоянии темы

Функция условия темы позволяет отправлять сообщения в комбинации тем, что позволяет дать более выразительное определение аудитории.

Например, в нашем приложении StockNews рассмотрите возможность отправки сообщений группе экземпляров приложения, которые подписаны на темы «Технологии» или «Автомобилестроение». Такой случай может произойти, например, в случае значимого события, связанного с Waymo.

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

  • && : логическое И. Например, 'Technology' in topics && 'Automotive' in topics — нацелены только на экземпляры приложений, которые подписаны как на технологии, так и на автомобильные темы.
  • || : Логическое ИЛИ. Например, 'Technology' in topics || 'Automotive' in topics . Нацелены на экземпляры приложений, которые подписаны на темы «Технологии» или «Автомобилестроение».
  • () : скобки для группировки. Например, 'Technology' in topics && ('Automotive' in topics || 'Energy' in topics) — нацелены только на экземпляры приложений, которые подписаны на темы «Технологии» и либо «Автомобили», либо «Энергетика».

Узнайте больше о том, как создавать запросы на отправку для использования этого функционала.

Реализовать интеграцию на стороне сервера для отправки сообщения о состоянии темы.

  1. Вернитесь в код сервера, перейдите в FcmSender.java и найдите метод с именем sendMessageToFcmTopicCondition .

3719a86c274522cf.png

  1. В первой строке для переменной topicCondition условие темы, в которую вы хотите отправить сообщение. Вы можете выбрать: 'Technology' in topics && 'Automotive' in topics .
  2. В следующих строках создайте новый объект message (аналогичный тому, который определен в функции sendMessageToFcmTopic ).
    1. Разница будет заключаться в том, что вместо установки поля « Topic » объекта вы зададите поле « Condition ».
    Message message = Message.builder()
        .putData("FOOCAR", "$500")
        .setNotification(
            Notification.builder()
                .setTitle("Foo Car shows strong Q2 results")
                .setBody("Foo Car crosses 1B miles. Stocks rally.")
                .build())
        .setCondition(topicCondition)
        .build();
  1. Теперь добавьте вызов экземпляра FirebaseMessaging для отправки сообщения (идентичный вызову отправки, сделанному в функции sendMessageToFcmTopic ).
FirebaseMessaging.getInstance().send(message);
  1. Наконец, обновите main функцию и разрешите вызов только функции sendMessageToFcmTopicCondition .

db9588d40d2a0da6.png

Отправьте сообщение и подтвердите получение

  1. Перед отправкой сообщения темы сначала убедитесь, что экземпляр вашего приложения удовлетворяет указанному условию темы, подписавшись на экземпляр приложения как на тему "Технологии", так и на темы "Автомобилестроение".
  2. Теперь вы можете отправить свое тематическое сообщение, выполнив main функцию FcmSender.java .
  3. Как и раньше, вы должны иметь возможность наблюдать за получением сообщения в экземпляре приложения.
    1. Экземпляр приложения на переднем плане
    6f612ace15aa6515.png
    1. Экземпляр приложения в фоновом режиме
    78044a56ac2359cb.png
  4. Бонус: теперь вы можете отказаться от подписки на тему «Технологии» и повторно отправить сообщение о состоянии темы. Вы должны заметить, что сообщение не получено экземпляром приложения.

9. Резюме

Давайте сделаем краткий обзор того, что вы узнали к этому моменту.

  • Как инициировать подписку/отмену подписки на тему из экземпляра приложения.
  • Отправка сообщения в тему и проверка получения подписанных экземпляров приложения.
  • Отправка сообщения в тему Условие и проверка получения экземпляра приложения, удовлетворяющего условию.

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

c0dc20655d392690.gif

10. Управляйте подписками на темы со стороны сервера

До сих пор в этой кодовой лаборатории все вызовы подписки и отмены подписки инициировались из экземпляра приложения.

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

В этом разделе вы узнаете, как использовать Firebase Admin SDK для подписки и отмены подписки на пакет токенов регистрации FCM в теме, совершая вызовы со стороны сервера.

Реализовать серверную подписку регистрационных токенов FCM на тему FCM.

  1. В коде сервера перейдите в класс FcmSubscriptionManager.java . Найдите метод с именем subscribeFcmRegistrationTokensToTopic . Здесь вы реализуете вызов API subscribeToTopic .

5d5709e7b3cbcb04.png

  1. Давайте подпишем экземпляр приложения на тему Energy. Для этого сначала укажите данные для следующих двух полей:
    1. RegistrationTokens : разделенный запятыми список строк, представляющих токены registrationTokens FCM, для которых вы хотите создать подписку на тему.
    2. topicName : название темы для темы Energy, т.е. /topics/Energy .
  2. В следующих нескольких строках реализуйте вызов в следующих строках:
TopicManagementResponse response = FirebaseMessaging.getInstance().subscribeToTopic(
        registrationTokens, topicName);
  1. Вы можете TopicManagementResponse для получения некоторой статистики результатов высокого уровня. Например, вывод количества успешно созданных подписок на темы с помощью getSuccessCount .
System.out.printf("Num tokens successfully subscribed %d", response.getSuccessCount());
  1. Наконец, в main функции включите вызовы только функции subscribeFcmRegistrationTokensToTopic .

Создать подписку и отправить сообщение темы

  1. На этом этапе вы готовы создать подписку на тему и отправить в нее сообщение.
  2. Выполнение main функции класса FcmSubscriptionManager.java . Это создаст подписку на тему.
  3. Теперь настройте код для отправки сообщения. Как и прежде,
    1. В FcmSender.java найдите функцию sendMessageToFcmTopic .
    2. Задайте для параметра topicName значение темы Energy, т. е. /topics/Energy .
    3. Создайте объект Message и нацельте его на тему с помощью setTopic .
    4. Наконец, обновите main метод, чтобы включить только функцию sendMessageToFcmTopic .
  4. Выполнение main функции FcmSender.java . Это отправит сообщение в экземпляр вашего приложения, и вы сможете наблюдать его в своем приложении следующим образом.
    1. Экземпляр приложения на переднем плане
    40ab6cf71e0e4116.png
    1. Экземпляр приложения в фоновом режиме
    8fba81037198209e.png

Реализовать отмену подписки на регистрационные токены FCM на стороне сервера в разделе FCM.

  1. Для отказа от подписки на темы на стороне сервера используйте этот API-интерфейс unsubscribeFromTopic . Вы добавите соответствующий код для отмены unsubscribeFcmRegistrationTokensFromTopic на функцию FcmSubscriptionManager.java класса FcmSubscriptionManager.java.

8d9e8ea9d34016bd.png

  1. Внедрение кода отказа от подписки на стороне сервера и проверка его действия путем отправки сообщения в тему остается вам в качестве упражнения.

11. Поздравления

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

947def3eb33b1e4a.gif

Что дальше?

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

Справочные документы