2017-06-09 90 views
1

有關Pusher.js的快速問題。應用程序廣泛訂閱頻道

我已經開始今天在通知功能的工作,並希望與Pusher.js要做到這一點,因爲我用了我的聊天。

我正在Laravel工作。我想實現的是應用程序範圍內的頻道訂閱。當用戶註冊一個頻道時,他正在爲他製作「notifications_channel」,這是我在數據庫中存儲的。我知道如何註冊一個用戶到一個頻道,但是一旦他離開那個頁面,房間就騰空了。這不是我正在尋找的,因爲無論他在哪個平臺上,我都想發送用戶通知。

我真的無法找到文檔中像這樣的東西,所以我想也許你們的人知道如何做到這一點。

下面是我做的一些片段:

當用戶registrates我火了這一點:
$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的索引功能在用戶登錄時被解僱,這從數據庫中收集了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

嗨艾伯特,而不是編輯您的問題發佈您的版本作爲一個新的答覆,並將其標記爲正確的 – gmsantos

回答

1

我已經找到了解決這個問題,我已經決定要通知信道發送到我的主人的佈局,我用的是在用戶登錄後,延長所有意見。在我的總體佈局我的訂閱用戶訪問他自己的通知頻道。

誰的人可能有興趣我是如何做的:

我改變了我的AppServiceProvider的引導功能,你可以在\app\Providers\AppServiceProvider找到。代碼如下所示:

public function boot() 
{ 
    view()->composer('layouts.app', function($view){ 
     $channel = User::getUserNotificationsChannel(\Auth::user()->id); 
     $view->with('data', array('channel' => $channel)); 
    }); 
} 

在我的主佈局中,我只是通過抓取通道名稱來訂閱用戶。