我正在尝试使用推送器从 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');
}
}
尝试重写以下方法并使用您的事件名称,如下所示:
/**
* The event's broadcast name.
*
* @return string
*/
public function broadcastAs()
{
return 'eventnotify';
}
现在您应该看到正确的事件名称,而不是类名称。至少,这应该解决第一个问题事件名称错误。让我们看看这是否可以解决问题。