Как настроить и протестировать push-уведомления Firebase Cloud Messaging (FCM) с помощью API HTTP v1 с помощью Postman?

Я пытаюсь настроить и протестировать push-уведомления с помощью Firebase Cloud Messaging (FCM) с новым API HTTP v1 через Postman. Мне нужно создать токен OAuth 2.0 для аутентификации моих запросов и отправки push-уведомлений на определенное устройство. У меня есть JSON сервисной учетной записи FCM и токен устройства. Может ли кто-нибудь помочь мне в процессе настройки в Postman, в том числе в том, как сгенерировать токен OAuth 2.0 и отформатировать запрос?

Вот подробности, которые у меня есть:

  • JSON-файл сервисного аккаунта из Firebase
  • Токен устройства для целевого устройства
  • Почтальон для выполнения HTTP-запросов

Каковы шаги по созданию токена OAuth 2.0 с использованием Python и настройке запроса Postman для отправки push-уведомления с использованием API HTTP v1 FCM?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
392
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я считаю, что это может быть полезно другим разработчикам. Я постараюсь разбить шаги как можно проще.

Шаг 1. Загрузите закрытый ключ Firebase

Консоль Firebase => Настройки проекта => Учетные записи служб => Создать новый закрытый ключ

Шаг 2. Создайте токен OAuth 2.0, используя учетные данные учетной записи службы FCM. Вы можете украсть Python, чтобы сгенерировать его.

  import json
  import jwt
  import time
  import requests  # This requires the `requests` library

  # Load the service account key JSON file
  with open('path_to_your_service_account.json', 'r') as f:
      service_account = json.load(f)

  # Define the JWT payload
  payload = {
      'iss': service_account['client_email'],
      'sub': service_account['client_email'],
      'aud': 'https://oauth2.googleapis.com/token',
      'iat': int(time.time()),
      'exp': int(time.time()) + 3600,
      'scope': 'https://www.googleapis.com/auth/firebase.messaging'
  }

  # Encode the JWT
  encoded_jwt = jwt.encode(payload, service_account['private_key'], algorithm='RS256')

  # Request an OAuth 2.0 token
  response = requests.post('https://oauth2.googleapis.com/token', data = {
      'grant_type': 'urn:ietf:params:oauth:grant-type:jwt-bearer',
      'assertion': encoded_jwt
  })

  oauth2_token = response.json()['access_token']
  print(oauth_token)

если вы получите эту ошибку

Алгоритм «RS256» не найден. У вас установлена ​​криптография?

обязательно запустите pip install cryptography, это установит пакет шифрования на ваш компьютер.

Отчет о печати будет иметь формат ya29.ElqKBGN2Ri_Uz...HnS_uNreA это токен Oauth 2.0.

Шаг 3. Конфигурация почтальона. Подключите токен, который вы нашли, в конфигурацию почтальона.

вы можете получить идентификатор своего проекта по URL-адресу проекта Firebase

Method: POST
URL: https://fcm.googleapis.com/v1/projects/YOUR_PROJECT_ID/messages:send
Headers:
Content-Type: application/json
Authorization: Bearer {oauth2_token}

Тело уведомления

  "message": {
    "token": "DEVICE_REGISTRATION_TOKEN",
    "notification": {
      "title": "Test Notification",
      "body": "This is a test message from Postman."
    }
  }
}

В вашем проекте Flutter создайте новый файл и добавьте этот код:

import 'dart:convert';
import 'package:firebase_admin_sdk/firebase_admin_sdk.dart';
import 'package:http/http.dart' as http;

Future<String> getOAuthToken() async {
  final serviceAccount = ServiceAccount.fromJson(
    json.decode(await rootBundle.loadString('path/to/service-account.json')),
  );
  final credentials = GoogleCredentials.fromServiceAccount(serviceAccount);
  final accessToken = await credentials.tokenInfo.accessToken;
  return accessToken.toString();
}

Замените «path/to/service-account.json» фактическим путем к JSON-файлу вашего сервисного аккаунта Firebase. Вызовите функцию getOAuthToken(), чтобы получить токен доступа OAuth 2.0. Создайте новый запрос в Postman и установите тип запроса «POST». В URL-адресе запроса введите: https://fcm.googleapis.com/v1/projects/{YOUR_PROJECT_ID}/messages:send Замените {YOUR_PROJECT_ID} на идентификатор вашего проекта Firebase, который вы можете найти в консоли Firebase. На вкладке «Заголовки» добавьте следующие пары «ключ-значение»: Тип контента: приложение/json Авторизация: носитель {YOUR_ACCESS_TOKEN} Замените {YOUR_ACCESS_TOKEN} токеном доступа, который вы создали на предыдущем шаге. На вкладке «Тело» выберите «raw» и «JSON» в качестве типа данных. Затем введите следующую полезную нагрузку JSON:

{
  "message": {
    "token": "{DEVICE_TOKEN}",
    "notification": {
      "title": "Test Notification",
      "body": "This is a test push notification."
    }
  }
}

Замените {DEVICE_TOKEN} имеющимся у вас токеном целевого устройства. Нажмите кнопку «Отправить» в Postman, чтобы выполнить запрос и отправить push-уведомление. Вы должны увидеть ответ от API FCM, указывающий, было ли успешно доставлено push-уведомление. Вот полный код Flutter для создания токена доступа OAuth 2.0 и отправки push-уведомления:

import 'dart:convert';
import 'package:firebase_admin_sdk/firebase_admin_sdk.dart';
import 'package:http/http.dart' as http;

Future<void> sendPushNotification() async {
  final accessToken = await getOAuthToken();

  final url = Uri.parse('https://fcm.googleapis.com/v1/projects/{YOUR_PROJECT_ID}/messages:send');
  final headers = {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer $accessToken',
  };
  final body = jsonEncode({
    'message': {
      'token': '{DEVICE_TOKEN}',
      'notification': {
        'title': 'Test Notification',
        'body': 'This is a test push notification.',
      },
    },
  });

  final response = await http.post(url, headers: headers, body: body);
  if (response.statusCode == 200) {
    print('Push notification sent successfully');
  } else {
    print('Failed to send push notification: ${response.statusCode} - ${response.body}');
  }
}

Future<String> getOAuthToken() async {
  final serviceAccount = ServiceAccount.fromJson(
    json.decode(await rootBundle.loadString('path/to/service-account.json')),
  );
  final credentials = GoogleCredentials.fromServiceAccount(serviceAccount);
  final accessToken = await credentials.tokenInfo.accessToken;
  return accessToken.toString();
}

Не забудьте заменить следующие заполнители: {YOUR_PROJECT_ID}: идентификатор вашего проекта Firebase. {DEVICE_TOKEN}: токен целевого устройства. 'path/to/service-account.json': фактический путь к JSON-файлу вашей учетной записи службы Firebase.

Другие вопросы по теме