3

我有使用 laravel 的社交网络网站。当为特定用户设置通知时,我的通知系统运行良好。但是假设一个用户成为版主,我想通知所有用户该事件有没有办法做到这一点而不向所有用户插入相同的通知?

我想到的一种解决方案是

我正在考虑将通知user_id设置为0,这表明它适用于所有用户,顺便说一下,我不希望这种通知中的 read_at 属性,所以不需要另一个带有 FK 的表,所以如果这个可以是解决方案,因此如何插入它以及如何沿着用户的通知关系检索它们

4

4 回答 4

5

您可以简单地使用Notification Facade。您可以像这样获取所有用户并向他们发送通知,

$users = Users::all();
Notification::send($users, new MyNotification($param));

你需要像这样调用通知门面

use Illuminate\Support\Facades\Notification;
于 2019-04-25T07:20:24.703 回答
1

我和你有同样的问题,并使用了相同的方法user_id 0,表示它适用于所有关注者。一个通知只与数据一起插入,并且设置了一个额外的子通知表来保存对每个关注者的通知 ID 的引用,而不重复数据。

在此处查看完整的解决方案:Laravel 5.3 - 用户收藏的单一通知(关注者)

于 2018-03-29T12:28:22.833 回答
1

如果您想通知许多用户,您可以遍历所有用户使用queues

如果您只想一次发送一堆电子邮件,请使用直接使用邮件服务 API的可用软件包之一来发送大量电子邮件,而不是一个一个地发送它们。

如果你想向所有使用你应用的当前用户广播事件,请使用Laravel 广播功能。你想要的是使用公共频道。

事件通过“频道”广播,可以指定为公共或私人。您的应用程序的任何访问者都可以订阅公共频道而无需任何身份验证或授权。

https://laravel.com/docs/5.5/broadcasting#concept-overview

于 2017-10-21T07:19:17.407 回答
0

从 mysql 表中获取所有用户的 fcm 令牌

    $token_ids = Userdevices::pluck('fcm_token')->toArray();
    $this->send_admin_notification($token_ids,"title","body message","image url");

向所有用户发送通知

public function send_admin_notification($token_ids ,$title, $message,$imageURL){
    $authorization_key = "AAAADnklIkA:APA91...";

    $finalPostArray = array('registration_ids' => $token_ids,
                            'notification' => array('body' => $message,
                                                    'title' => $title,
                                                    "image"=> $imageURL),
                            "data"=> array("click_action"=> "FLUTTER_NOTIFICATION_CLICK",
                                            "sound"=> "default", 
                                            "status"=> "done")); 
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,"https://fcm.googleapis.com/fcm/send");
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS,json_encode($finalPostArray));  //Post Fields
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Authorization: key='.$authorization_key));
    $server_output = curl_exec ($ch);
    curl_close ($ch);
    //echo $server_output; 
}
于 2021-04-03T05:10:17.903 回答