canerdogan/laravel-notification-channel-fcm

为Laravel提供Firebase云消息(FCM)通知驱动程序

1.5.1 2019-11-16 13:12 UTC

This package is auto-updated.

Last update: 2024-08-29 05:23:34 UTC


README

Latest Version on Packagist Software License StyleCI SensioLabsInsight Quality Score Total Downloads

此包使您能够通过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_NORMALFcmMessage::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)。有关更多信息,请参阅许可文件