Jak włączyć i skonfigurować PubNub Presence
Published: 2024-05-14 06:58:06

Jak wykryć, kiedy użytkownik przechodzi w tryb online lub offline, lub skąd wiadomo, czy urządzenie klienckie jest połączone i kiedy się rozłącza? Obecność PubNub pozwala śledzić, kto jest połączony z Twoimi kanałami w czasie rzeczywistym i powiadamia Cię, gdy zmienia się ich status połączenia.

  
[![Embedded YouTube Video](https://img.youtube.com/vi/YGrrFUlO_Ys/0.jpg)](https://www.youtube.com/watch?v=YGrrFUlO_Ys)  
[Obejrzyj wideo](https://www.youtube.com/watch?v=YGrrFUlO_Ys)

System obecności jest bardzo elastyczny i umożliwia takie zastosowania jak:

-   Monitorowanie, kiedy użytkownicy dołączają lub opuszczają rozmowę na czacie
-   Wykrywanie, kiedy użytkownik jest online lub offline
-   Określanie, czy urządzenie IoT jest podłączone i dostępne
-   Zliczanie, ilu klientów jest podłączonych do kanału (zliczanie zajętości kanału).

Można również zdefiniować pewne informacje o stanie (metadane) towarzyszące obecności klienta, które będą odbierane przez wszystkich zainteresowanych odbiorców; na przykład, chociaż obecność klienta jest "online", użytkownik może ustawić swój niestandardowy status jako "nieobecny" lub "nie przeszkadzać".

Aby włączyć obecność PubNub, zaloguj się do [portalu administratora](https://admin.pubnub.com?utm_source=medium&utm_medium=syndication&utm_campaign=off_domain&utm_content=pl), przejdź do aplikacji i zestawu klawiszy, w którym chcesz włączyć obecność, i przełącz przełącznik obecności na ekranie konfiguracji tego zestawu klawiszy:

![Portal Configuration: Presence Enable](https://www.pubnub.com/cdn/3prze68gbwl1/7oSeiiPIy15BnZhVsZ3FsB/840c751c9826f614a75e00537e5d7967/portal_-_presence_on.png)

Zostaniesz poproszony o potwierdzenie, że chcesz włączyć obecność.

> Należy pamiętać, że włączenie obecności może skutkować znacznie większą liczbą transakcji, zwłaszcza w przypadku osób korzystających z planu cenowego opartego na transakcjach. Aby kontrolować liczbę transakcji, możesz użyć funkcji "Zarządzanie obecnością", wyjaśnionej w dalszej części tego artykułu.

![Portal Configuration: Presence Enable Confirm](https://www.pubnub.com/cdn/3prze68gbwl1/5DOhGhHU4bj028AJecCu83/bacca2c768b2cf2fe25294adf73acdec/portal_-_presence_enable.png)

Pamiętaj, aby zapisać wszelkie zmiany za każdym razem, gdy dokonujesz modyfikacji konfiguracji zestawu kluczy.

![Portal Configuration: Presence Confirm Changes](https://www.pubnub.com/cdn/3prze68gbwl1/2o4Ftz7WJeD3QA8TWPu9do/09c679b6e94617a702d0095b87d911c4/portal_-_save_changes.png)

Tryb ogłaszania
---------------

Po włączeniu, PubNub będzie automatycznie generował zdarzenia obecności, gdy klienci (użytkownicy lub urządzenia) subskrybują lub wypisują się z dowolnego kanału.

Gdy klient zasubskrybuje kanał, wygeneruje zdarzenie `dołączenia`:

```
{ "channel": "<nazwa kanału, do którego dołączono>", "action": "join", "occupancy": 2, // zajętość kanału "uuid": "<userid klienta, który dołączył>", "timetoken": "<Gdy nastąpiło dołączenie>" }
```

Gdy klient zrezygnuje z subskrypcji kanału, wygeneruje zdarzenie `opuszczenia` kanału:

```
{ "channel": "<nazwa kanału, który został opuszczony>", "action": "leave", "occupancy": 1, // zajętość kanału "uuid": "<userid klienta, który opuścił>", "timetoken": "<Kiedy nastąpiło opuszczenie>" }
```

Weźmy pod uwagę, że klient internetowy połączył się z kanałem, a użytkownik przymusowo zamknął kartę, zamiast pozwolić klientowi na rezygnację z subskrypcji:

Jeśli klient nie zrezygnuje wyraźnie z subskrypcji, ale zostanie wykryty jako nieobecny po pewnym czasie (domyślnie 300 sekund), zostanie wyzwolone zdarzenie `przekroczenia limitu czasu`:

```
{ "channel": "<nazwa połączenia kanału, które przekroczyło limit czasu>", "action": "timeout", "occupancy":1, // zajętość kanału "uuid": "<userid klienta, który przekroczył limit czasu>", "timetoken": "<When the timeout occurred>" }
```

### Generowanie Leave na TCP FIN lub RST

Zamiast czekać na zdarzenie przekroczenia limitu czasu w powyższym scenariuszu, inną opcją jest wykrycie na poziomie sieci, kiedy klient opuszcza kanał. Włączając opcję "Generate Leave on TCP FIN or RST" w zestawie kluczy, wymuszone zamknięcie karty przeglądarki w tym scenariuszu wygeneruje teraz zdarzenie `opuszczenia`, które zostanie uruchomione natychmiast, zamiast zdarzenia `przekroczenia` limitu czasu.

![Portal Configuration: Presence Generate Leave TCP FIN RST](https://www.pubnub.com/cdn/3prze68gbwl1/5wwJWjGkGOs9R0WFWsJgIu/b95da340d8265dab8edc83f69d94e348/portal_-_generate_leave_on_tcp_fin_or_rst.png)

### Debounce

Czasami klienci szybko `dołączają` i `opuszczają` kanały, albo z powodu problemów z siecią, albo z powodu projektu aplikacji. Aby uniknąć nadmiernej liczby zdarzeń `dołączania` i `opuszczania`, należy określić wartość `debounce` w sekundach. Gdy klient wygeneruje zdarzenie `dołączenia`, nie będzie mógł wygenerować kolejnego zdarzenia `dołączenia` przez kolejne dwie sekundy.

![Portal Configuration: Presence Debounce](https://www.pubnub.com/cdn/3prze68gbwl1/4j08CDBzBT3UOPoTraPoj4/e713d84db1011937c4c26700bc623e78/portal_-_debounce.png)

Tryb interwału
--------------

### Announce Max

Zdarzenia `dołączenia` i `opuszczenia` będą wyzwalane natychmiast, o ile liczba klientów w kanale pozostanie poniżej ustawienia "Announce Max", które domyślnie wynosi 20.

![Portal Configuration: Presence Announce Max](https://www.pubnub.com/cdn/3prze68gbwl1/5YNhk0OXtAoi9JYG2TpN3H/3ad226821767b7e806f8867806b83e1a/portal_-_announce_max.png)

Wraz ze wzrostem liczby użytkowników w kanale, liczba zdarzeń `dołączenia` i `opuszczenia` również wzrośnie, ale w pewnym momencie próba utrzymania wszystkich tych zdarzeń w czasie rzeczywistym staje się nieekonomiczna dla klienta. Rozważmy czat grupowy z 200 uczestnikami; czy klient musi aktualizować stan online każdego z tych uczestników, gdy przechodzą do trybu online lub offline? Byłoby to więcej informacji, niż ludzki użytkownik mógłby śledzić.

`Announce Max` można skonfigurować w zakresie od 1 do 100. **Gdy liczba klientów w kanale przekroczy "Announce Max", zdarzenia `dołączenia,` `opuszczenia` i `przekroczenia limitu czasu` nie** będą **już generowane, ale zostaną zastąpione zdarzeniem `interwału`**:

```
{ "channel: "<nazwa kanału, którego dotyczy zdarzenie>", "action": "interval", "occupancy": 4, // zajętość kanału "timetoken": "<Gdy wystąpiło zdarzenie interwału>" }
```

### Interwał

Można skonfigurować częstotliwość uruchamiania zdarzenia interwału, modyfikując opcję konfiguracji `Interval`. Dozwolone są wartości od 10 sekund do 300 sekund (5 minut).

![Portal Configuration: Presence Interval](https://www.pubnub.com/cdn/3prze68gbwl1/6c0nFLx1IzyRD4ky0xoixt/06b7ec3a799b8b15a07e2902019ab7d7/portal_-_interval.png)

Zdarzenie `interwału` będzie powiadamiać tylko o zajętości kanału, chyba że włączona zostanie opcja "Presence Deltas".

### Opóźnienia obecności

![Portal Configuration: Presence Deltas](https://www.pubnub.com/cdn/3prze68gbwl1/13VfH53S8l6KdQ8ap18PUp/0f843d5a9eb2e7cf40fd8c0e51b36d6f/portal_-_presence_deltas_on.png)

Po włączeniu opcji "Presence Deltas" zdarzenie `interwału` będzie również zawierać informacje o tym, którzy użytkownicy dołączyli lub opuścili kanał od poprzedniego zdarzenia `interwału`.

```
{ "channel": "<nazwa kanału, którego dotyczy zdarzenie>", "action": "interval", "occupancy": 3, // zajętość kanału "join": ["member4"], "leave": ["member3"], "timetoken": "<Gdy wystąpiło zdarzenie interwału>" }
```

Inne ustawienia
---------------

### Aktywny kanał powiadomień

Możesz nie być zainteresowany tym, ilu klientów jest połączonych z kanałem lub kim są ci klienci, ale zamiast tego możesz dbać tylko o to, czy ktoś jest subskrybentem kanału. Jeśli kanał ma 0 subskrybentów, jest uważany za `nieaktywny`. Kanał z 1 lub więcej subskrybentami jest uważany za `aktywny`.

Możesz zarejestrować się, aby otrzymywać powiadomienia, gdy kanał stanie się "aktywny" lub "nieaktywny", określając "Aktywny kanał powiadomień".

![Portal Configuration: Presence Active Notice Channel](https://www.pubnub.com/cdn/3prze68gbwl1/41uqM2t7RZbv7OhYQ0Sdnp/5a7bc69d5bfc4d0c35be69e8f99b1448/portal_-_active_notice_channel_populated.png)

Jeśli zostanie określony, będziesz otrzymywać wiadomości na tym kanale (w tym przykładzie nazwa kanału, który otrzymuje wiadomości to "notice\_channel"):

```
{ "channel": "<nazwa kanału, który stał się aktywny lub nieaktywny>", "status": "active", // lub nieaktywny "precise_timestamp": "<Kiedy wystąpiło zdarzenie interwału>" }
```

Należy pamiętać, że zdarzenia `aktywne` są wysyłane, gdy tylko zajętość kanału wzrośnie powyżej 0, ale zdarzenia `nieaktywne` kanału będą uruchamiane tylko wtedy, gdy kanał ma zajętość 0 przez 300 sekund lub dłużej.

### Filtrowanie strumieni

Opcja wyłączenia filtrowania strumieni została zachowana ze względów historycznych, a deweloperzy uzyskają niewielkie korzyści z wyłączenia tego ustawienia. Filtrowanie strumieni będzie zawierać metadane obecności w zdarzeniach publikowanych w kanałach obecności, umożliwiając stosowanie [filtrów klienta](https://www.pubnub.com/docs/general/channels/subscribe#message-filters?utm_source=medium&utm_medium=syndication&utm_campaign=off_domain&utm_content=pl) do tych zdarzeń obecności. Wyłączenie filtrowania strumieni nie zmniejsza liczby zdarzeń obecności; pozwala jedynie klientowi filtrować zdarzenia, które otrzymują - aby zmniejszyć liczbę zdarzeń obecności, należy użyć Zarządzania obecnością, wyjaśnionego w dalszej części tego artykułu.

![Portal Configuration: Presence Stream Filtering](https://www.pubnub.com/cdn/3prze68gbwl1/7MVxG7hUQ8T8txFn8ceil2/b7239d86329c74585defe51e15dbb855/portal_-_stream_filtering.png)

### Webhooki

Wcześniej strona konfiguracji zestawu kluczy pozwalała na określenie wielu webhooków, które byłyby uruchamiane, gdy wystąpiło którekolwiek z poniższych zdarzeń:

-   zdarzenie`dołączenia`
-   zdarzenie`opuszczenia`
-   zdarzenie przekroczenia`limitu` czasu
-   uruchomienie zdarzenia`interwału`
-   zdarzenie`zmiany` stanu
-   uruchomienie zdarzenia`aktywnego` lub `nieaktywnego``kanału`.

Te webhooki nie są już częścią konfiguracji zestawu kluczy, ale zostały przeniesione do funkcji Events & Actions. Webhooki nie będą omawiane w ramach tego artykułu, ale aby uzyskać więcej informacji, zapoznaj się z sekcją [Webhook Payload](https://www.pubnub.com/docs/serverless/events-and-actions/events#webhook-payload?utm_source=medium&utm_medium=syndication&utm_campaign=off_domain&utm_content=pl) w dokumentacji Events & Actions.

Zmiana stanu
------------

Jeśli chcesz wymienić pewne metadane związane z obecnością klienta, najlepszym sposobem na osiągnięcie tego jest funkcja Presence State. Na przykład, chociaż zdarzenia `dołączenia` i `opuszczenia` omówione wcześniej informują o tym, czy klient jest online czy offline, nie informują o tym, czy użytkownik jest "zajęty" lub "nie przeszkadzać".

Klient może użyć PubNub SDK do ustawienia niestandardowego stanu na określonym `kanale` lub `grupie kanałów`. Po ustawieniu stan ten jest propagowany do innych klientów i odbierany jako zdarzenie `zmiany stanu`.

```
{ "channel": "<nazwa kanału powiązanego ze zmianą stanu>", "uuid": "<ID klienta, którego dotyczy stan>", "action": "state-change", "state": {<obiekt JSON definiujący stan>} "occupancy": 3, // zajętość kanału "timetoken": "<Kiedy nastąpiła zmiana stanu>" }
```

Zmiana stanu jest bardzo elastyczna i może być używana do wymiany dowolnych serializowalnych danych; na przykład nasze demo współpracy wykorzystuje stan obecności do powiadamiania słuchaczy o wystąpieniu zdarzenia `rysowania`, umożliwiając wspólną aplikację do rysowania, z doodles wyświetlanymi wszystkim widzom w czasie rzeczywistym

```
"state": {"x": 5, "y": 10, "color": "#FFFF00"}  // Przykładowy ładunek stanu dla aplikacji do rysowania
```

**Jedynym zastrzeżeniem dotyczącym zdarzeń zmiany stanu jest to, że nie są one trwałe**, więc powinny być używane tylko w przypadku danych efemerycznych lub danych, które każdy klient powinien śledzić.

Kontrolowanie zdarzeń otrzymywanych za pomocą Presence Management
-----------------------------------------------------------------

Jak wspomniano wcześniej, liczba zdarzeń obecności może łatwo stać się bardzo duża wraz ze wzrostem bazy użytkowników. Aby zapewnić większą kontrolę nad tym, które zdarzenia są uruchamiane na określonym kanale, wprowadziliśmy samoobsługowe narzędzie "Zarządzanie obecnością", które umożliwia tworzenie reguł kontrolujących, które zdarzenia obecności będą uruchamiane:

Narzędzie Presence Management można uruchomić za pomocą odpowiedniego przycisku na ekranie konfiguracji zestawu klawiszy:

![Portal Configuration: Presence Management](https://www.pubnub.com/cdn/3prze68gbwl1/3L5SZ54NPceHIcBn0hRDIg/9fd5c24690e40a9a05d616acb0900d6d/portal_-_presence_management.png)

Dostęp do narzędzia można również uzyskać z menu po lewej stronie w sekcji "BizOps Workspace".

Pełny opis sposobu konfigurowania reguł zarządzania znajduje się w [dokumentacji Presence](https://www.pubnub.com/docs/bizops-workspace/presence-management?utm_source=medium&utm_medium=syndication&utm_campaign=off_domain&utm_content=pl) Management, ale w skrócie:

1.  Utwórz nową regułę; możesz mieć wiele reguł, aby w pełni zdefiniować zdarzenia obecności, które chcesz wyzwolić dla swojej aplikacji.
2.  Określ zdarzenia, które mają być kontrolowane przez tę regułę, w tym `dołączenie,` `opuszczenie,` `przekroczenie limitu czasu,` `zmianę stanu` i `interwał`. W tym artykule opisano, czym są te reguły i kiedy są uruchamiane.
3.  Określ wzorzec wieloznaczny, aby zdefiniować kanał lub grupy kanałów, których dotyczy ta reguła; na przykład `personal-*` będzie dotyczyć wszystkich kanałów, które zaczynają się od `personal-`.
4.  Kliknij "Utwórz" i zdefiniuj kolejność, w jakiej reguły mają być stosowane.

Zarządzanie obecnością poprzez PubNub API
-----------------------------------------

Zdarzenia obecności można odbierać za pośrednictwem dowolnego z naszych zestawów SDK. W tym artykule skupiono się głównie na zdarzeniach związanych z obecnością, które są odbierane za pośrednictwem detektora zdarzeń SDK, ale nasze interfejsy API obsługują również dodatkowe funkcje pozwalające określić, kto nasłuchuje na określonym kanale`(``here` now) i gdzie subskrybowany jest określony użytkownik`(where now`).

W JavaScript, interfejs [API HereNow](https://www.pubnub.com/docs/sdks/javascript/api-reference/presence?utm_source=medium&utm_medium=syndication&utm_campaign=off_domain&utm_content=pl) można wywołać w następujący sposób, aby określić, kto jest subskrybentem określonego kanału:

```js
try {
  const result = await pubnub.hereNow({
    channels: ["my_channel"],
    includeState: true,
    includeUUIDs: true
  });
  console.log(“total occupancy: “ + result.totalOccupancy)
} catch (status) {
  console.log(status);
}
```

Więcej zasobów
--------------

Obecność jest jedną z najbardziej wartościowych i elastycznych funkcji platformy PubNub. Dokładna wiedza o tym, kto jest online i możliwość aktualizacji statusu w czasie rzeczywistym umożliwiła naszym klientom tworzenie intrygujących rozwiązań na przestrzeni lat.

-   Nasza dokumentacja [Presence Basics](https://www.pubnub.com/docs/general/presence/overview?utm_source=medium&utm_medium=syndication&utm_campaign=off_domain&utm_content=pl) jest dobrym punktem wyjścia do zrozumienia koncepcji obecności.
-   Nasza [dokumentacja Subscribe](https://www.pubnub.com/docs/general/channels/subscribe?utm_source=medium&utm_medium=syndication&utm_campaign=off_domain&utm_content=pl) zawiera przykłady pokazujące, jak zasubskrybować kanał z włączoną `obecnością` i odnieść się do dokumentacji specyficznej dla SDK dla przykładów API pokazujących, jak dodać wywołanie zwrotne słuchacza dla zdarzeń obecności (np. [ta strona](https://www.pubnub.com/docs/sdks/javascript/api-reference/publish-and-subscribe#add-listeners?utm_source=medium&utm_medium=syndication&utm_campaign=off_domain&utm_content=pl) dla naszego JavaScript SDK).
-   Aby uzyskać więcej praktyki, większość naszych samouczków będzie obejmować obecność, a dobrym miejscem startowym dla nowych programistów jest nasz [samouczek Pierwsze kroki](https://www.pubnub.com/tutorials/getting-started-chat-sdk/?utm_source=medium&utm_medium=syndication&utm_campaign=off_domain&utm_content=pl), który obejmuje kilka języków programowania. Samouczki będą również obejmować inne funkcje obecności, takie jak API "tutaj teraz", aby określić, kto słucha na kanale.

Wreszcie, jeśli potrzebujesz pomocy lub wsparcia, skontaktuj się z naszym [dedykowanym zespołem wsparcia pubnub](https://support.pubnub.com/hc/en-us?utm_source=medium&utm_medium=syndication&utm_campaign=off_domain&utm_content=pl) lub napisz do naszego zespołu ds. relacji z programistami na adres [devrel@pubnub.com](mailto:devrel@pubnub.com).

Jak PubNub może ci pomóc?
=========================

Ten artykuł został pierwotnie opublikowany na [PubNub.com](https://www.pubnub.com/how-to/admin-portal-presence/?utm_source=medium&utm_medium=syndication&utm_campaign=off_domain&utm_content=pl)

Nasza platforma pomaga programistom tworzyć, dostarczać i zarządzać interaktywnością w czasie rzeczywistym dla aplikacji internetowych, aplikacji mobilnych i urządzeń IoT.

Podstawą naszej platformy jest największa w branży i najbardziej skalowalna sieć komunikacyjna w czasie rzeczywistym. Dzięki ponad 15 punktom obecności na całym świecie obsługującym 800 milionów aktywnych użytkowników miesięcznie i niezawodności na poziomie 99,999%, nigdy nie będziesz musiał martwić się o przestoje, limity współbieżności lub jakiekolwiek opóźnienia spowodowane skokami ruchu.

Poznaj PubNub
-------------

Sprawdź [Live Tour](https://www.pubnub.com/tour/introduction/?utm_source=medium&utm_medium=syndication&utm_campaign=off_domain&utm_content=pl), aby zrozumieć podstawowe koncepcje każdej aplikacji opartej na PubNub w mniej niż 5 minut.

Rozpocznij konfigurację
-----------------------

Załóż [konto](https://admin.pubnub.com/signup/?utm_source=medium&utm_medium=syndication&utm_campaign=off_domain&utm_content=pl) PubNub, aby uzyskać natychmiastowy i bezpłatny dostęp do kluczy PubNub.

Rozpocznij
----------

[Dokumenty](https://www.pubnub.com/docs?utm_source=medium&utm_medium=syndication&utm_campaign=off_domain&utm_content=pl) PubNub pozwolą Ci rozpocząć pracę, niezależnie od przypadku użycia lub [zestawu SDK](https://www.pubnub.com/docs?utm_source=medium&utm_medium=syndication&utm_campaign=off_domain&utm_content=pl).