Laravel 8 推送事件名称不起作用“App\Events ventnotify”而不是 eventnotify

问题描述 投票:0回答:1

我正在尝试使用推送器从 Laravel api 向 flutter 应用程序发送实时通知。当我直接从 Pusher 调试控制台发送事件时,flutter 应用程序会正确接收该事件。当我从 Laravel 发送事件时,flutter 应用程序端没有任何反应,但我可以看到该事件显示在推送器调试控制台上。通道名称为“channelnotify”,事件名称为“eventnotify”,但推送器调试控制台上收到的事件显示:通道:channelnotify,事件:App\Events ventnotify 推手截图

pusher 不是将事件名称获取为“eventnotify”,而是获取整个路径“App\Events ventnotify”作为事件名称,我认为这就是 flutter 不拦截事件的原因。我尝试在我的 flutter 应用程序中将事件名称更改为“App\Events ventnotify”,但仍然无法正常工作。 有没有办法强制 laravel 发送没有路径的事件名称?

//send event api: 
 public function sendNotif($to_id,$context ,$context_id ,$label){

        $data = array(
            'to_id' =>$to_id,
            'context' =>$context,
            'context_id' =>$context_id,
            'label' =>$label,
            );
    
            $result = [];
            array_push($result,$data);

            $str_json = json_encode($result);
           
            event(new eventnotify($str_json));

            return $str_json;

    }

//event code
<?php

namespace App\Events;

use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Contracts\Broadcasting\ShouldBroadcastNow;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;

class eventnotify implements ShouldBroadcast
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    public $notif;

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

    /**
     * Get the channels the event should broadcast on.
     *
     * @return \Illuminate\Broadcasting\Channel|array
     */
    public function broadcastOn()
    {
        return new Channel('channelnotify');
    }
}
php laravel flutter push-notification pusher
1个回答
0
投票

尝试重写以下方法并使用您的事件名称,如下所示:

/**
 * The event's broadcast name.
 *
 * @return string
 */
public function broadcastAs()
{
    return 'eventnotify';
}

现在您应该看到正确的事件名称,而不是类名称。至少,这应该解决第一个问题事件名称错误。让我们看看这是否可以解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.