Google Firebase перейшов від застарілої FCM API до HTTP v1 API, який використовує OAuth 2.0 для аутентифікації. Цей посібник охоплює всі кроки для міграції вашого додатку Laravel з Legacy API на HTTP v1 API, включаючи оновлення конфігурацій, зміни в контролерах та приклади реалізацій.
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
Що змінилося?
- Механізм аутентифікації:
- У 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
.
- Покращена безпека:
- 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, щоб ловити недійсні токени або мережеві проблеми.
Ключові переваги міграції
- Покращена безпека: HTTP v1 API використовує OAuth 2.0 для безпечного доступу.
- Масштабованість: Підтримує більш складні можливості, такі як підписки на теми та умовні сповіщення.
- Підготовленість до майбутнього: 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.