Kom i gang med Pusher Bruk Presence Channels

I denne serien har vi lært om kanaler fra Pusher, en plattform som lar deg gi brukerne den sømløse sanntidsopplevelsen de vil ha.

Tilstedeværelseskanaler bygger på sikkerheten som tilbys av private kanaler, men de gir fordelen av å vite hvilke brukere som abonnerer og er koblet til den kanalen. Den beste delen er hvor enkelt det er å implementere og bruke tilstedeværelseskanaler, og det er enda enklere hvis du allerede har konfigurert appen din til å bruke private kanaler. Du lærer hvordan du bruker tilstedeværelseskanaler i dette innlegget.

 

En enda bedre Chat App

Vårt chatprogram bruker for tiden en privat kanal for å lette øyeblikkelig, kunde / serverkommunikasjon. Så å konfigurere vår app for å bruke en tilstedeværelseskanal, vil være ekstremt lett. La oss starte med server-appen.

Endre serveren

For å kunne bruke en privat kanal, konfigurerte vi et sluttpunkt for å sikre at en bruker er autentisert med vår søknad. Dette endepunktet utfører ChannelsController's authorizeUser () metode, og det kaller Pusher-bibliotekets socket_auth () metode for å verifisere brukeren. For å kunne bruke en tilstedeværelseskanal, må vi endre authorizeUser () å ringe til Pusher-biblioteket presence_auth () metode, slik:

offentlig funksjon authorizeUser (Request $ request) if (! Auth :: check ()) returner nytt svar ('Forbidden', 403);  $ presenceData = ['name' => Auth :: bruker () -> navn]; echo $ this-> pusher-> presence_auth ($ request-> input ('channel_name'), $ request-> input ('socket_id'), Auth :: bruker () -> id, $ presenceData); 

Men metodenavnendringen er bare den første modifikasjonen; vi må også gi presence_auth () med brukerens unike identifikator og eventuell ekstra informasjon vi ønsker å gi om brukeren. Ovennevnte kode lagrer disse ekstra brukerdataene i $ presenceData variabel og sender den som det siste argumentet til presence_auth ().

I tillegg må vi modifisere sende melding() metode. Den første endringen er kanalnavnet. Akkurat som med alle våre andre navn, må vi prefikse kanalnavnet for å angi hvilken type kanal vi vil bruke: tilstedeværelse- i dette tilfellet, som vist i følgende kode.

$ this-> pusher-> trigger ('presence-chat', 'send-message', $ data);

Vi kan også endre dataene vi sender med hendelsen, i stedet for å levere brukerens navn som startet arrangementet, vi kan inkludere brukerens ID.

$ data ['user'] = Auth :: bruker () -> id;

Fordi vi skal bruke en tilstedeværelseskanal, kan vi slå opp brukernavnene fra klienten, og denne lille endringen vil redusere størrelsen på data som går over nettverket.

Endre klienten

Klientens kanal Objektet inneholder alt vi trenger for å jobbe med den abonnerte kanalen, og spørring av brukerdata er ikke noe unntak. Våre kanal objektet har en eiendom som kalles medlemmer som vi kan bruke til å hente en bestemt brukerinformasjon. Vi bruker dette objektet i sende melding hendelseshåndterer, slik:

this.channel.bind ('send-message', (data) => la bruker = this.channel.members.get (data.user); this.messages.push (message: data.message, user: user .info.name););

Her ringer vi this.channels.members.get () og send inn brukerens ID (husk, serverprogrammet vårt leverer nå ID i stedet for navnet). Denne metoden returnerer et objekt med en info eiendom, og dette info objekt inneholder all den ekstra informasjonen vi oppgav i $ presenceData variabel i authorizeUser () metode på serveren. Så i ovennevnte kode, henter vi brukerens navn med user.info.name.

Vi kan også endre avtrekker() Metode for å inkludere informasjon om brukeren som initierte klientalarmhendelsen. For å hente den innloggede brukerens medlemsdata, bruker du meg eiendom, som vist i følgende kode:

utløser (eventnavn, melding) this.channel.trigger (eventName, message, user: this.channel.members.me); 

I denne koden legger vi til en bruker eiendom til hendelses nyttelast og sett den til den loggede brukerens brukerobjekt. Dette betyr at vi kan endre klient-send-alarm hendelseshåndterer for å inkludere brukerens navn med alarmmeldingen, slik:

this.channel.bind ('klient-send-alarm', (data) => varsel ('$ data.user.info.name: $ data.message'));

Her bruker vi data.user.info.name for å få tilgang til brukerens navn slik at vi kan se hvilken bruker som sendte alarmen, som vist her:

Konklusjon

Bruke tilstedeværelseskanaler gir ikke bare søknaden din med den økte sikkerheten til en anonym kanal, men gir deg også muligheten til å søke brukerdata for brukere som abonnerer på kanalen. Med kanaler fra Pusher er det utrolig enkelt å legge til sikker, sanntids- og funksjonsrik kommunikasjon til appene dine.