DEV Community

Cover image for Jak zarządzać członkostwem w kanale użytkownika za pomocą PubNub Chat SDK
PubNub Developer Relations for PubNub [Polski]

Posted on

Jak zarządzać członkostwem w kanale użytkownika za pomocą PubNub Chat SDK

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, wzmianki o użytkownikach, odniesienia do kanałów, wątki, potwierdzenia odczytu i wskaźniki pisania są natywnie obsługiwane przez SDK, co pozwala szybko zbudować pełnoprawną aplikację.

Zapoznaj się z naszą dokumentacją i przykładową aplikacją czatu, aby rozpocząć korzystanie z Chat SDK. Nasz samouczek przeprowadzi Cię przez podstawową funkcjonalność Chat SDK i dotknie niektórych bardziej zaawansowanych funkcji, podczas gdy nasze hostowane demo 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:

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 reprezentują osoby biorące udział w konwersacji.
  • Kanały 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 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 lub grupowe, użytkownicy w tej konwersacji są określani jako argumenty podczas tworzenia.

W poniższym przykładzie, zaczerpniętym z dokumentacji, dwaj użytkownicy "agent-007" i "agent-008" są członkami kanału "group-chat-1".

// 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"
    
  }
)
Enter fullscreen mode Exit fullscreen mode

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. Na przykład, aby uzyskać członków kanału, który właśnie utworzyliśmy:

// 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
Enter fullscreen mode Exit fullscreen mode

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() i leave( ), umożliwiając tworzenie dynamicznych kanałów. Użytkownicy mogą również zostać zaproszeni 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/.

Kod napędzający to demo jest dostępny na GitHub, ale kluczowe punkty są następujące:

Upewnij się, że masz instancję obiektu Chat w swojej aplikacji

const chat = await Chat.init({
  publishKey: "YOUR_PUBLISH_KEY",
  subscribeKey: "YOUR_SUBSCRIBE_KEY",
  userId: "YOUR_USER_ID",
})
Enter fullscreen mode Exit fullscreen mode

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 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.

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) 
    }
  }
Enter fullscreen mode Exit fullscreen mode

Jak wspomniano w powyższych komentarzach do kodu, wywołanie user.getMemberships() 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:

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) 
    }
  }
Enter fullscreen mode Exit fullscreen mode

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 jest dostępne dla naszego Chat SDK i jest omówione na dole tego przewodnika.

Metadane członkostwa w kanale

Obiekt 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 w dowolnym momencie przez indywidualnego użytkownika.

Aby śledzić, kiedy metadane członkostwa są aktualizowane, Chat SDK udostępnia metody streamUpdates() i streamUpdatesOn() dla obiektu Membership.

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

channelMembership?.membership.streamUpdates(async (membership) => {
  //  Stream updates on the channel as follows
  console.log(membership)
})
Enter fullscreen mode Exit fullscreen mode

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( ), 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, będziesz musiał wywołać connect( ) osobno, ale wywołanie join( ) wywoła connect() automatycznie.

Jeśli jesteś zaznajomiony z PubNub, to wywołanie connect () jest analogiczne do subscribe() i addListener().

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 z pełnym kodem źródłowym dostępnym na GitHub, 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.

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/.

Jak PubNub może ci pomóc?

Ten artykuł został pierwotnie opublikowany na PubNub.com

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

Rozpocznij konfigurację

Załóż konto PubNub, aby uzyskać natychmiastowy i bezpłatny dostęp do kluczy PubNub.

Rozpocznij

Dokumenty PubNub pozwolą Ci rozpocząć pracę, niezależnie od przypadku użycia lub zestawu SDK.

Top comments (0)