fleetrunnr/laravel-onesignal

此包已被弃用且不再维护。没有建议的替代包。

OneSignal 通知驱动程序

v2.4.0 2022-05-02 10:15 UTC

README

Latest Version on Packagist Software License Build Status StyleCI SensioLabsInsight Quality Score Code Coverage Total Downloads

此包使得使用 Laravel 5.3+ 发送 OneSignal 通知变得简单。

内容

安装

您可以通过 composer 安装此包

$ composer require laravel-notification-channels/onesignal

如果您在 Laravel 5.4 或更低的版本中安装此包,您必须导入服务提供者

// config/app.php
'providers' => [
    ...
    NotificationChannels\OneSignal\OneSignalServiceProvider::class,
],

设置 OneSignal 账户

将您的 OneSignal App ID 和 REST API 密钥添加到 config/services.php

// config/services.php
...
'onesignal' => [
    'app_id' => env('ONESIGNAL_APP_ID'),
    'rest_api_key' => env('ONESIGNAL_REST_API_KEY')
],
...

使用

现在您可以在通知中的 via() 方法内使用该通道

use NotificationChannels\OneSignal\OneSignalChannel;
use NotificationChannels\OneSignal\OneSignalMessage;
use NotificationChannels\OneSignal\OneSignalWebButton;
use Illuminate\Notifications\Notification;

class AccountApproved extends Notification
{
    public function via($notifiable)
    {
        return [OneSignalChannel::class];
    }

    public function toOneSignal($notifiable)
    {
        return OneSignalMessage::create()
            ->setSubject("Your {$notifiable->service} account was approved!")
            ->setBody("Click here to see details.")
            ->setUrl('http://onesignal.com')
            ->webButton(
                OneSignalWebButton::create('link-1')
                    ->text('Click here')
                    ->icon('https://upload.wikimedia.org/wikipedia/commons/4/4f/Laravel_logo.png')
                    ->url('https://laravel.net.cn')
            );
    }
}

为了让您的通知知道您要针对哪个 OneSignal 用户,将 routeNotificationForOneSignal 方法添加到您的 Notifiable 模型中。

您可以返回单个 player-id,或者如果您想通知多个 player ID,只需返回包含所有 ID 的数组。

public function routeNotificationForOneSignal()
{
    return 'ONE_SIGNAL_PLAYER_ID';
}

如果您想根据 OneSignal 的 "syncHashedEmail" 功能发送通知,请返回包含索引 "email" 的数组。 由于 OneSignal API 的限制,无法在单个过滤器中使用多个电子邮件。

public function routeNotificationForOneSignal()
{
    return ['email' => 'example@example.com'];
}

如果您想根据 OneSignal 的 "Tags" 功能发送通知,请返回包含索引 "tags" 的数组。

public function routeNotificationForOneSignal()
{
    return ['tags' => ['key' => 'device_uuid', 'relation' => '=', 'value' => '1234567890-abcdefgh-1234567']];
}

如果您想根据您设置的 setExternalUserId 功能的外部用户 ID 发送通知,这将使根据 Laravel 用户 ID 定位用户变得非常简单。

public function routeNotificationForOneSignal()
{
    return ['include_external_user_ids' => $this->id];
}

所有可用方法

  • setSubject(''): 接受字符串值作为标题。
  • setBody(''): 接受字符串值作为通知正文。
  • setIcon(''): 接受图标 URL。
  • setUrl(''): 接受通知点击事件的 URL。
  • webButton(OneSignalWebButton $button): 允许您向通知添加操作按钮(仅限 Chrome 48+(Web Push))。
  • button(OneSignalButton $button): 允许您向通知添加按钮(支持 iOS 8.0 和 Android 4.1+ 设备。图标仅适用于 Android)。
  • setData($key, $value): 允许您为消息有效负载设置额外的数据。有关更多信息,请参阅 OneSignal 文档
  • setParameter($key, $value): 允许您为消息有效负载设置额外的参数,这些参数在 REST API 中可用。有关更多信息,请参阅 OneSignal 文档
  • setImageAttachments($imageUrl): 允许您设置一个图像作为所有可能的附件 OneSignal 附件文档

按钮使用

OneSignalMessage::create()
    ->button(
        OneSignalButton::create('id')
            ->text('button text')
            ->icon('button icon')
    );

WebButton使用

OneSignalMessage::create()
    ->webButton(
        OneSignalWebButton::create('id')
            ->text('button text')
            ->icon('button icon')
            ->url('button url')
    );

更新日志

请参阅更新日志以获取更多关于最近更改的信息。

测试

$ composer test

安全性

如果您发现任何与安全性相关的问题,请发送电子邮件至m.pociot@gmail.com而不是使用问题跟踪器。

贡献

请参阅贡献指南以获取详细信息。

鸣谢

许可协议

MIT许可协议(MIT)。请参阅许可文件以获取更多信息。