应用程序范围内订阅频道

时间:2017-06-09 19:41:39

标签: laravel pusher

关于Pusher.js的快速提问。

我今天开始处理通知功能,并希望通过Pusher.js执行此操作,因为我将其用于聊天。

我在Laravel工作。我想要实现的是对应用程序的广泛订阅。当用户注册正在为他设置频道“notifications_channel”时,我将其存储在数据库中。我知道如何将用户注册到频道,但一旦他离开该页面,房间就会腾空。这不是我想要的,因为我想发送用户通知,无论他在平台上的哪个位置。

我在文档中找不到这样的东西,所以我想也许你们其中一个人知道怎么做。

以下是我所做的一些片段:

当用户注册时我点火:
$generateChannel = User::generateNotificationsChannel($request['email']);

这在我的模型中对应:

public static function generateNotificationsChannel($email){
    $userID = User::getIdByMail($email);
    return self::where('email', $email)->update(['notifications_channel' => $userID."-".str_random(35)]);
}

这是相当基本的,但就目前而言,这就是我所需要的一切。

所以现在,当用户登录我的HomeController的Index函数时,它会从数据库收集NotificationsChannel并将其发送到视图。

public function index()
{
    $notificationsChannel = User::getUserNotificationsChannel(\Auth::user()->id);
    return view('home', compact('notificationsChannel', $notificationsChannel));
}

一旦我们到达那里,我只需将用户订阅到该频道,并将他绑定到与频道相关的任何事件:

var notifications = pusher.subscribe('{{$notificationsChannel}}');
channel.bind('new-notification', notifyUser);

function notifyUser(data){
    console.log(data);
}

你可以看到,现在它非常基本。但我的调试控制台告诉我,一旦用户离开/家,频道就会空出来。

所以问题是,无论他在平台上的哪个位置,我如何让他订阅频道?

非常感谢任何和所有帮助!

提前致谢。

1 个答案:

答案 0 :(得分:1)

我已经找到了解决此问题的方法,我已经决定将通知频道发送到我的母版布局,用于在用户登录后扩展所有视图。在我的主布局中我订阅了用户自己的通知频道。

对于那些可能对我如何做的人感兴趣:

我更改了我可以在width:100%中找到的AppServiceProvider的启动功能。代码如下所示:

\app\Providers\AppServiceProvider

在我的母版布局中,我只是通过抓取频道名称来订阅用户。