Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/laravel-notification-channels/fcm
Firebase Cloud Messaging (FCM) notifications channel for Laravel
https://github.com/laravel-notification-channels/fcm
android fcm firebase firebase-cloud-messaging laravel notification-channel notification-icon
Last synced: about 3 hours ago
JSON representation
Firebase Cloud Messaging (FCM) notifications channel for Laravel
- Host: GitHub
- URL: https://github.com/laravel-notification-channels/fcm
- Owner: laravel-notification-channels
- License: mit
- Created: 2019-09-18T21:25:31.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2024-03-16T09:47:57.000Z (8 months ago)
- Last Synced: 2024-04-14T06:06:59.613Z (7 months ago)
- Topics: android, fcm, firebase, firebase-cloud-messaging, laravel, notification-channel, notification-icon
- Language: PHP
- Homepage: https://laravel-notification-channels.com/
- Size: 151 KB
- Stars: 428
- Watchers: 12
- Forks: 113
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE.md
Awesome Lists containing this project
README
# Laravel FCM (Firebase Cloud Messaging) Notification Channel
[![Latest Version on Packagist](https://img.shields.io/packagist/v/laravel-notification-channels/fcm.svg?style=flat-square)](https://packagist.org/packages/coreproc/laravel-notification-channel-fcm)
[![Software License](https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square)](LICENSE.md)
[![StyleCI](https://styleci.io/repos/209406724/shield)](https://styleci.io/repos/209406724)
[![Quality Score](https://img.shields.io/scrutinizer/g/laravel-notification-channels/fcm.svg?style=flat-square)](https://scrutinizer-ci.com/g/laravel-notification-channels/fcm)
[![Total Downloads](https://img.shields.io/packagist/dt/laravel-notification-channels/fcm.svg?style=flat-square)](https://packagist.org/packages/laravel-notification-channels/fcm)This package makes it easy to send notifications using [Firebase Cloud Messaging](https://firebase.google.com/docs/cloud-messaging/) (FCM) with Laravel.
## Contents
- [Installation](#installation)
- [Setting up the FCM service](#setting-up-the-fcm-service)
- [Usage](#usage)
- [Available message methods](#available-message-methods)
- [Custom clients](#custom-clients)
- [Handling errors](#handling-errors)
- [Changelog](#changelog)
- [Testing](#testing)
- [Security](#security)
- [Contributing](#contributing)
- [Credits](#credits)
- [License](#license)## Installation
Install this package with Composer:
```bash
composer require laravel-notification-channels/fcm
```### Setting up the FCM service
This package now uses the [laravel-firebase](https://github.com/kreait/laravel-firebase) library to authenticate and
make the API calls to Firebase. Follow the [configuration](https://github.com/kreait/laravel-firebase#configuration)
steps specified in their readme before using this.After following their configuration steps, make sure that you've specified your `FIREBASE_CREDENTIALS` in your .env
file.## Usage
After setting up your Firebase credentials, you can now send notifications via FCM by a Notification class and sending
it via the `FcmChannel::class`. Here is an example:```php
use Illuminate\Notifications\Notification;
use NotificationChannels\Fcm\FcmChannel;
use NotificationChannels\Fcm\FcmMessage;
use NotificationChannels\Fcm\Resources\Notification as FcmNotification;class AccountActivated extends Notification
{
public function via($notifiable)
{
return [FcmChannel::class];
}public function toFcm($notifiable): FcmMessage
{
return (new FcmMessage(notification: new FcmNotification(
title: 'Account Activated',
body: 'Your account has been activated.',
image: 'http://example.com/url-to-image-here.png'
)))
->data(['data1' => 'value', 'data2' => 'value2'])
->custom([
'android' => [
'notification' => [
'color' => '#0A0A0A',
'sound' => 'default',
],
'fcm_options' => [
'analytics_label' => 'analytics',
],
],
'apns' => [
'payload' => [
'aps' => [
'sound' => 'default'
],
],
'fcm_options' => [
'analytics_label' => 'analytics',
],
],
]);
}
}
```You will have to set a `routeNotificationForFcm()` method in your notifiable model.
This method should return the user's FCM token(s) from storage.
For example:```php
class User extends Authenticatable
{
use Notifiable;...
/**
* Specifies the user's FCM token
*
* @return string|array
*/
public function routeNotificationForFcm()
{
return $this->fcm_token;
}
}
```You can also return an array of tokens to send notifications via multicast to different user devices.
```php
class User extends Authenticatable
{
use Notifiable;...
/**
* Specifies the user's FCM tokens
*
* @return string|array
*/
public function routeNotificationForFcm()
{
return $this->getDeviceTokens();
}
}
```Once you have that in place, you can simply send a notification to the user by doing the following:
```php
$user->notify(new AccountActivated);
```### Available Message methods
View the `FcmMessage` source for the complete list of options.
```php
FcmMessage::create()
->name('name')
->token('token')
->topic('topic')
->condition('condition')
->data(['a' => 'b'])
->custom(['notification' => []]);
```## Custom clients
You can change the underlying Firebase Messaging client on the fly if required. Provide an instance of `Kreait\Firebase\Contract\Messaging` to your FCM message and it will be used in place of the default client.
```php
public function toFcm(mixed $notifiable): FcmMessage
{
$client = app(\Kreait\Firebase\Contract\Messaging::class);return FcmMessage::create()->usingClient($client);
}
```## Handling errors
When a notification fails it will dispatch an `Illuminate\Notifications\Events\NotificationFailed` event. You can listen for this event and choose to handle these notifications as appropriate. For example, you may choose to delete expired notification tokens from your database.
```php
data, 'report');$target = $report->target();
$event->notifiable->notificationTokens()
->where('push_token', $target->value())
->delete();
}
}
```Remember to register your event listeners in the event service provider.
```php
/**
* The event listener mappings for the application.
*
* @var array
*/
protected $listen = [
\Illuminate\Notifications\Events\NotificationFailed::class => [
\App\Listeners\DeleteExpiredNotificationTokens::class,
],
];
```## Changelog
Please see [CHANGELOG](CHANGELOG.md) for more information what has changed recently.
## Testing
``` bash
composer test
```## Security
If you discover any security related issues, please email [email protected] instead of using the issue tracker.
## Contributing
Please see [CONTRIBUTING](CONTRIBUTING.md) for details.
## Credits
- [Chris Bautista](https://github.com/chrisbjr)
- [All Contributors](../../contributors)## License
The MIT License (MIT). Please see [License File](LICENSE.md) for more information.