Отправьте сообщение с помощью FCM HTTP v1 API

Используя API FCM HTTP v1 , вы можете формировать запросы сообщений и отправлять их следующим типам получателей:

  • Название темы
  • Состояние
  • токен регистрации устройства
  • Название группы устройств (только для протокола)

Вы можете отправлять сообщения с полезной нагрузкой уведомления, состоящей из предопределенных полей, с полезной нагрузкой данных, состоящей из ваших собственных пользовательских полей, или с сообщением, содержащим оба типа полезной нагрузки. Дополнительную информацию см. в разделе «Типы сообщений» .

Авторизация отправки HTTP-запросов версии 1.

В зависимости от особенностей вашей серверной среды, используйте комбинацию следующих стратегий для авторизации запросов к сервисам Firebase:

  • Учетные данные приложения Google по умолчанию (ADC)
  • JSON-файл учетной записи службы
  • Кратковременный токен доступа OAuth 2.0, полученный из учетной записи службы.

Если ваше приложение работает на Compute Engine , Google Kubernetes Engine , App Engine или Cloud Functions (включая Cloud Functions for Firebase ), используйте учетные данные приложения по умолчанию (ADC). ADC использует вашу существующую учетную запись службы по умолчанию для получения учетных данных для авторизации запросов, а также обеспечивает гибкое локальное тестирование с помощью переменной среды GOOGLE_APPLICATION_CREDENTIALS . Для полной автоматизации процесса авторизации используйте ADC вместе с серверными библиотеками Admin SDK.

Если ваше приложение работает в среде, отличной от серверной среды Google , вам потребуется загрузить JSON-файл учетной записи службы из вашего проекта Firebase. Если у вас есть доступ к файловой системе, содержащей файл закрытого ключа, вы можете использовать переменную среды GOOGLE_APPLICATION_CREDENTIALS для авторизации запросов с использованием этих учетных данных, полученных вручную. Если у вас нет доступа к такому файлу, вам необходимо ссылаться на файл учетной записи службы в вашем коде — что следует делать с особой осторожностью из-за риска раскрытия ваших учетных данных.

Предоставьте учетные данные с помощью ADC.

Проверка учетных данных по умолчанию в приложении Google (ADC) выполняется в следующем порядке:

  1. ADC проверяет, установлена ​​ли переменная среды GOOGLE_APPLICATION_CREDENTIALS . Если переменная установлена, ADC использует файл учетных записей служб, на который указывает эта переменная.

  2. Если переменная среды не задана, ADC использует учетную запись службы по умолчанию, предоставляемую Compute Engine , Google Kubernetes Engine , App Engine и Cloud Functions для приложений, работающих в этих сервисах.

  3. Если ADC не может использовать ни одни из указанных выше учетных данных, система выдает ошибку.

Следующий пример кода Admin SDK иллюстрирует эту стратегию. В примере явно не указаны учетные данные приложения. Однако ADC может неявно найти учетные данные, если установлена ​​переменная среды или если приложение запущено на Compute Engine , Google Kubernetes Engine , App Engine или Cloud Functions.

Node.js

admin.initializeApp({
  credential: admin.credential.applicationDefault(),
});

Java

FirebaseOptions options = FirebaseOptions.builder()
    .setCredentials(GoogleCredentials.getApplicationDefault())
    .setDatabaseUrl("https://<DATABASE_NAME>.firebaseio.com/")
    .build();

FirebaseApp.initializeApp(options);

Python

default_app = firebase_admin.initialize_app()

Идти

app, err := firebase.NewApp(context.Background(), nil)
if err != nil {
	log.Fatalf("error initializing app: %v\n", err)
}

C#

FirebaseApp.Create(new AppOptions()
{
    Credential = GoogleCredential.GetApplicationDefault(),
});

Введите учетные данные вручную.

Проекты Firebase поддерживают сервисные учетные записи Google, которые можно использовать для вызова API сервера Firebase с вашего сервера приложений или доверенной среды. Если вы разрабатываете код локально или развертываете приложение локально, вы можете использовать учетные данные, полученные через эту сервисную учетную запись, для авторизации запросов к серверу.

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

Чтобы сгенерировать файл закрытого ключа для вашей служебной учетной записи:

  1. В консоли Firebase откройте «Настройки» > «Учетные записи служб» .

  2. Нажмите «Сгенерировать новый закрытый ключ» , затем подтвердите, нажав «Сгенерировать ключ» .

  3. Надежно сохраните JSON-файл, содержащий ключ.

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

Чтобы установить переменную среды:

Установите переменную среды GOOGLE_APPLICATION_CREDENTIALS на путь к JSON-файлу, содержащему ключ вашей учетной записи службы. Эта переменная применяется только к текущей сессии оболочки, поэтому, если вы откроете новую сессию, установите переменную снова.

Linux или macOS

export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"

Windows

С помощью PowerShell:

$env:GOOGLE_APPLICATION_CREDENTIALS="C:\Users\username\Downloads\service-account-file.json"

После выполнения описанных выше шагов Application Default Credentials (ADC) сможет автоматически определять ваши учетные данные, что позволит вам использовать учетные данные сервисной учетной записи при тестировании или запуске в средах, отличных от Google.

Используйте учетные данные для создания токенов доступа.

Если вы не используете Firebase Admin SDK , который автоматически обрабатывает авторизацию, вам потребуется создать токен доступа и добавить его для отправки запросов.

Используйте свои учетные данные Firebase вместе с библиотекой Google Auth для предпочитаемого языка, чтобы получить кратковременный токен доступа OAuth 2.0:

node.js

 function getAccessToken() {
  return new Promise(function(resolve, reject) {
    const key = require('../placeholders/service-account.json');
    const jwtClient = new google.auth.JWT(
      key.client_email,
      null,
      key.private_key,
      SCOPES,
      null
    );
    jwtClient.authorize(function(err, tokens) {
      if (err) {
        reject(err);
        return;
      }
      resolve(tokens.access_token);
    });
  });
}

В этом примере клиентская библиотека Google API аутентифицирует запрос с помощью JSON-токена (JWT). Дополнительную информацию см. в разделе «JSON-токены» .

Python

def _get_access_token():
  """Retrieve a valid access token that can be used to authorize requests.

  :return: Access token.
  """
  credentials = service_account.Credentials.from_service_account_file(
    'service-account.json', scopes=SCOPES)
  request = google.auth.transport.requests.Request()
  credentials.refresh(request)
  return credentials.token

Java

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();
}

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

Для авторизации доступа к FCM запросите область действия по адресу https://www.googleapis.com/auth/firebase.messaging .

Чтобы добавить токен доступа в заголовок HTTP-запроса:

Добавьте токен в качестве значения заголовка Authorization в формате Authorization: Bearer <access_token> :

node.js

headers: {
  'Authorization': 'Bearer ' + accessToken
}

Python

headers = {
  'Authorization': 'Bearer ' + _get_access_token(),
  'Content-Type': 'application/json; UTF-8',
}

Java

URL url = new URL(BASE_URL + FCM_SEND_ENDPOINT);
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setRequestProperty("Authorization", "Bearer " + getServiceAccountAccessToken());
httpURLConnection.setRequestProperty("Content-Type", "application/json; UTF-8");
return httpURLConnection;

Авторизация с использованием сервисной учетной записи из другого проекта.

Вы можете отправлять сообщения для одного проекта («целевой проект»), используя токен OAuth 2.0, сгенерированный учетной записью службы в другом проекте («проект отправителя»). Это позволяет централизовать управление учетными записями служб в одном проекте, отправляя сообщения от имени других. Чтобы узнать, как это сделать, выполните следующие шаги:

  1. Включение API: Убедитесь, что API Firebase Cloud Messaging включен в проекте отправителя.
  2. Создание учетной записи службы: Создайте учетную запись службы в проекте отправителя.
  3. Предоставление разрешений: В целевом проекте предоставьте адресу электронной почты учетной записи службы роль администратора API Firebase Cloud Messaging на странице IAM. Это позволит учетной записи службы из другого проекта отправлять сообщения в целевой проект.
  4. Получение токена: Сгенерируйте токен доступа OAuth 2.0 для учетной записи службы в проекте отправителя. Это можно сделать одним из следующих способов:
    • Загрузка и использование JSON-файла с ключом учетной записи службы.
    • В качестве альтернативы можно использовать Workload Identity , если ваш сервис работает в Google Cloud.
  5. Отправка запроса: Используйте полученный токен доступа в заголовке Authorization вашего запроса на отправку. Запрос должен быть отправлен на конечную точку HTTP v1 для целевого проекта :
        POST https://fcm.googleapis.com/v1/TARGET_PROJECT_ID/messages:send

Отправляйте сообщения на определенные устройства.

Для отправки сообщения на конкретное устройство передайте регистрационный токен устройства, как показано на рисунке.

ОТДЫХ

POST https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send HTTP/1.1

Content-Type: application/json
Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA

{
   "message":{
      "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
      "notification":{
        "body":"This is an FCM notification message!",
        "title":"FCM Message"
      }
   }
}

Команда cURL:

curl -X POST -H "Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA" -H "Content-Type: application/json" -d '{
"message":{
   "notification":{
     "title":"FCM Message",
     "body":"This is an FCM Message"
   },
   "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1..."
}}' https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send

В случае успеха ответ от HTTP v1 API представляет собой JSON-объект, содержащий идентификатор сообщения:

    {
      "name":"projects/myproject-b5ae1/messages/0:1500415314455276%31bd1c9631bd1c96"
    }

Отправьте тестовое уведомление, используя API FCM HTTP v1.

В этом разделе описывается, как отправить тестовое уведомление с помощью API FCM HTTP v1.

URL HTTP-запроса

Запрос представляет собой HTTP POST-запрос к указанному целевому объекту (токену регистрации, теме или условию) по следующему URL-адресу:

POST https://fcm.googleapis.com/v1/projectId/messages:send

Полный пример JSON-запроса HTTP

Вот полный пример, демонстрирующий, как отправить уведомление в рамках HTTP POST-запроса:

{
  "message": {
    "token": REGISTRATION_TOKEN,
    "notification": {
      "title": "FCM API test",
      "body": "This is the body of the notification.",
      "image": "https://cat.10515.net/1.jpg"
    }
  }
}

Бегать

Нажмите «Запустить» , чтобы протестировать пример в API Explorer .