Jak zarządzać członkostwem w kanale użytkownika za pomocą PubNub Chat SDK
Tags: chatsdk, typescriptsdk, chatjavascript
Published: 2023-12-20 07:43:05

Wprowadzenie do PubNub Chat SDK
-------------------------------

PubNub Chat SDK, dostępny dla aplikacji TypeScript i JavaScript, udostępnia zestaw interfejsów API zaprojektowanych w celu ułatwienia dodawania potężnych i elastycznych funkcji czatu do aplikacji przy minimalnym rozwoju. Opcje czatu, takie jak [cytowanie](https://www.pubnub.com/docs/chat/chat-sdk/build/features/messages/quotes), [wzmianki o użytkownikach](https://www.pubnub.com/docs/chat/chat-sdk/build/features/users/mentions), [odniesienia do kanałów](https://www.pubnub.com/docs/chat/chat-sdk/build/features/channels/references), [wątki](https://www.pubnub.com/docs/chat/chat-sdk/build/features/messages/threads), [potwierdzenia odczytu](https://www.pubnub.com/docs/chat/chat-sdk/build/features/messages/read-receipts) i [wskaźniki pisania](https://www.pubnub.com/docs/chat/chat-sdk/build/features/typing-indicator) są natywnie obsługiwane przez SDK, co pozwala szybko zbudować pełnoprawną aplikację.

Zapoznaj się z naszą [dokumentacją](https://www.pubnub.com/docs/chat/chat-sdk/overview) i [przykładową aplikacją czatu](https://www.pubnub.com/docs/chat/chat-sdk/build/sample-chat), aby rozpocząć korzystanie z Chat SDK. Nasz [samouczek](https://www.pubnub.com/tutorials/chat-sdk/) przeprowadzi Cię przez podstawową funkcjonalność Chat SDK i dotknie niektórych bardziej zaawansowanych funkcji, podczas gdy nasze [hostowane demo](https://www.pubnub.com/demos/chat-sdk-mobile/) pokaże Chat SDK w akcji.

Ten poradnik jest częścią **serii postów** poświęconych niektórym z bardziej zaawansowanych funkcji PubNub Chat SDK. Serię można czytać w dowolnej kolejności, ale lista powiązanych artykułów znajduje się poniżej:

-   [Jak zarządzać członkostwem w kanałach użytkowników za pomocą Chat SDK](https://pubnub.com/how-to/chat-sdk-manage-user-channel-membership/)
-   [Jak dodawać reakcje i emotikony do wiadomości za pomocą zestawu Chat SDK](https://pubnub.com/how-to/chat-sdk-add-reactions-to-messages/)
-   [Jak tworzyć wątki i cytować wiadomości za pomocą Chat SDK](https://pubnub.com/how-to/chat-sdk-create-threads-and-quote-messges/)
-   [Jak wspominać użytkowników i kanały za pomocą Chat SDK](https://pubnub.com/how-to/chat-sdk-mention-users/)

Zarządzanie członkostwem w kanałach użytkowników
------------------------------------------------

Chat SDK definiuje kilka typów, które są ważne dla zrozumienia członkostwa w kanale:

-   [Użytkownicy](https://www.pubnub.com/docs/chat/chat-sdk/learn/chat-entities/user) reprezentują osoby biorące udział w konwersacji.
-   [Kanały](https://www.pubnub.com/docs/chat/chat-sdk/learn/chat-entities/channel) reprezentują konwersację między wieloma użytkownikami. Dokumentacja wykorzystuje analogię, że każdy kanał reprezentuje pojedynczy "pokój rozmów". Kanały mogą być bezpośrednie (tj. konwersacja 1:1 między dwoma użytkownikami), "grupowe" (tj. między wieloma nazwanymi użytkownikami) lub "publiczne".
-   [Członkostwo](https://www.pubnub.com/docs/chat/chat-sdk/learn/chat-entities/membership) reprezentuje relację między użytkownikami i kanałami z opcjonalnymi towarzyszącymi metadanymi.

W tym przewodniku omówiono sposób tworzenia i zarządzania członkostwem w kanałach.

### Jak użytkownicy dołączają do kanału

Istnieje wiele sposobów, w jakie użytkownik może zostać członkiem kanału. Gdy tworzone są kanały [bezpośrednie](https://www.pubnub.com/docs/chat/chat-sdk/build/features/channels/create#create-direct-channel) lub [grupowe](https://www.pubnub.com/docs/chat/chat-sdk/build/features/channels/create#create-group-channel), użytkownicy w tej konwersacji są określani jako argumenty podczas tworzenia.

W poniższym przykładzie, zaczerpniętym [z dokumentacji](https://www.pubnub.com/docs/chat/chat-sdk/build/features/channels/create#basic-usage-1), dwaj użytkownicy "agent-007" i "agent-008" są członkami kanału "group-chat-1".

```js
// reference both agents you want to talk to
const user1 = await chat.getUser("agent-007")
const user2 = await chat.getUser("agent-008")

// add the channel ID, name, and topic
const { channel, hostMembership, inviteeMembership } = await chat.createGroupConversation(
  {
    users: 
    [
      user1,
      user2
    ],
    channelId: "group-chat-1"
    …
  }
)
```

Możesz zapytać, czy użytkownik jest członkiem kanału na wiele sposobów, a pełne szczegóły można znaleźć w [dokumentacji dotyczącej członkostwa w kanale](https://www.pubnub.com/docs/chat/chat-sdk/build/features/channels/membership). Na przykład, aby uzyskać członków kanału, który właśnie utworzyliśmy:

```js
// reference the "channel" object
const channel = await chat.getChannel("group-chat-1")
const members = await channel.getMembers()
//  members contains both users, so members.total === 2
```

Jeśli użytkownicy nie są przypisani do kanału podczas jego tworzenia, mogą dołączyć lub opuścić go później za pomocą odpowiednich metod [join()](https://www.pubnub.com/docs/chat/chat-sdk/build/features/channels/join) i [leave(](https://www.pubnub.com/docs/chat/chat-sdk/build/features/channels/leave) ), umożliwiając tworzenie dynamicznych kanałów. Użytkownicy mogą również zostać [zaproszeni](https://www.pubnub.com/docs/chat/chat-sdk/build/features/channels/invite) do członkostwa w kanale.

Możesz zobaczyć to zachowanie w krótkim demo poniżej. Ponieważ jest to żywe, działające demo, zauważ, że członkostwo w kanale będzie trwało nawet po odświeżeniu strony.

Interaktywne demo
-----------------

  
**Jeśli osadzona zawartość nie jest dostępna** na tej stronie, można ją również wyświetlić pod adresem [https://chat-sdk-how-to-membership.netlify.app/](https://chat-sdk-how-to-membership.netlify.app/).

Kod napędzający to demo jest dostępny na [GitHub](https://github.com/PubNubDevelopers/Chat-SDK-How-Tos/tree/main/membership), ale kluczowe punkty są następujące:

Upewnij się, że masz instancję [obiektu Chat](https://www.pubnub.com/docs/chat/chat-sdk/learn/chat-entities/chat) w swojej aplikacji

```js
const chat = await Chat.init({
  publishKey: "YOUR_PUBLISH_KEY",
  subscribeKey: "YOUR_SUBSCRIBE_KEY",
  userId: "YOUR_USER_ID",
})
```

Istnieje wiele możliwych parametrów, które można przekazać do Chat SDK, ale do członkostwa w kanale nie potrzeba nic więcej niż standardowy klucz publikowania, klucz subskrypcji i identyfikator użytkownika. Jeśli wszystko to jest dla Ciebie nowe i nie wiesz, od czego zacząć, zapoznaj się z sekcją [konfiguracji początkowej](https://www.pubnub.com/docs/chat/chat-sdk/build/configuration) w naszej dokumentacji.

Dołącz do kanału. Ten kod rejestruje się również w celu otrzymywania aktualizacji członkostwa, co omówiono w następnej sekcji.

```js
async function join(channelName: string)
  {
    if (chat)
    {
      const channel = await chat.getChannel(channelName)
      const channelMembership = await channel?.join(() => null)
      channelMembership?.membership.streamUpdates(async (membership) => {
        //  Stream updates on the channel as follows
        console.log(membership)
      })
      
      //  For brevity, ignore that this call could contain multiple pages of memberships
      const {memberships} = await chat.currentUser.getMemberships()
      setMyMemberships(memberships) 
    }
  }
```

Jak wspomniano w powyższych komentarzach do kodu, wywołanie [user.getMemberships()](https://www.pubnub.com/docs/chat/chat-sdk/build/features/channels/membership#get-membership) może zawierać stronicowane dane, jeśli istnieje zbyt wiele kanałów.

Kod, który obsługuje przyciski "opuść kanał" w wersji demonstracyjnej, jest następujący:

```js
async function leave(channelName: string)
  {
    if (chat)
    {
      const channel = await chat.getChannel(channelName)
      await channel?.leave();
      //  For brevity, ignore that this call could contain multiple pages of memberships
      const {memberships} = await chat.currentUser.getMemberships()
      setMyMemberships(memberships) 
    }
  }
```

Aby zachować prostotę demo, istnieje tylko jeden użytkownik i tylko jego członkostwo jest brane pod uwagę. W prawdziwej aplikacji będziesz mieć wielu użytkowników, każdy z własnym członkostwem w kanale. Bardziej [realistyczne demo](https://www.pubnub.com/demos/chat-sdk-mobile/) jest dostępne dla naszego Chat SDK i jest omówione na dole tego przewodnika.

### Metadane członkostwa w kanale

Obiekt [Membership](https://www.pubnub.com/docs/chat/chat-sdk/learn/chat-entities/membership) umożliwia określenie niestandardowych metadanych związanych z powiązaniem między kanałem a użytkownikiem; na przykład, jeśli był to czat związany z zapytaniem o pomoc techniczną, można zapisać rolę użytkownika jako {role: "support technician"}.

Metadane mogą być deklarowane podczas tworzenia członkostwa lub mogą być [aktualizowane](https://www.pubnub.com/docs/chat/chat-sdk/build/features/channels/membership#update) w dowolnym momencie przez indywidualnego użytkownika.

Aby śledzić, kiedy metadane członkostwa są aktualizowane, Chat SDK udostępnia metody [streamUpdates() i streamUpdatesOn()](https://www.pubnub.com/docs/chat/chat-sdk/build/features/channels/membership#get-updates) dla obiektu [Membership](https://www.pubnub.com/docs/chat/chat-sdk/learn/chat-entities/membership).

Jak pokazano we wcześniejszym demo, można śledzić zmiany metadanych członkostwa w następujący sposób:

```js
channelMembership?.membership.streamUpdates(async (membership) => {
  //  Stream updates on the channel as follows
  console.log(membership)
})
```

### Dlaczego użytkownicy powinni dołączać do kanału?

Jednym z założeń jest to, że użytkownicy muszą dołączyć do kanału, aby otrzymywać wiadomości na tym kanale, ale tak nie jest. Aby odbierać wiadomości na kanale, można wywołać metodę [connect(](https://www.pubnub.com/docs/chat/chat-sdk/build/features/channels/watch) ), w której można podać wywołanie zwrotne wywoływane za każdym razem, gdy wiadomość zostanie odebrana. Jeśli nie zostałeś członkiem kanału podczas jego [tworzenia](https://www.pubnub.com/docs/chat/chat-sdk/build/features/channels/create), będziesz musiał wywołać connect( [)](https://www.pubnub.com/docs/chat/chat-sdk/build/features/channels/watch) osobno, ale wywołanie [join(](https://www.pubnub.com/docs/chat/chat-sdk/build/features/channels/join) ) wywoła connect() automatycznie.

Jeśli jesteś zaznajomiony z PubNub, to wywołanie [connect](https://www.pubnub.com/docs/chat/chat-sdk/build/features/channels/watch) () jest analogiczne do [subscribe()](https://www.pubnub.com/docs/general/channels/subscribe) i [addListener()](https://www.pubnub.com/docs/general/messages/receive).

Dlaczego więc warto dołączyć do kanału? Dołączenie do kanału i powiązane członkostwo w kanale ma fundamentalne znaczenie dla sposobu, w jaki Chat SDK rozumie relacje między użytkownikami, więc jest wymagane do korzystania z wielu bardziej zaawansowanych funkcji SDK, takich jak potwierdzenia odczytu, wzmianki o użytkownikach, liczba nieprzeczytanych wiadomości, moderacja i wskaźnik pisania.

Podsumowanie członkostwa
------------------------

-   **Co to jest?** Relacja między użytkownikiem a kanałem, z konfigurowalnymi metadanymi.
-   **Jak tworzone jest członkostwo?** Użytkownicy mogą być powiązani z kanałem podczas jego tworzenia lub mogą dołączyć sami lub zostać zaproszeni przez innych do kanału po jego utworzeniu.
-   **W jaki sposób członkostwo jest niszczone?** Użytkownicy mogą opuścić kanał w dowolnym momencie
-   **Jak śledzone jest członkostwo?** Członkowie kanału mogą być sprawdzani za pomocą funkcji getter, a ty możesz być powiadamiany o zmianach, rejestrując się w celu aktualizacji.
-   **Typowe pułapki:** Członkostwo nie zawsze oznacza otrzymywanie wiadomości na kanale; należy uważnie przeczytać dokumentację, gdy trzeba wywołać connect() osobno.
-   **Jakieś inne ograniczenia?** Chociaż możesz dołączyć do kanałów "publicznych", kilka funkcji, takich jak potwierdzenia odczytu lub wskaźnik pisania, nie jest obsługiwanych dla tego typu kanałów.
-   **Jakie funkcje są wymagane w zestawie kluczy PubNub?** Pamiętaj, aby włączyć App Context w swoim zestawie kluczy.

Demo: Członkostwo w kanale użytkownika w akcji
----------------------------------------------

Nasze demo Chat SDK dla urządzeń mobilnych, dostępne jako [hostowane demo](https://www.pubnub.com/demos/chat-sdk-mobile/) z pełnym kodem źródłowym dostępnym na [GitHub](https://github.com/pubnub/js-chat/tree/master/samples/react-native-group-chat), wykorzystuje członkostwo do zarządzania konwersacjami użytkowników. **Powinieneś także zobaczyć demo renderowane w iFrame na dole tej sekcji**.

![Two smartphones displaying chat application interfaces, one with chat settings and the other showing a conversation window.](https://images.ctfassets.net/3prze68gbwl1/7yuFtoqdBT21RfmAhxKSDs/ce53179847eb502be3ef8c0f8ea1e686/membership.png)

Wykonaj następujące kroki, aby zobaczyć członkostwa używane w naszym demo:

1.  Zaloguj się do aplikacji, wybierając losowy identyfikator użytkownika dla każdego z dwóch urządzeń.
2.  Utwórz grupę, klikając ikonę "nowy czat", a następnie wybierając "Utwórz czat grupowy".
3.  Wybierz dwa identyfikatory użytkowników, jako których właśnie się zalogowałeś, i przypisz nazwę dla grupy.
4.  Za kulisami aplikacja utworzyła członkostwo, aby powiązać każdego z dwóch użytkowników z nowo utworzoną grupą.
5.  Wejdź do konwersacji grupowej, klikając utworzoną jednostkę w sekcji "Grupy".
6.  Dotknij nazwy grupy w górnej części ekranu, aby zobaczyć ustawienia czatu użytkownika (jak pokazano na lewym obrazku powyżej)
7.  Zauważ, że nazwa tego użytkownika jest "członkiem" czatu.
8.  Zauważ, że jeśli wycofasz się z rozmowy lub nawet wylogujesz się i wrócisz do aplikacji, reakcje zostaną zachowane i odczytane z historii wiadomości.

  
**Jeśli osadzona zawartość nie jest dostępna** na tej stronie, można ją również wyświetlić pod adresem [https://pubnubdevelopers.github.io/Chat-SDK-Demo/mobile/](https://pubnubdevelopers.github.io/Chat-SDK-Demo/mobile/).

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

Ten artykuł został pierwotnie opublikowany na [PubNub.com](https://pubnub.com/how-to/chat-sdk-manage-user-channel-membership/)

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/), aby zrozumieć podstawowe koncepcje każdej aplikacji opartej na PubNub w mniej niż 5 minut.

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

Załóż [konto](https://admin.pubnub.com/signup/) PubNub, aby uzyskać natychmiastowy i bezpłatny dostęp do kluczy PubNub.

Rozpocznij
----------

[Dokumenty](https://www.pubnub.com/docs) PubNub pozwolą Ci rozpocząć pracę, niezależnie od przypadku użycia lub [zestawu SDK](https://www.pubnub.com/docs).