Notifications через Firebase Cloud Messaging
Для отправки уведомлений через Firebase Cloud Messaging (FCM) необходимо создать аккаунт на официальном сайте Firebase. После регистрации и настройки проекта, зайдити в Project Settings -> Service Accounts и нажмите на кнопку Generate New Private Key, полученный JSON-файл поместите в безопасное место в вашем проекте, например /storage/credentials/firebase-service-account.json.
Отредактируйте файл config/notifications.php, добавив fcm канал, если его там нет:
//..
'channels' => [
'my-fcm' => [
'driver' => 'fcm',
'project_id' => 'your-project-id', // Найти в Project Settings -> General
'credentials_path' => storage_path('credentials/firebase-service-account.json'),
],
],
//..
PHP
Создание уведомления
namespace App\Notifications;
use Imhotep\Notifications\Notification;
use Imhotep\Notifications\Messages\FcmMessage;
class MyFcmNotification extends Notification
{
public function via(mixed $recipient): array
{
return ['my-fcm'];
}
public function toFcm(mixed $recipient): FcmMessage
{
// Создаем базовое сообщение с заголовком, текстом и изображением
$message = new FcmMessage(
title: 'Title Notification',
body: 'Text Notification',
image: 'https://example.dev/fcm-icon.png'
);
// Название темы для отправки сообщений
$message->topic('news-updates');
// Условия для отправки сообщения
$message->condition("'news' in topics && 'android' in topics");
// Добавляем произвольные данные для обработки внутри приложения
$message->data(['user-id' => 1, 'action' => 'open_chat']);
// Android: Настраиваем специфичные параметры
$message->android([
'priority' => 'HIGH',
'notification' => [
'notification_count' => 1,
'notification_priority' => 'PRIORITY_HIGH',
'channel_id' => 'important_channel',
'sound' => 'default'
]
]);
// APNs (iOS/macOS): настраиваем содержимое уведомления
$message->apns([
'headers' => [
'apns-priority' => '10', // Немедленная доставка
],
'payload' => [
'aps' => [
'alert' => [
'title' => 'Title Notification', // Данное поле заменит базовый заголовок уведомления
'body' => 'Text Notification', // Данное поле заменит базовый текст уведомления
],
'badge' => 1,
'sound' => 'bingbong.aiff',
],
'custom_data' => ['user-id' => 1] // Данные для приложения
]
]);
// Webpush: настройки для уведомлений в браузере
$message->webpush([
'notification' => [
'icon' => 'https://example.dev/fcm-icon.png',
'actions' => [
['action' => 'open', 'title' => 'Открыть приложение']
]
]
]);
// Общие опции FCM
$message->fcmOptions(['analytics_label' => 'my-campaign-label']);
return $message;
}
}
PHP
Полезные ссылки: