Laravel - 如何使用信号通知

时间:2017-08-29 15:21:44

标签: php laravel notifications onesignal

我在laravel中开发了一个后台,允许插入android和ios app获得的数据。

现在我需要实施onsignal通知,例如,当在后台插入新产品时,应用用户会收到通知。

我设置了我的信号通知并在我的laravel项目中安装了这个包:https://github.com/laravel-notification-channels/onesignal。 我也设置了OneSignal App IDREST API Key

之后我创建一个新的控制器并放置包链接中的示例代码。 控制器:

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

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

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

但现在我不知道如何使用它。 例如,如何在添加新产品时发送通知? 我需要设置路线吗?

如果不解释我的问题,请告诉我。

谢谢

1 个答案:

答案 0 :(得分:7)

您好,您必须创建自定义频道OneSignal通知,因此您无需在控制器上执行此操作。

1.-首先,您需要为要通知的每个“事件”创建一个OneSignal通知

例如,添加产品时

php artisan make:notification ProductAdded

这将在App\Notifications\ProductAdded

内生成通知文件

2.-在新文件ProductAdded上,您需要将通知逻辑添加到OneSignal

<?php

// App\Notifications\ProductAdded.php

class OneSignal extends Notification
{
    use Queueable;
    private $data; //this is the "model" data that will be passed through the notify method

    /**
     * Create a new notification instance.
     *
     * @return void
     */
    public function __construct($data)
    {
        $this->data = $data;
    }

    /**
     * Get the notification's delivery channels.
     *
     * @param  mixed  $notifiable
     * @return array
     */
    public function via($notifiable)
    {
        return [OneSignalChannel::class];
    }

    public function toOneSignal($notifiable)
    {
        //now you can build your message with the $this->data information
        return OneSignalMessage::create()
            ->subject("Your {$notifiable->service} account was approved!")
            ->body("Click here to see details.")
            ->url('http://onesignal.com')
            ->webButton(
                OneSignalWebButton::create('link-1')
                    ->text('Click here')
                    ->icon('https://upload.wikimedia.org/wikipedia/commons/4/4f/Laravel_logo.png')
                    ->url('http://laravel.com')
            );
    }

}

3.-使用模型中的Notifiable特征

<?php

class YourModel extends Model
{
use Notifiable;

public function sendNotification()
{
    $this->notify(new ProductAdded($this)); //Pass the model data to the OneSignal Notificator
}

public function routeNotificationForOneSignal()
    {
        /*
         * you have to return the one signal player id tat will 
         * receive the message of if you want you can return 
         * an array of players id
         */

         return $this->data->user_one_signal_id;
    }

}
  1. 此外,您可以在任何地方使用Notification Facade
  2. $users这是玩家ID的集合 $data这是构建通知的数据

    Notification::send($users, new ProductAdded($dataToNotify));

    我希望这会有所帮助:)

    此外,您可以在Laravel Docs上阅读更多这些内容

    https://laravel.com/docs/5.4/notifications

    PD。

    如果您对通知系统感到不知所措,您也可以使用此包https://github.com/berkayk/laravel-onesignal这是一个简单的包装器,您可以轻松使用它,并且有很多有用的方法。