Я пытаюсь настроить и протестировать push-уведомления с помощью Firebase Cloud Messaging (FCM) с новым API HTTP v1 через Postman. Мне нужно создать токен OAuth 2.0 для аутентификации моих запросов и отправки push-уведомлений на определенное устройство. У меня есть JSON сервисной учетной записи FCM и токен устройства. Может ли кто-нибудь помочь мне в процессе настройки в Postman, в том числе в том, как сгенерировать токен OAuth 2.0 и отформатировать запрос?
Вот подробности, которые у меня есть:
Каковы шаги по созданию токена OAuth 2.0 с использованием Python и настройке запроса Postman для отправки push-уведомления с использованием API HTTP v1 FCM?
Я считаю, что это может быть полезно другим разработчикам. Я постараюсь разбить шаги как можно проще.
Шаг 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.