Как можно получить токен OAuth2 для отправки push-уведомлений?

Как можно получить токен OAuth2 для отправки push-уведомлений через FCM? <br/> Я заметил, что Google изменил процесс отправки пуш-уведомлений и теперь требует авторизацию через OAuth2. <br/> <br/> В соответствии с актуальными требованиями, необходимо включить в заголовок запроса "Authorization" с параметром "Bearer " + токен. <br/> <br/> Согласно инструкции по миграции, для этого необходимо использовать библиотеку google-auth-library-php и получить файл credentials.json, который я уже скачал по предоставленной инструкции. <br/> <br/> Я протестировал следующий код: <br/> <pre><code class="php">$serviceAccountFile = '/var/www/html/credentials.json';
        $scopes = ['https://www.googleapis.com/auth/firebase.messaging'];

        $credentials = new ServiceAccountCredentials(
            $scopes,
            $serviceAccountFile
        );

        $token = $credentials-&gt;fetchAuthToken();
        $accessToken = $token['access_token'];</code></pre> <br/> <br/> Для тестирования я отправил запрос через Postman с таким телом: <br/> <pre><code>{
  "message": {
    "token": "eVkcH93BTwmpd06HPtuxeY:APA91bHNW6ZIAOe1IOKmpdHmiRQSnN69X_s4Duq0bYbaCt6IVDsh80KkjBNRxVoUMRUyRoHjn6HQlRrm9I5_Kj0eciorJ9rrlfUqeDJwiBcrFpV5aZeNwsRmOXPIkPeZJeHHQdKSM_ERs",
    "notification": {
      "title": "Breaking News",
      "body": "New news story available."
    },
    "data": {
      "story_id": "story_12345"
    }
  }
}</code></pre> <br/> <br/> В заголовке запроса указал Authorization: Bearer токен, который я получил выше. <br/> <br/> Однако в ответе я получаю следующее сообщение: <br/> <pre><code>{
    "error": {
        "code": 400,
        "message": "The registration token is not a valid FCM registration token",
        "status": "INVALID_ARGUMENT",
        "details": [
            {
                "@type":
  • 9 сентября 2024 г. 15:13
Ответы на вопрос 1
Чтобы получить токен OAuth2 для отправки push-уведомлений через Firebase Cloud Messaging (FCM), вы можете выполнить следующие шаги:

1. **Создание проекта в Google Cloud Console**:
   - Перейдите в Google Cloud Console и создайте новый проект или выберите существующий.
   - Убедитесь, что у вас включен API Firebase Cloud Messaging.

2. **Создание учетных данных**:
   - Перейдите в раздел "Credentials" (Учетные данные).
   - Выберите "Create credentials" (Создать учетные данные) и выберите "Service account" (Служебный аккаунт).
   - Установите необходимые права доступа для служебного аккаунта. Обычно достаточно "Firebase Admin SDK Admin" или "Firebase Cloud Messaging".
   - На этапе создания учетных данных вы сможете скачать файл JSON, который будет содержать необходимые учетные данные.

3. **Использование библиотеки google-auth-library-php**:
   - Убедитесь, что библиотека установленная:
     ```bash
     composer require google/auth
     ```
   - Используйте следующий код для получения токена:

   ```php
   require 'vendor/autoload.php';

   use Google\Auth\ServiceAccountCredentials;

   $serviceAccountFile = '/path/to/your/credentials.json'; // Укажите путь к вашему JSON файлу
   $scopes = ['https://www.googleapis.com/auth/firebase.messaging'];

   $credentials = new ServiceAccountCredentials(
       $scopes,
       $serviceAccountFile
   );

   $token = $credentials->fetchAuthToken();
   $accessToken = $token['access_token'];
   ```

4. **Отправка push-уведомлений**:
   - Создайте запрос с заголовком, содержащим ваш токен:
   ```php
   $url = 'https://fcm.googleapis.com/v1/projects/YOUR_PROJECT_ID/messages:send'; // Замените YOUR_PROJECT_ID
   $pushData = [
       "message" => [
           "token" => "TOKEN_FROM_CLIENT", // замените на действительный токен
           "notification" => [
               "title" => "Breaking News",
               "body" => "New news story available."
           ],
           "data" => [
               "story_id" => "story_12345"
           ]
       ]
   ];

   $ch = curl_init($url);
   curl_setopt($ch, CURLOPT_POST, true);
   curl_setopt($ch, CURLOPT_HTTPHEADER, [
       'Authorization: Bearer ' . $accessToken,
       'Content-Type: application/json'
   ]);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
   curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($pushData));

   $response = curl_exec($ch);
   $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
   curl_close($ch);

   if ($httpCode == 200) {
       echo "Notification sent successfully: " . $response;
   } else {
       echo "Failed to send notification: " . $response;
   }
   ```

5. **Проверка токена регистрации**:
   - Ошибка, которую вы получаете, "The registration token is not a valid FCM registration token", означает, что токен, который вы используете для отправки уведомления, недействителен или неправильный. Убедитесь, что вы используете правильный токен регистрации FCM, полученный устройством, на которое хотите отправить уведомление.

Если следовать всем шагам и использовать корректный токен, вы должны суметь успешно отправить push-уведомления через FCM.
Похожие вопросы