Используйте API FCM HTTP v1 с токенами доступа OAuth 2.

1. Введение

По сравнению с устаревшим API FCM, API FCM HTTP v1 обеспечивает более безопасную модель авторизации с использованием краткосрочных токенов доступа. Процесс генерации токена доступа для API FCM v1 существенно отличается от процесса для устаревшего API.

В этой лабораторной работе вы научитесь настраивать клиентскую и серверную части для отправки push-уведомлений в приложение Android с помощью API FCM HTTP v1. В ней подробно рассматривается ключевой этап генерации учётных данных для API v1.

Более подробную информацию можно найти по адресу:

Предпосылки

  • Базовое понимание разработки на Java и Android

Чему вы научитесь

  • Подробные шаги настройки на стороне клиента и сервера для включения отправки push-уведомлений в ваше Android-приложение с помощью API FCM HTTP v1
  • Генерация учетных данных для HTTP v1 API с использованием учетных записей служб
  • Отправка тестовых сообщений через HTTP v1 API

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

Последняя стабильная версия Android Studio

Одно из следующих устройств:

Среда разработки Java или редактор кода по вашему выбору

2. Настройка проекта Firebase и приложения для Android

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

Настройка проекта Firebase

  • Выполните «Шаг 1: Создание проекта Firebase », чтобы создать собственный проект Firebase для этой лабораторной работы.

Настройка приложения для Android

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

3. Настройте сервер приложений.

Теперь, когда ваше приложение настроено, вам нужно загрузить пример серверного кода для отправки сообщений в ваше приложение с помощью API FCM v1. Этот код загружает учётные данные API (описанные в следующем разделе) для генерации токена доступа. Затем он отправляет сообщение в ваше приложение, используя обмен сообщениями в темах FCM.

  • Импортируйте код стартового сервера, загрузив проект с Github . Проект «messaging» — это Java-проект на базе Gradle, зависящий от SDK Firebase-admin , который предоставляет функционал отправки сообщений.

Более подробную информацию о том, как сервер приложений должен работать с FCM, можно найти в документе Ваша серверная среда и FCM .

4. Получите учетные данные v1

API FCM HTTP v1 использует краткосрочные токены доступа в соответствии с моделью безопасности OAuth2. По сравнению со статическим ключом API, используемым в устаревшем API FCM, краткосрочный токен доступа менее подвержен риску утечки учётных данных. В этом разделе подробно описаны шаги по созданию учётных данных для генерации токена доступа, используемого при вызове API.

  1. Настройте учётную запись службы Firebase, чтобы Firebase Admin SDK мог авторизовать вызовы API FCM. Откройте «Настройки проекта» в консоли Firebase и выберите вкладку « Учётные записи служб» . Нажмите «Сгенерировать новый закрытый ключ» , чтобы загрузить фрагмент конфигурации. Обрезанный снимок экрана, на котором выделен фрагмент конфигурации Admin SDK компонента «Учетные записи служб» на странице настроек проекта.
  2. В загруженном проекте Github переименуйте загруженный файл в service-account.json и скопируйте его в папку messaging/ проекта.
  3. Метод getAccessToken() (показан ниже) в классе Messaging.java генерирует токен OAuth2, действительный в течение 1 часа.
private static String getAccessToken() throws IOException {
  GoogleCredentials googleCredentials = GoogleCredentials.fromStream(new FileInputStream("service-account.json")).createScoped(Arrays.asList(SCOPES));
  googleCredentials.refresh();
  return googleCredentials.getAccessToken().getTokenValue();
}
  1. Измените метод main, добавив следующую строку:
public static void main(String[] args) throws IOException {
  System.out.println(getAccessToken());
  ...
}
  1. Перейдите в каталог messageing/project в вашем терминале и введите:
./gradlew run -Pmessage=common-message

для распечатки токена OAuth2.

Более подробную информацию можно найти в разделе Авторизация отправки запросов .

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

Теперь вы готовы отправить сообщение через HTTP v1 API. Выполните следующие шаги:

  • Чтобы добавить токен доступа в заголовок HTTP-запроса:
  • Добавьте токен как значение заголовка Authorization в формате Authorization: Bearer <access_token>
  • Сделайте HTTP-запрос к API FCM v1 с помощью curl:
curl -s -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $OAuth2_token" -H "X-GFE-SSL: yes" -d  "{\"message\": {\"topic\": \"$topic_name\", \"notification\": {\"title\": \"breaking news\", \"body\": \"This is breaking news\"}}}" https://fcm.googleapis.com/v1/projects/[PROJECT_NAME]/messages:send

Указанное выше $topic_name можно найти в коде приложения Android, упомянутом в проекте Firebase и настройках приложения Android. По умолчанию это "weather" .

  • После успешной доставки сообщения на экране должно появиться уведомление, похожее на показанное на рисунке ниже:

54ae84ece22202cd.png

6. Заключение

Поздравляем! Вы успешно выполнили практическую работу по:

  • Настройте проект Firebase
  • Интеграция Firebase с приложением Android
  • Создайте учетные данные для API FCM HTTP v1
  • Отправьте сообщение в свое приложение через API FCM HTTP v1

Для изучения расширенных функций FCM полезны следующие ссылки: