Sign inGet Started

Kanały presence

Kanał, którego nazwa zaczyna się od presence-, używa autoryzacji kanału prywatnego i dodaje tożsamość członka. Twój backend przypisuje każdemu subskrybentowi member_id. Subskrybenci otrzymują bieżącą listę członków oraz zdarzenia dołączania i opuszczania kanału.

Używaj kanałów presence do list online, podglądu dokumentów, wskaźników pisania lub współdzielonych kursorów.

Subskrypcja

const room = bird.subscribe("presence-room-1");

room.bind("bird:subscription_succeeded", () => {
  console.log("me:", room.myId);
  console.log("here now:", [...room.members.values()]);
});

room.bind("bird:member_added", (member) => console.log("joined", member.member_id));
room.bind("bird:member_removed", (member) => console.log("left", member.member_id));

W Swift i Kotlin subscribe zwraca bazowy typ kanału. Rzutuj go na PresenceChannel przed uzyskaniem dostępu do myId lub members. Swift udostępnia mapę członków dla bird:subscription_succeeded oraz Member dla zdarzeń dołączania i opuszczania. Kotlin udostępnia każde zdarzenie jako JsonElement. W obu klientach odczytuj bieżący roster z room.members.

bird:subscription_succeeded uruchamia się po zakończeniu subskrypcji. W tym momencie room.members zawiera bieżący roster, a room.myId zawiera Twój member_id. Wyrenderuj ten początkowy roster przed zastosowaniem późniejszych zdarzeń dołączania i opuszczania.

Autoryzacja przebiega tak samo jak w kanale prywatnym, z jednym dodatkiem: Twój endpoint zwraca member_data, ciąg JSON zawierający member_id i opcjonalny member_info, i musi podpisać dokładnie ten ciąg. Zobacz Autoryzacja kanałów.

Używaj member_info bezpiecznie

Każdy członek kanału otrzymuje member_info. Używaj go do małych, publicznych danych profilowych, takich jak nazwa wyświetlana lub URL awatara. Nie umieszczaj w nim adresów e-mail, ról autoryzacyjnych ani innych wrażliwych danych.

Twój backend przypisuje member_id i member_info w podpisanej odpowiedzi autoryzacyjnej. Klient może zażądać subskrypcji, ale nie może wybrać podpisanej tożsamości.

Członkowie i połączenia

Jeden członek może mieć kilka połączeń. Na przykład trzy otwarte karty tworzą jednego członka i trzy połączenia:

Co się dziejeZdarzenie członkaLiczba połączeń kanału
Pierwsza karta subskrybujebird:member_added1
Druga karta subskrybujebrak2
Druga karta się zamykabrak1
Ostatnia karta się zamykabird:member_removed0

room.members reprezentuje tożsamości zamiast sesji. Kanały obecności nie emitują zdarzeń bird:connection_count. Aby odczytać liczbę otwartych połączeń, włącz Connection counting i wywołaj Pobierz kanał z serwera z parametrem include=connection_count. Używaj bird:member_added i bird:member_removed, aby aktualizować listę członków.

Odczyt obecności z serwera

Istnieją dwa odczyty po stronie serwera i żaden nie wymaga subskrypcji:

member_count działa tylko w kanałach presence. Żądanie go na kanale publicznym lub prywatnym jest błędem walidacji, ponieważ te kanały nie mają członków.

Możesz też zażądać go podczas publikowania, co zwraca stan każdego docelowego kanału w danym momencie. Zobacz Publikowanie zdarzeń.

Następne kroki

Przejdź do dokumentacji, przewodników i przykładów dotyczących tego tematu.