向特定用户发送推送通知 - Laravel

3
在我的 Laravel 应用中,我想使用 Pusher 向特定用户发送通知。
我将以下代码放置在我的方法中:
$pusher = App::make('pusher');

$pusher->trigger( 'notification-channel',
                  'notification-event', 
                   array('text' => 'this is a notification'));

return view('home');

将这个代码放在home.blade.php文件中:

<script src="//js.pusher.com/3.0/pusher.min.js"></script>
<script>

    var pusher = new Pusher("{{env("PUSHER_KEY")}}");
    var channel = pusher.subscribe('notification-channel');
    channel.bind('notification-event', function(data) {
      alert(data.text);
    });

但是这会让通知出现在任何用户面前。 另外一个问题是,用户必须在主页才能收到通知!

那么,我该怎么做才能向特定的用户发送通知,并使用户可以在任何页面收到它呢?

1个回答

9
为了让用户在任何页面都能接收到推送消息,可以将Pusher代码放入layout.blade.php文件中(如果有的话),或者放入所有页面都会继承的其他文件中。
如果要将推送消息发送给特定用户,可以将用户ID附加到频道后面。
'notification-channel:' . $user->id

那么在你的布局文件中,你需要监听该频道。

var user = <?php echo $user ; ?>;
var channel = pusher.subscribe('notification-channel:' + user.id);

虽然只有那个简单的用户可以收到通知,但是您的通知仍然是公开的。这意味着任何人都可以操纵他们的id并接收其他人的通知。如果您想要私人通知,您可以按照此处的说明进行操作:https://laravel.com/docs/5.4/broadcasting#authorizing-channels


1
尝试这个时,我得到了这个错误: Pusher.php第257行的PusherException: 无效的通道名称notification-channel:22 @EddyTheDove - Rowayda Khayri
2
我的错,尝试将冒号替换为点。这样它就变成了'notification-channel.' . $user->id; - EddyTheDove
通道命名规则不允许使用“:”字符。因此,我通过将通道名称更改为“notification-channel-”来修复了此错误。$user->id @EddyTheDove - Rowayda Khayri
是的,我注意到了。这就是为令我建议使用点号的原因。然而,在使用Laravel 5.4时,我使用冒号来表示我的频道,例如user:update等等... - EddyTheDove
我在我的Laravel应用程序中使用JWT身份验证。那么,我该如何从令牌中获取user_id并将其放入< script >标签中的blade文件中?@EddyTheDove - Rowayda Khayri
2
不管你使用什么方式,尽可能获取用户信息,可以通过 Auth::user() 或者从控制器直接将其传递给视图。实际上并不一定需要完整的用户信息,你可以只传递一个包含用户ID的变量。例如在你的控制器中这样处理:return view('viewname', ['userid' => 1]); - EddyTheDove

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接