canerdogan / laravel-notification-channel-fcm
为Laravel提供Firebase云消息(FCM)通知驱动程序
Requires
- php: >=5.6.4
- guzzlehttp/guzzle: ^6.2
- illuminate/notifications: ^5.3|^5.4|^5.5|^5.6|^5.7|^5.8|^6.0
- illuminate/support: ^5.1|^5.2|^5.3|^5.4|^5.5|^5.6|^5.7|^5.8|^6.0
Requires (Dev)
- mockery/mockery: ^0.9.5
- phpunit/phpunit: 5.*
This package is auto-updated.
Last update: 2024-08-29 05:23:34 UTC
README
此包使您能够通过Firebase云消息(FCM)轻松地向Laravel 5.3、5.4和5.5发送通知。
内容
安装
使用Composer安装此包
composer require coreproc/laravel-notification-channel-fcm
在config/app.php中注册ServiceProvider(如果您使用的是Laravel 5.5,则可以跳过此步骤)
NotificationChannels\Fcm\FcmServiceProvider::class,
设置Fcm服务
您需要从Firebase为您的应用程序申请一个服务器密钥。首先,在这里创建一个项目:https://console.firebase.google.com
一旦您注册并设置了项目,请将API密钥添加到您的config/broadcasting.php
配置文件中
'connections' => [
....
'fcm' => [
'key' => env('FCM_KEY'),
],
...
]
使用方法
现在,您可以通过创建一个FcmNotification
和一个FcmMessages
来通过FCM发送通知
class AccountActivated extends Notification { public function via($notifiable) { return [FcmChannel::class]; } public function toFcm($notifiable) { // The FcmNotification holds the notification parameters $fcmNotification = FcmNotification::create() ->setTitle('Your account has been activated') ->setBody('Thank you for activating your account.'); // The FcmMessage contains other options for the notification return FcmMessage::create() ->setPriority(FcmMessage::PRIORITY_HIGH) ->setTimeToLive(86400) ->setFcmKey('xxxx') // (Optional) Use this to override the FCM key from broadcasting.php ->setNotification($fcmNotification); } }
您需要在您的可通知模型中设置一个routeNotificationForFcm()
方法。例如
class User extends Authenticatable
{
use Notifiable;
....
/**
* Specifies the user's FCM token
*
* @return string
*/
public function routeNotificationForFcm()
{
return $this->fcm_token;
}
}
一旦设置好,您就可以简单地通过以下方式向用户发送通知
$user->notify(new AccountActivated);
可用的消息方法
消息对象在不同操作系统(Android、iOS和Chrome)之间可能不同。从这个角度来看,每个平台都有一个消息对象,该对象扩展了FcmMessage
对象。
以下大部分方法都在Firebase云消息文档中有解释和定义,您可以在这里找到: https://firebase.google.com/docs/cloud-messaging/http-server-ref
FcmMessage
setFcmKey(string $fcmKey)
此方法可以用来覆盖config/broadcasting.php
文件中定义的默认FCM密钥。
setCondition(string $condition)
此参数指定一个逻辑表达式,以确定消息的目标。支持的条件:Topic,格式为"yourTopic in topics"。此值不区分大小写。支持的运算符:&&、||。每个主题消息支持的最大运算符数为两个。
setCollapseKey(string $collapseKey)
此参数标识一组消息(例如,具有collapse_key: "Updates Available"),这些消息可以被折叠,因此当交付可以恢复时,只会发送最后一条消息。这是为了避免设备重新上线或变得活跃时发送过多的相同消息。
请注意,消息发送的顺序没有保证。
注意:任何给定时间允许的最大4个不同的collapse_key。这意味着FCM连接服务器可以同时存储每个客户端应用程序的4个不同的发送到同步消息。如果您超过此数量,没有保证FCM连接服务器将保留哪些4个collapse_key。
setContentAvailable(bool $contentAvailable)
在iOS上,使用此字段在APNs有效载荷中表示content-available。当发送通知或消息并将此设置为true时,不活跃的客户端应用程序将被唤醒。
setMutableContent(bool $mutableContent)
目前仅适用于iOS 10+设备。在iOS上,使用此字段在APNs有效载荷中表示mutable-content。当发送通知并将此设置为true时,可以在通知显示之前修改通知的内容,使用通知服务应用程序扩展。
setPriority(string $priority)
设置消息的优先级。有效值是FcmMessage::PRIORITY_NORMAL
和FcmMessage::PRIORITY::HIGH
。在iOS上,这些对应于APNs优先级5和10。
默认情况下,通知消息以高优先级发送,数据消息以正常优先级发送。正常优先级优化客户端应用的电池消耗,除非需要立即投递,否则应使用正常优先级。对于正常优先级的消息,应用可能会在不确定的延迟后接收消息。
当以高优先级发送消息时,它会立即发送,并且应用可以唤醒睡眠中的设备并打开与服务器建立的网络连接。
setTimeToLive($timeToLive)
此参数指定了设备离线时消息应保留在 FCM 存储中的时间(以秒为单位)。支持的生存期最大为 4 周,默认值为 4 周。
setDryRun(bool $dryRun)
当设置为 true
时,此参数允许开发者测试请求而不实际发送消息。默认值为 false
。
setData(string $data)
此参数指定消息有效负载的自定义键值对。
例如,使用数据:{"score":"3x1"}
:在 iOS 上,如果消息通过 APNS 发送,它表示自定义数据字段。如果通过 FCM 连接服务器发送,它将在 AppDelegate 的 application:didReceiveRemoteNotification:
方法中以键值字典的形式表示。
在 Android 上,这会产生一个名为 score 的 intent 额外属性,其字符串值为 3x1。
键不应是保留字(如 "from" 或以 "google" 或 "gcm" 开头的任何词)。不要使用此表中定义的任何词(如 collapse_key)。
建议使用字符串类型的值。必须将对象或其他非字符串数据类型(如整数或布尔值)的值转换为字符串。
setNotification(FcmNotification $notification)
此参数指定通知有效负载的预定义、用户可见的键值对。
可用的通知方法
每个 FcmMessage
对象都期望一个可选的 notification
对象,该对象包含通知的内容。为每个平台提供扩展主 FcmNotification
对象的 FcmNotification
对象。
FcmNotification
setTitle(string $title)
通知的标题。此字段在 iOS 手机和平板电脑上不可见。
setBody(string $body)
通知的主体文本。
setClickAction(string $clickAction)
iOS:与用户点击通知关联的操作。对应于 APNs 有效负载中的类别。
Android:与用户点击通知关联的操作。如果指定,则在用户点击通知时启动具有匹配 intent 过滤器的活动。
Web:与用户点击通知关联的操作。对于所有 URL 值,都需要使用安全的 HTTPS。
setAndroidChannelId(string $androidChannelId)
通知的频道 ID(Android O 新增)。
应用必须在收到任何具有此键的通知之前创建具有此 ID 的频道。
如果您未在请求中发送此键,或者提供的频道 ID 尚未由您的应用创建,则 FCM 使用您应用清单中指定的频道 ID。
setIcon(string $icon)
通知的图标。
Android:将通知图标设置为 drawable 资源 myicon 的 myicon。如果您未在请求中发送此键,FCM 将显示您应用清单中指定的启动器图标。
Web:用于通知图标的 URL。
setBadge(string $badge)
这是一个针对 iOS 的特定变量。主屏幕应用图标上的徽章值。
如果未指定,徽章不会被更改。
如果设置为 0,则移除徽章。
setSound(string $sound)
当设备收到通知时播放的声音。
Android:支持 "default" 或包含在应用中的声音资源文件名。声音文件必须位于 /res/raw/
中。
iOS:声音文件可以位于客户端应用的主捆绑包中或在应用数据容器的 Library/Sounds
文件夹中。
setTag(string $tag)
用于替换通知抽屉中现有通知的标识符。
如果未指定,则每个请求创建一个新的通知。
如果已指定,并且已经显示带有相同标签的通知,新的通知将替换通知抽屉中现有的通知。
setColor(string $color)
通知的图标颜色,以#rrggbb
格式表示。
setBodyLocKey(string $bodyLocKey)
用于将正文文本本地化为用户当前语言环境的app字符串资源中的正文字符串的键。
setBodyLocArgs(array $bodyLocArgs)
用于将标题文本本地化为用户当前语言环境的app字符串资源中的标题字符串的键。
setTitleLocKey(string $titleLocKey)
用于在body_loc_key中的格式说明符位置的变量字符串值,用于将正文文本本地化为用户的当前语言环境。
setTitleLocArgs(array $titleLocArgs)
用于在title_loc_key中的格式说明符位置的变量字符串值,用于将标题文本本地化为用户的当前语言环境。
更新日志
有关最近更改的更多信息,请参阅变更日志。
测试
$ composer test
安全
如果您发现任何与安全相关的问题,请通过电子邮件chrisbjr@gmail.com联系,而不是使用问题跟踪器。
贡献
有关详细信息,请参阅贡献指南。
致谢
许可证
MIT许可(MIT)。有关更多信息,请参阅许可文件。