Laravel - 所有用户的一个通知

时间:2017-10-21 07:15:01

标签: php mysql laravel laravel-notification

我有使用laravel的社交网络网站。为特定用户设置通知时,我的通知系统运行良好。但是假设用户成为主持人并且我想通知所有用户该事件是否有办法在不向所有用户插入相同通知的情况下这样做?

我想到的一个解决方案是

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

4 个答案:

答案 0 :(得分:0)

如果您想要通知许多用户,您可以使用queues迭代所有用户。

如果您只想一次发送大量电子邮件,请使用直接使用邮件服务API的one of the available packages发送电子邮件块,而不是逐个发送。

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

  

事件通过"频道"广播,可以指定为公共或私人。您的应用程序的任何访问者都可以在没有任何身份验证或授权的情况下订阅公共频道。

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

答案 1 :(得分:0)

我遇到了与您相同的问题并使用user_id 0的相同方法来表示所有关注者。一个通知仅插入数据,并设置了一个额外的子通知表,以保留对每个关注者的通知ID的引用,而不重复数据。

在此处查看完整解决方案:Laravel 5.3 - Single Notification for User Collection (followers)

答案 2 :(得分:0)

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

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

您需要使用这种用法来呼叫通知外观

use Illuminate\Support\Facades\Notification;

答案 3 :(得分: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; 
}