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

Полезные ссылки: