如何使用laravel通知渠道为OneSignal订阅用户

时间:2017-02-05 15:44:29

标签: php laravel laravel-5 laravel-5.3 onesignal

我正在尝试使用laravel-notifications-channel/onesignal,我在设置为接收通知的laravel应用中遇到了一些问题。 documentation on the github page并未真正涵盖用户如何对自己进行身份验证以接收通知。

即使阅读OneSignal docs以便将用户发送到OneSignal也不适合我。

如何在用户使用我们的网络应用时将其设置为通知他们接收通知,然后我可以使用laravel notifications向他们发送通知?

这是我的AssignedToTask通知文件:

<?php

namespace App\Notifications;

use App\Task;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use NotificationChannels\OneSignal\OneSignalChannel;
use NotificationChannels\OneSignal\OneSignalMessage;
use NotificationChannels\OneSignal\OneSignalWebButton;

class AssignedToTask extends Notification
{

    use Queueable;

    protected $task;

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

    /**
     * Get the notification's delivery channels.
     *
     * @param  mixed  $notifiable
     * @return array
     */
    public function via($notifiable)
    {
        return ['mail', 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')
            );
    }

    /**
     * Get the mail representation of the notification.
     *
     * @param  mixed  $notifiable
     * @return \Illuminate\Notifications\Messages\MailMessage
     */
    public function toMail($notifiable)
    {
        return (new MailMessage)
                    ->subject('You have been assigned a new task')
                    ->line('You have a new task:  ' . $this->task->title)
                    ->action('View Task', url('tasks/' . $this->task->id));
    }

    /**
     * Get the array representation of the notification.
     *
     * @param  mixed  $notifiable
     * @return array
     */
    public function toArray($notifiable)
    {
        return [
            //
        ];
    }
}

在我的用户模型中:

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Zizaco\Entrust\Traits\EntrustUserTrait;
use HipsterJazzbo\Landlord\BelongsToTenants;
use Cmgmyr\Messenger\Traits\Messagable;

class User extends Authenticatable
{
    use Notifiable;
    use EntrustUserTrait;
    use BelongsToTenants;
    use Messagable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password', 'company_id'
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token', 'company_id'
    ];

    ....

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

    public function routeNotificationForMail()
    {
        return $this->email_address;
    }

}

enter image description here

如何在用户模型中设置和获取ONE_SIGNAL_PLAYER_ID,以便用户接受通知并发送通知?

1 个答案:

答案 0 :(得分:3)

编辑 - 2 由于您不知道发生了什么,让我试着解释一下如何使用OneSignal

这是一个推送消息传递系统,就像任何其他推送通知系统一样。 (FCM(谷歌),PubNub)。

工作原理

  1. 首先转到OneSignal.Com创建您的帐户,然后为您创建一个应用。一旦你创建了一个应用程序,它就会为你的消费者提供移动SDK。
  2. 现在,只要您的消费者安装并启动您的应用,他们就会通过您自己的唯一ID和用户信息通知您的网络服务器。
  3. 您收到的有关该用户的信息是唯一的player_id,您将针对该用户存储在您的数据库中。
  4. 现在,当您想向任何移动应用发送通知时,只需使用player_id调用API发布通知方法,OneSignal就会向该移动应用发送推送通知。
  5. 编辑 - 1

    我认为现在我理解您对OneSignalChannel

    的通知的疑惑

    <强>流量

    1. 您已经在每个用户的app数据库中存储了players_ids。
    2. 现在,当您想要向玩家发送通知时,您只需从db中获取该用户player_id并将通知推送到OneSignal。
    3. 嗯,你从字面上理解了这个含义。这导致了问题

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

      从错误消息中,此函数应返回唯一ID(UUID)。

      将返回值更改为OneSignalChannel

      处的实际玩家ID

      那是我的全部朋友。