2017-06-09 2 views
1

Schnelle Frage über Pusher.js.Anwendung breites Abonnement für einen Kanal

Ich habe angefangen, heute an einer Benachrichtigungsfunktion zu arbeiten und wollte dies mit Pusher.js machen, da ich es für meinen Chat benutzt habe.

Ich arbeite in Laravel. Was ich erreichen möchte, ist ein anwendungsweites Abonnement für einen Kanal. Wenn sich ein Benutzer registriert, wird für ihn ein Kanal "notifications_channel" angelegt, den ich in der Datenbank ablege. Ich weiß, wie man einen Benutzer zu einem Kanal registriert, aber sobald er diese Seite verlässt, ist der Raum leer. Das ist nicht wirklich das, wonach ich suche, da ich den Benutzern immer Benachrichtigungen schicken möchte, egal wo er sich auf der Plattform befindet.

Ich konnte so etwas in der Dokumentation nicht wirklich finden, also dachte ich, vielleicht weiß einer von euch, wie man das macht.

Hier sind einige Auszüge von dem, was ich tun:

Wenn der Benutzer registrates ich das Feuer:
$generateChannel = User::generateNotificationsChannel($request['email']);

Das in meinem Modell entspricht dies:

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

Es ist recht einfach, , aber jetzt ist das alles was ich brauche.

Also für jetzt, wenn der Benutzer anmeldet die Index-Funktion meines HomeController wird gefeuert, die sammelt seinen NotificationsChannel von der Datenbank und sendet es an die Ansicht.

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

Sobald wir bekommen es einfach ich den Benutzer auf diesen Kanal abonnieren und binden ihn auf alle mit dem Kanal verbunden Ereignisse:

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

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

So wie Sie sehen können, denn jetzt ist es ziemlich einfach ist. Aber meine Debug-Konsole zeigt mir, dass der Kanal leer ist, sobald der Benutzer/home verlässt.

Die Frage ist also, wie mache ich ihn abonniert den Kanal, egal wo er auf der Plattform ist?

Jede und alle Hilfe würde sehr geschätzt werden!

Vielen Dank im Voraus.

+1

Hallo Albert, anstatt deine Frage zu bearbeiten, poste deine Ausgabe als neue Antwort und markiere sie als korrekt – gmsantos

Antwort

1

Ich habe eine Lösung für dieses Problem gefunden. Ich habe beschlossen, den Benachrichtigungskanal an mein Master-Layout zu senden, mit dem ich alle Ansichten nach dem Anmelden des Benutzers erweitern kann Benutzer zu seinem eigenen Benachrichtigungskanal.

Für Menschen, die daran interessiert sein könnten, wie ich es tat:

Ich änderte die Boot-Funktion meines AppServiceProvider, die Sie in \app\Providers\AppServiceProvider finden. Der Code sieht wie folgt aus:

In meinem Master-Layout habe ich den Benutzer einfach abonniert, indem ich den Kanalnamen gewählt habe.

Verwandte Themen