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
Одно из следующих устройств:
- Физическое устройство Android, подключенное к вашему компьютеру
- Эмулятор Android (см. Запуск приложений на эмуляторе Android )
Среда разработки Java или редактор кода по вашему выбору
2. Настройка проекта Firebase и приложения для Android
По завершении практического занятия вы сможете отправлять сообщения в своё приложение с помощью Firebase Cloud Messaging. Перед этим вам необходимо создать проект Firebase. В этом практическом занятии также представлено приложение для Android с примером кода для интеграции с FCM.
Настройка проекта Firebase
- Выполните «Шаг 1: Создание проекта Firebase », чтобы создать собственный проект Firebase для этой лабораторной работы.
Настройка приложения для Android
Пример приложения для Android, представленный в этой практической работе, уже интегрирован с FCM. После запуска оно зарегистрируется на сервере FCM и подпишется на тему. На последующих этапах этой практической работы вы отправите сообщение в тему, и ваше приложение его получит.
- Загрузите пример быстрого старта Firebase Android .
- Импортируйте проект из https://github.com/firebase/quickstart-android/tree/master/messaging в Android Studio.
- Зарегистрируйте приложение в Firebase Console. Имя приложения —
com.google.firebase.quickstart.fcm
. Зарегистрируйте это приложение в своём проекте Firebase, следуя инструкциям из раздела «Шаг 2: Регистрация приложения в Firebase ». - Выполните часть 1 «Шага 3: Добавление файла конфигурации Firebase », чтобы загрузить файл
google-services.json
и добавить его в свой проект. Соберите и запустите проект.
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.
- Настройте учётную запись службы Firebase, чтобы Firebase Admin SDK мог авторизовать вызовы API FCM. Откройте «Настройки проекта» в консоли Firebase и выберите вкладку « Учётные записи служб» . Нажмите «Сгенерировать новый закрытый ключ» , чтобы загрузить фрагмент конфигурации.
- В загруженном проекте Github переименуйте загруженный файл в
service-account.json
и скопируйте его в папкуmessaging/
проекта. - Метод
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(); }
- Измените метод main, добавив следующую строку:
public static void main(String[] args) throws IOException { System.out.println(getAccessToken()); ... }
- Перейдите в каталог 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"
.
- После успешной доставки сообщения на экране должно появиться уведомление, похожее на показанное на рисунке ниже:
6. Заключение
Поздравляем! Вы успешно выполнили практическую работу по:
- Настройте проект Firebase
- Интеграция Firebase с приложением Android
- Создайте учетные данные для API FCM HTTP v1
- Отправьте сообщение в свое приложение через API FCM HTTP v1
Для изучения расширенных функций FCM полезны следующие ссылки: