Міграція з Legacy FCM API на HTTP v1 API в Laravel.

Google Firebase перейшов від застарілої FCM API до HTTP v1 API, який використовує OAuth 2.0 для аутентифікації. Цей посібник охоплює всі кроки для міграції вашого додатку Laravel з Legacy API на HTTP v1 API, включаючи оновлення конфігурацій, зміни в контролерах та приклади реалізацій.

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —

Що змінилося?

  1. Механізм аутентифікації:
  • У Legacy API використовувався простий серверний ключ для аутентифікації.
  • HTTP v1 API вимагає токен доступу OAuth 2.0, згенерований з облікового запису сервісу Firebase.

2. Структура запиту:

  • застаріле API надсилає корисні навантаження безпосередньо до https://fcm.googleapis.com/fcm/send.
  • HTTP v1 API вимагає структурованих запитів з конкретним шляхом проєкту:
    https://fcm.googleapis.com/v1/projects/{project-id}/messages:send.
  1. Покращена безпека:
  • HTTP v1 API покращує безпеку, використовуючи доступ на основі ролей для облікових записів сервісів.

A. Налаштування облікових даних Firebase

1. Створення та завантаження ключа облікового запису сервісу

  • Перейдіть до Google Cloud Console.
  • Перейдіть до IAM & Admin > Сервісні облікові записи.
  • Створіть новий сервісний обліковий запис або виберіть наявний.
  • Призначте роль Firebase Admin SDK Administrator Service Agent.
  • Згенеруйте та завантажте JSON-ключ. Збережіть файл у вашому проєкті Laravel в папці storage/app/firebase-service-account.json.

Встановлення Firebase PHP SDK

Встановіть пакет Firebase для використання FCM HTTP v1 API:

composer require kreait/laravel-firebase

2. Оновіть конфігурацію в services.php

У вашому файлі config/services.php додайте наступне:

'firebase' => [  
 'credentials' => env('FIREBASE_CREDENTIALS'),  
],

3. Оновіть ваш файл .env

Вкажіть змінну середовища на завантажений JSON-файл облікового запису сервісу:

FIREBASE_CREDENTIALS=storage/app/firebase-service-account.json

B. Legacy FCM API (Стара версія)

Контролер Legacy API (FCMPushController)

Ось як працювала система сповіщень з Legacy API:

public function attemtNotification($deviceTokens, $title, $body)  
{  
 $SERVER_API_KEY = 'YOUR_SERVER_KEY';  

 $data = [  
 "registration_ids" => $deviceTokens,  
 "notification" => [  
 "title" => $title,  
 "body" => $body,  
 ]  
 ];  

 $headers = [  
 'Authorization: key=' . $SERVER_API_KEY,  
 'Content-Type: application/json',  
 ];  

 $ch = curl_init();  
 curl_setopt($ch, CURLOPT_URL, 'https://fcm.googleapis.com/fcm/send');  
 curl_setopt($ch, CURLOPT_POST, true);  
 curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);  
 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);  
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
 curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));  

 $response = curl_exec($ch);  
 curl_close($ch);  

 // Optional: Log response  
 // dd($response);  
}

C: Міграція на HTTP v1 API

Новий контролер API (FCMPushController)

Оновлена реалізація використовує HTTP v1 API з токеном доступу:

use Kreait\Firebase\Factory;  

public function attemtNotification($deviceTokens, $title, $body)  
{  
 if (empty($deviceTokens)) {  
 // Exit if no valid tokens  
 return;  
 }  

 $factory = (new Factory())  
 ->withServiceAccount(config('services.firebase.credentials'));  

 $messaging = $factory->createMessaging();  

 foreach ($deviceTokens as $token) {  
 if ($token) { // Ensure the token is not null  
 $message = \Kreait\Firebase\Messaging\CloudMessage::withTarget('token', $token)  
 ->withNotification([  
 'title' => $title,  
 'body' => $body,  
 ]);  

 try {  
 $messaging->send($message);  
 } catch (\Exception $e) {  
 // Log the error for debugging  
 \Log::error("Notification error for token {$token}: " . $e->getMessage());  
 }  
 }  
 }  
}

Крок 4: Тестування реалізації

1.

Тестування з прикладом виклику

Викличте функцію attemtNotification() з іншого контролера або сервісу:

$deviceTokens = $users->pluck('device_token')->filter()->toArray(); // Фільтрує значення null  
$this->notificationController->attemtNotification($deviceTokens, "Заголовок сповіщення", "Напишіть текст повідомлення");

2. Налагодження

  • Перевірте журнали, щоб переконатися, що сповіщення надсилаються успішно.
  • Обробляйте виключення під час викликів API, щоб ловити недійсні токени або мережеві проблеми.

Ключові переваги міграції

  1. Покращена безпека: HTTP v1 API використовує OAuth 2.0 для безпечного доступу.
  2. Масштабованість: Підтримує більш складні можливості, такі як підписки на теми та умовні сповіщення.
  3. Підготовленість до майбутнього: Google настійно рекомендує використовувати HTTP v1 API, оскільки Legacy API більше не підтримується.

Висновок

Міграція з Legacy FCM API на HTTP v1 API є необхідною для модернізації вашого додатку Laravel та відповідності останнім стандартам Firebase. Дотримуйтесь кроків, зазначених у цьому посібнику, щоб безперешкодно оновити конфігурацію проєкту та реалізацію сповіщень.

Дайте знати, якщо вам потрібні додаткові роз'яснення або допомога! 🚀

Перекладено з: Migrating from Legacy FCM API to HTTP v1 API in Laravel.

Leave a Reply

Your email address will not be published. Required fields are marked *