rajtechnologies / laravel-fcm-notification
Google Firebase Cloud Messaging (FCM) Push Notification Channel for Laravel
Requires
- php: >=5.6.4
- guzzlehttp/guzzle: ^6.2|^7.0
- illuminate/config: ~5.3|^6.0|^7.0|^8.0|^9.0
- illuminate/notifications: ~5.3|^6.0|^7.0|^8.0|^9.0
- illuminate/queue: ~5.3|^6.0|^7.0|^8.0|^9.0
- illuminate/support: ~5.3|^6.0|^7.0|^8.0|^9.0
Requires (Dev)
- mockery/mockery: ~1.0
- phpunit/phpunit: ~6.0
This package is auto-updated.
Last update: 2024-09-15 14:17:18 UTC
README
Laravel FCM (Firebase Cloud Messaging) Notification Channel
使用此包通过 Laravel 向 Firebase Cloud Messaging 发送推送通知。需要 Laravel 5.5+。
此包仅与Legacy HTTP Server Protocol兼容
安装
此包可以通过 Composer 安装。
composer require rajtechnologies/laravel-fcm-notification
如果安装在 < Laravel 5.5 上,则添加服务提供者
// config/app.php 'providers' => [ ... RajTechnologies\FCM\FcmNotificationServiceProvider::class, ... ];
在 config/services.php
中添加您的 Firebase API 密钥。
return [ ... ... /* * Add the Firebase API key */ 'fcm' => [ 'key' => env('FCM_SECRET_KEY') ] ];
FCM 模型
use RajTechnologies\FCM\Models\FCM;
用户模型中的更改
public function fcm() { return $this->hasMany(FCM::class); }
示例用法
使用 Artisan 创建通知
php artisan make:notification SomeNotification
在您的通知的 public function via($notifiable)
方法中返回 [fcm]
public function via($notifiable) { return ['fcm']; }
在您的通知中添加方法 public function toFcm($notifiable)
,并返回 FcmMessage
实例
use RajTechnologies\FCM\FcmMessage; ... public function toFcm($notifiable) { $message = new FcmMessage(); $message->content([ 'title' => 'Foo', 'body' => 'Bar', 'sound' => '', // Optional 'icon' => '', // Optional 'click_action' => '' // Optional ])->data([ 'param1' => 'baz' // Optional ])->priority(FcmMessage::PRIORITY_HIGH); // Optional - Default is 'normal'. return $message; }
或者添加用户模型函数
当使用模型发送到特定设备时,请确保您的可通知实体定义了 routeNotificationForFcm
方法
为通知功能添加方法
public function routeNotificationForFcm($notification) { //For Single Token Only /* if($this->fcm){ return $this->fcm[0]->token; } */ if($this->fcm){ $array = $this->fcm->pluck('token')->toArray(); return implode(',',$array); } return null; }
为更新令牌添加静态方法
public static function updateFCM($user_id,$fcm_token){ $fcmQuery = FCM::query(); $fcm = $fcmQuery->where('user_id',$user_id)->first(); if($fcm){ $fcm->update([ "token" =>$fcm_token ]); return true; } $fcmQuery->create([ "user_id" =>$user_id, "token" =>$fcm_token ]); return true; }
在通知中发送到主题时,您可以在 toFcm
方法中定义
use RajTechnologies\FCM\FcmMessage; ... public function toFcm($notifiable) { $message = new FcmMessage(); $message->to('the-topic', $recipientIsTopic = true) ->content([...]) ->data([...]); return $message; }
或者当有条件发送时
use RajTechnologies\FCM\FcmMessage; ... public function toFcm($notifiable) { $message = new FcmMessage(); $message->contentAvailable(true) ->priority('high') ->condition("'user_".$notifiable->id."' in topics") ->data([...]); return $message; }
您可以通过 setHeaders()
提供可选的标题或覆盖请求标题
use RajTechnologies\FCM\FcmMessage; ... public function toFcm($notifiable) { $message = new FcmMessage(); $message->setHeaders([ 'project_id' => "123456789" // FCM sender_id ])->content([ 'title' => 'Foo', 'body' => 'Bar', 'sound' => '', // Optional 'icon' => '', // Optional 'click_action' => '' // Optional ])->data([ 'param1' => 'baz' // Optional ])->priority(FcmMessage::PRIORITY_HIGH); // Optional - Default is 'normal'. return $message; }
响应解析
要处理任何 Laravel 通知通道响应,请检查Laravel Notification Events
此通道返回一个 JSON 数组响应
{ "multicast_id": "number", "success": "number", "failure": "number", "canonical_ids": "number", "results": "array" }
请参阅FCM Legacy HTTP Server Protocol中的响应解析文档。
许可
MIT 许可证 (MIT)。有关更多信息,请参阅许可文件