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

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

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

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

Авторизация запросов на отправку HTTP v1

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

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

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

Если ваше приложение работает в среде, отличной от Google Server , вам потребуется загрузить 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(),
});

Ява

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

FirebaseApp.initializeApp(options);

Питон

default_app = firebase_admin.initialize_app()

Идти

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

С#

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"

Окна

С PowerShell:

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

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

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

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

Используйте свои учетные данные Firebase вместе с библиотекой Google Auth Library для предпочитаемого вами языка, чтобы получить кратковременный токен доступа 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);
    });
  });
}

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

Питон

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

Ява

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
}

Питон

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

Ява

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. Предоставьте разрешения: в целевом проекте предоставьте адресу электронной почты учётной записи службы роль администратора Firebase Cloud Messaging API на странице 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

В случае успешного выполнения ответ API HTTP v1 представляет собой объект 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

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

Вот полный пример, показывающий, как опубликовать уведомление в 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 .