<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: PubNub [Polski]</title>
    <description>The latest articles on Forem by PubNub [Polski] (@pubnub-pl).</description>
    <link>https://forem.com/pubnub-pl</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F7932%2F7c9d1cfc-a389-4829-9de8-7bca678c3b77.jpg</url>
      <title>Forem: PubNub [Polski]</title>
      <link>https://forem.com/pubnub-pl</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/pubnub-pl"/>
    <language>en</language>
    <item>
      <title>Jak korzystać z kontekstu aplikacji</title>
      <dc:creator>PubNub Developer Relations</dc:creator>
      <pubDate>Tue, 09 Jul 2024 06:42:11 +0000</pubDate>
      <link>https://forem.com/pubnub-pl/jak-korzystac-z-kontekstu-aplikacji-p89</link>
      <guid>https://forem.com/pubnub-pl/jak-korzystac-z-kontekstu-aplikacji-p89</guid>
      <description>&lt;p&gt;PubNub &lt;a href="https://www.pubnub.com/products/app-context/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;App Cont&lt;/a&gt; ext upraszcza tworzenie złożonych funkcji czasu rzeczywistego, zapewniając bezserwerowy mechanizm przechowywania informacji o użytkownikach, kanałach i członkostwie. App Context wyzwala zdarzenia przy każdej zmianie danych, umożliwiając aktualizację aplikacji w czasie rzeczywistym, a przechowywane dane mogą być wykorzystywane w &lt;a href="https://www.pubnub.com/products/illuminate/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Illuminate&lt;/a&gt;, &lt;a href="https://www.pubnub.com/products/functions/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Functions&lt;/a&gt; i innych usługach PubNub do podejmowania mądrzejszych decyzji. Możesz także zarządzać tymi danymi za pomocą intuicyjnego interfejsu &lt;a href="https://www.pubnub.com/how-to/manage-users-and-channels-with-bizops-workspace/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;BizOps Workspace&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Co to jest App Context?
&lt;/h2&gt;

&lt;p&gt;App&lt;a href="https://www.pubnub.com/docs/general/metadata/channel-metadata?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Context&lt;/a&gt; (wcześniej znany jako Objects) pozwala na:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Nadanie znaczenia użytkownikom i kanałom w aplikacji oraz relacjom między nimi.&lt;/li&gt;
&lt;li&gt;  Przechowywanie metadanych dla wszystkich podmiotów na serwerze, co ułatwia zapewnienie globalnego źródła prawdy dla klientów. Należy pamiętać, że użytkownik nie musi reprezentować człowieka, a zamiast tego często przechowuje się stan urządzenia w obiekcie użytkownika.&lt;/li&gt;
&lt;li&gt;  Otrzymywanie natychmiastowych zdarzeń w czasie rzeczywistym za każdym razem, gdy zmieniają się wartości obiektu.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Chociaż każda aplikacja może korzystać z App Context, jest on szczególnie popularny wśród programistów tworzących &lt;a href="https://www.pubnub.com/solutions/chat/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;rozwiązania Chat&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;App Context zapewnia zestaw sugerowanych pól dla &lt;a href="https://www.pubnub.com/docs/general/metadata/users-metadata?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;użytkowników&lt;/a&gt; i &lt;a href="https://www.pubnub.com/docs/general/metadata/channel-metadata?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;kanałów&lt;/a&gt;, a także sugerowane pola dla &lt;a href="https://www.pubnub.com/docs/general/metadata/membership-metadata?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;członkostwa&lt;/a&gt; między nimi. Większość z tych pól jest opcjonalna, więc możesz wybrać, które pola wypełniasz, a także podać własne pola niestandardowe.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8Gm6KiDx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/5ICbXWgNTJNc5kXAAQ4qJI/40b24d228d9ed97e17e47b027469bcdf/app_context_diagram.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8Gm6KiDx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/5ICbXWgNTJNc5kXAAQ4qJI/40b24d228d9ed97e17e47b027469bcdf/app_context_diagram.png" title="How-to - BizOps Workspace Manage Users and Channels - Image 01" alt="Diagram showing user management, memberhip, channel management" width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Przypadki użycia App Context
&lt;/h2&gt;

&lt;p&gt;Jak wspomniano, App Context jest szczególnie popularny wśród programistów tworzących rozwiązania Chat, ale może być używany w różnych przypadkach użycia:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Czat:&lt;/strong&gt; Przechowywanie informacji o użytkowniku (imię i nazwisko, zdjęcie profilowe, status "na wakacjach", stanowisko), informacje o kanale (ikona, opis, odbiorcy), role użytkowników i śledzenie ostatniej przeczytanej wiadomości na kanale, na użytkownika.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Sport, media i rozrywka:&lt;/strong&gt; Głosowanie i ankiety na żywo, ciekawostki na żywo, licytacja w czasie rzeczywistym, nakładki CTA (wezwanie do działania) dla towarów lub promocji.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Gry:&lt;/strong&gt; Statystyki gracza w czasie rzeczywistym, w tym poziom gracza, wygrane gry, odznaki; śledzenie i zarządzanie tabelą liderów&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Więcej:&lt;/strong&gt; Status nieobecności/aktywności użytkownika, wynik zaufania użytkownika do wykrywania oszustw, śledzenie lokalizacji użytkownika, statusy urządzeń IoT, takie jak poziom naładowania baterii lub ostatni odczyt czujnika.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Jak włączyć kontekst aplikacji
&lt;/h2&gt;

&lt;p&gt;Kontekst aplikacji można włączyć w następujący sposób:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Zaloguj się do &lt;a href="https://admin.pubnub.com/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;portalu administratora&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; Kliknij zakładkę "Aplikacje" po lewej stronie portalu.&lt;/li&gt;
&lt;li&gt; Kliknij aplikację. Zostaniesz przeniesiony na stronę zestawów kluczy dla tej aplikacji.&lt;/li&gt;
&lt;li&gt; Jeśli jeszcze tego nie zrobiłeś, utwórz nowy zestaw kluczy, klikając przycisk "Utwórz nowy zestaw kluczy". Nastąpi przejście do strony konfiguracji tego zestawu kluczy&lt;/li&gt;
&lt;li&gt; Włącz kontekst aplikacji, klikając suwak&lt;/li&gt;
&lt;li&gt; Ustawienie &lt;strong&gt;Bucket Region&lt;/strong&gt; to region, w którym przechowywane są dane. Należy pamiętać, że regionu nie można zmodyfikować po zapisaniu zmian w zestawie kluczy.&lt;/li&gt;
&lt;li&gt; Jeśli ustawienia &lt;strong&gt;User Metadata Events&lt;/strong&gt; i &lt;strong&gt;Channel Metadata Events&lt;/strong&gt; są włączone, zdarzenia użytkownika i kanału są wyzwalane, gdy dane są ustawiane lub usuwane w bazie danych, jak omówiono później.&lt;/li&gt;
&lt;li&gt; Jeśli włączone jest ustawienie &lt;strong&gt;Membership&lt;/strong&gt; Events, zdarzenia członkostwa są wyzwalane, gdy członkostwa są dodawane, aktualizowane lub usuwane, co zostanie omówione później.&lt;/li&gt;
&lt;li&gt; Pozostałe opcje są poza zakresem tego artykułu, ale więcej informacji można znaleźć w &lt;a href="https://www.pubnub.com/docs/general/metadata/basics#configuration?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;dokumentacji App Context&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt; Kliknij &lt;strong&gt;Zapisz zmiany&lt;/strong&gt;, aby zapisać zaktualizowane zmiany.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Kontekst aplikacji użytkownika
&lt;/h2&gt;

&lt;p&gt;Gdy nowy użytkownik zostanie zarejestrowany w aplikacji, być może za pośrednictwem zewnętrznego dostawcy tożsamości, będziesz mieć jakiś sposób na jednoznaczną identyfikację tego użytkownika w PubNub; jest to &lt;a href="https://www.pubnub.com/docs/general/setup/users-and-devices?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;identyfikator użytkownika&lt;/a&gt;, którego klient użytkownika użyje do zainicjowania PubNub SDK. Identyfikator użytkownika PubNub może nie być taki sam jak identyfikator używany w innym miejscu rozwiązania do identyfikacji tego samego użytkownika, dlatego zalecamy śledzenie tego w polu "External ID".&lt;/p&gt;

&lt;p&gt;Nazwa użytkownika, adres e-mail i adres URL profilu nie wymagają wyjaśnienia, ale korzyść z przechowywania ich w App Context oznacza, że jeśli użytkownik zmieni którekolwiek z tych pól, zmiany mogą być propagowane na dużą skalę do wszystkich klientów nasłuchujących za pomocą zdarzeń App Context, które są obsługiwane przez wszystkie nasze zestawy SDK.&lt;/p&gt;

&lt;h3&gt;
  
  
  Jak utworzyć reprezentację użytkownika w App Context?
&lt;/h3&gt;

&lt;p&gt;Istnieją dwa sposoby tworzenia użytkownika App Context.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Użytkownicy mogą być tworzeni i zarządzani za pomocą &lt;a href="https://www.pubnub.com/docs/bizops-workspace/basics?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;BizOps Workspace&lt;/a&gt;, znajdującego się w portalu administracyjnym PubNub. Nie wymaga to żadnego kodu, a proces został wyjaśniony na przykładach w osobnym artykule: &lt;a href="https://www.pubnub.com/how-to/manage-users-and-channels-with-bizops-workspace/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Jak zarządzać użytkownikami i kanałami za pomocą BizOps Workspace&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; Interfejsy API są dostępne za pośrednictwem każdego z naszych zestawów SDK do tworzenia użytkowników. Jeśli korzystasz z naszego &lt;a href="https://www.pubnub.com/docs/chat/chat-sdk/overview?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;zestawu Chat SDK&lt;/a&gt;, ten zestaw SDK obsługuje kontekst aplikacji za kulisami; na przykład metoda Chat SDK&lt;a href="https://www.pubnub.com/docs/chat/chat-sdk/build/features/users/create?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;"createUser()&lt;/a&gt;" wywoła &lt;a href="https://www.pubnub.com/docs/sdks/javascript/api-reference/objects#set-user-metadata?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;setUUIDMetadata&lt;/a&gt; JavaScript pod przykrywką, aby utworzyć użytkownika. Dedykowane interfejsy API służą do modyfikowania danych App Context w przypadku korzystania z dowolnego zestawu SDK innego niż Chat SDK. Wspomniałem już o JavaScript &lt;a href="https://www.pubnub.com/docs/sdks/javascript/api-reference/objects#set-user-metadata?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;setUUIDMetadata&lt;/a&gt; API, ale istnieją odpowiedniki dla wszystkich naszych API, w tym &lt;a href="https://www.pubnub.com/docs/sdks/java/api-reference/objects?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Java&lt;/a&gt;, &lt;a href="https://www.pubnub.com/docs/sdks/swift/api-reference/objects?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Swift&lt;/a&gt;, &lt;a href="https://www.pubnub.com/docs/sdks/kotlin/api-reference/objects?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Kotlin&lt;/a&gt;, &lt;a href="https://www.pubnub.com/docs/sdks/python/api-reference/objects?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Python&lt;/a&gt;, &lt;a href="https://www.pubnub.com/docs/sdks/unity/api-reference/objects?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Unity&lt;/a&gt; itp.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Kontekst aplikacji kanału
&lt;/h2&gt;

&lt;p&gt;PubNub tworzy kanały automatycznie za każdym razem, gdy użytkownik je subskrybuje lub publikuje, ale kanały prawdopodobnie reprezentują coś znaczącego dla aplikacji, na przykład w aplikacji czatu możesz mieć czat grupowy, który używa kanału do komunikacji lub wydarzenie na żywo może używać dedykowanego kanału do zarządzania ankietami.&lt;/p&gt;

&lt;p&gt;Określenie App Context dla kanału spowoduje przechowywanie i aktualizowanie wszelkich pożądanych metadanych związanych z tym kanałem, a aktualizacje te będą opcjonalnie propagowane do wszystkich zainteresowanych klientów. Możesz nadać kanałowi nazwę, np. "Czat między użytkownikiem A i użytkownikiem B", a być może kanał jest związany z przechowywaniem dokumentów, które można śledzić w niestandardowym polu "URI".&lt;/p&gt;

&lt;h3&gt;
  
  
  Jak utworzyć reprezentację kanału w App Context?
&lt;/h3&gt;

&lt;p&gt;Podobnie jak w przypadku użytkowników, istnieją dwa sposoby tworzenia kanału App Context.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Kanały można tworzyć i zarządzać nimi za pomocą &lt;a href="https://www.pubnub.com/docs/bizops-workspace/basics?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;BizOps Workspace&lt;/a&gt;. Nie wymaga to żadnego kodu, a proces ten został wyjaśniony na przykładach w osobnym artykule: &lt;a href="https://www.pubnub.com/how-to/manage-users-and-channels-with-bizops-workspace/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Jak zarządzać użytkownikami i kanałami za pomocą BizOps Workspace&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; Interfejsy API są dostępne za pośrednictwem każdego z naszych zestawów SDK do tworzenia kanałów. Jeśli korzystasz z naszego &lt;a href="https://www.pubnub.com/docs/chat/chat-sdk/overview?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;zestawu Chat SDK&lt;/a&gt;, obsługuje on kontekst aplikacji za kulisami; na przykład rodzina metod&lt;a href="https://www.pubnub.com/docs/chat/chat-sdk/build/features/channels/create?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;"Utwórz&lt;/a&gt; kanał" wywoła &lt;a href="https://www.pubnub.com/docs/sdks/javascript/api-reference/objects#set-channel-metadata?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;setChannelMetadata()&lt;/a&gt; JavaScript pod przykrywką. Jeśli korzystasz z dowolnego zestawu SDK innego niż Chat SDK, dostępne są dedykowane interfejsy API do modyfikowania danych App Context, w tym &lt;a href="https://www.pubnub.com/docs/sdks/javascript/api-reference/objects#set-channel-metadata?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;JavaScript&lt;/a&gt;, &lt;a href="https://www.pubnub.com/docs/sdks/java/api-reference/objects?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Java&lt;/a&gt;, &lt;a href="https://www.pubnub.com/docs/sdks/swift/api-reference/objects?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Swift&lt;/a&gt;, &lt;a href="https://www.pubnub.com/docs/sdks/kotlin/api-reference/objects?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Kotlin&lt;/a&gt;, &lt;a href="https://www.pubnub.com/docs/sdks/python/api-reference/objects?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Python&lt;/a&gt;, &lt;a href="https://www.pubnub.com/docs/sdks/unity/api-reference/objects?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Unity&lt;/a&gt; itp.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Kontekst aplikacji członkostwa
&lt;/h2&gt;

&lt;p&gt;Po zdefiniowaniu App Context zarówno dla naszych użytkowników, jak i kanałów, możemy teraz zdefiniować relację między nimi, określając, czy użytkownicy są &lt;a href="https://www.pubnub.com/docs/general/metadata/membership-metadata?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;"członkami"&lt;/a&gt; kanału.&lt;/p&gt;

&lt;p&gt;Gdy użytkownik dołącza do kanału, może otrzymywać aktualizacje dotyczące każdego innego członka tego samego kanału; może być powiadamiany, gdy użytkownicy &lt;code&gt;dołączają&lt;/code&gt; lub &lt;code&gt;odchodzą&lt;/code&gt;, a także za każdym razem, gdy kontekst aplikacji tego użytkownika jest aktualizowany (np. aktualizują swoją nazwę).&lt;/p&gt;

&lt;p&gt;Jest to*&lt;em&gt;zwodniczo potężny mechanizm, który zapewnia dużą wartość&lt;/em&gt;*, szczególnie dla twórców aplikacji do czatu. Gdybyś nie korzystał z App Context, musiałbyś samodzielnie śledzić każdego użytkownika, którego kanały są członkami, i powiadamiać wszystkich innych w tym samym kanale, gdy użytkownik dołącza lub opuszcza. To wyzwanie nie skaluje się liniowo, więc im więcej użytkowników masz w swoim rozwiązaniu, tym trudniej jest próbować zarządzać wszystkimi tymi informacjami centralnie.&lt;/p&gt;

&lt;p&gt;Korzystając z App Context, klienci czatu otrzymują wszystkie informacje potrzebne do utrzymania ich wewnętrznego stanu, a Ty masz pełną kontrolę nad tymi danymi dzięki PubNub &lt;a href="https://www.pubnub.com/docs/general/security/access-control?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Access Manager&lt;/a&gt;, aby zapobiec nieautoryzowanemu dostępowi.&lt;/p&gt;

&lt;h3&gt;
  
  
  Jak utworzyć członkostwo?
&lt;/h3&gt;

&lt;p&gt;Podobnie jak w przypadku użytkowników i kanałów, istnieją dwa sposoby tworzenia członkostwa.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Członkostwa można tworzyć i zarządzać nimi za pomocą &lt;a href="https://www.pubnub.com/docs/bizops-workspace/basics?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;BizOps Workspace&lt;/a&gt; bez pisania kodu. Więcej informacji można znaleźć w sekcji &lt;a href="https://www.pubnub.com/docs/bizops-workspace/channel-management#manage-membership?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Zarządzanie członkostwem&lt;/a&gt; w naszej dokumentacji.&lt;/li&gt;
&lt;li&gt; Interfejsy API są dostępne za pośrednictwem każdego z naszych zestawów SDK do tworzenia kanałów. Jeśli korzystasz z naszego &lt;a href="https://www.pubnub.com/docs/chat/chat-sdk/overview?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Chat SD&lt;/a&gt;K, to obsługuje on kontekst aplikacji za kulisami; na przykład rodzina metod&lt;a href="https://www.pubnub.com/docs/chat/chat-sdk/build/features/channels/create?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;"Create&lt;/a&gt; channel" wywoła &lt;a href="https://www.pubnub.com/docs/sdks/javascript/api-reference/objects#set-channel-memberships?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;setMemberships&lt;/a&gt; JavaScript pod przykrywką. Jeśli korzystasz z dowolnego zestawu SDK innego niż Chat SDK, dostępne są dedykowane interfejsy API do modyfikowania danych App Context, w tym &lt;a href="https://www.pubnub.com/docs/sdks/javascript/api-reference/objects#set-channel-memberships?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;JavaScript&lt;/a&gt;, &lt;a href="https://www.pubnub.com/docs/sdks/java/api-reference/objects?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Java&lt;/a&gt;, &lt;a href="https://www.pubnub.com/docs/sdks/swift/api-reference/objects?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Swift&lt;/a&gt;, &lt;a href="https://www.pubnub.com/docs/sdks/kotlin/api-reference/objects?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Kotlin&lt;/a&gt;, &lt;a href="https://www.pubnub.com/docs/sdks/python/api-reference/objects?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Python&lt;/a&gt;, &lt;a href="https://www.pubnub.com/docs/sdks/unity/api-reference/objects?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Unity&lt;/a&gt; itp.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Odbieranie zdarzeń w czasie rzeczywistym, gdy zmienia się App Context
&lt;/h2&gt;

&lt;p&gt;Gdy dane App Context ulegną zmianie, aplikacja otrzyma zdarzenie powiadamiające o tym, co się zmieniło w czasie rzeczywistym; pozwala to na tworzenie responsywnych aplikacji bez odpytywania serwera o aktualizacje.&lt;/p&gt;

&lt;h3&gt;
  
  
  Odbieranie zmian kontekstu aplikacji za pośrednictwem PubNub SDK (z wyłączeniem Chat SDK)
&lt;/h3&gt;

&lt;p&gt;Wszystkie zestawy SDK PubNub udostępniają "Event Listeners" i to właśnie za ich pośrednictwem można nasłuchiwać &lt;code&gt;zdarzeń obiektów&lt;/code&gt;, które są uruchamiane za każdym razem, gdy zmieniają się dane App Context.&lt;/p&gt;

&lt;p&gt;Należy zauważyć, że w chwili pisania tego tekstu niektóre z naszych zestawów SDK obsługują nowy format "detektorów zdarzeń", jak wyjaśniono w &lt;a href="https://www.pubnub.com/blog/updates-to-the-event-engine-and-event-listeners/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;tym blogu na temat aktualizacji silnika zdarzeń i dete&lt;/a&gt;ktorów zdarzeń. Niezależnie od formatu detektora zdarzeń, zasada pozostaje taka sama: aplikacja powinna zarejestrować się, aby otrzymywać zdarzenia kontekstu aplikacji za pośrednictwem detektora dostarczonego przez SDK.&lt;/p&gt;

&lt;p&gt;Jak wyszczególniono w &lt;a href="https://www.pubnub.com/docs/sdks/javascript/api-reference/publish-and-subscribe#add-listeners?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;dokumentacji JavaScript SD&lt;/a&gt;K, rejestracja zdarzeń App Context będzie wyglądać następująco:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;channel&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;channel_1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;subscription&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;subscription&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;subscription&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onObjects&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; 
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;objectsEvent&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Objects event: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;objectsEvent&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dokumentację opisującą sposób rejestracji zdarzeń App Context w innych językach można znaleźć w następujących lokalizacjach: &lt;a href="https://www.pubnub.com/docs/sdks/java/api-reference/publish-and-subscribe#add-listeners?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Java&lt;/a&gt;, &lt;a href="https://www.pubnub.com/docs/sdks/swift/api-reference/publish-and-subscribe#add-listeners?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Swift&lt;/a&gt;, &lt;a href="https://www.pubnub.com/docs/sdks/kotlin/api-reference/publish-and-subscribe#add-listeners?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Kotlin&lt;/a&gt;, &lt;a href="https://www.pubnub.com/docs/sdks/python/api-reference/publish-and-subscribe#add-listeners?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Python&lt;/a&gt; (należy pamiętać, że Python nazywa zdarzenia "metadanymi", podczas gdy inne zestawy SDK odnoszą się do zdarzeń jako "obiektów"), &lt;a href="https://www.pubnub.com/docs/sdks/unity/api-reference/configuration#event-listeners?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Unity&lt;/a&gt; itp.&lt;/p&gt;

&lt;p&gt;Praktyczny przykład i interaktywne demo można znaleźć w artykule &lt;a href="https://www.pubnub.com/how-to/manage-users-and-channels-with-bizops-workspace/#h-7?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;How to Manage Users and Channels with BizOps Workspace&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Odbieranie zmian kontekstu aplikacji przez PubNub Chat SDK
&lt;/h3&gt;

&lt;p&gt;PubNub Chat SDK udostępnia zdarzenia App Context poprzez rodzinę interfejsów API &lt;a href="https://www.pubnub.com/docs/chat/chat-sdk/build/features/channels/membership#get-updates?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;streamUpdates()&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Kilka przykładów zaczerpniętych z &lt;a href="https://github.com/PubNubDevelopers/Chat-SDK-Demo-Web" rel="noopener noreferrer"&gt;aplikacji Chat SDK Demo&lt;/a&gt; dla sieci Web:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;//  Detect changes to the current User&lt;/span&gt;
&lt;span class="nf"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;currentUser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;streamUpdates&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;updatedUser&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;updatedUser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nf"&gt;setName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;updatedUser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;updatedUser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;profileUrl&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nf"&gt;setProfileUrl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;updatedUser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;profileUrl&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;currentUser&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;//  Detect changes to an array of Channels&lt;/span&gt;
&lt;span class="nf"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;chat&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;privateGroups&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;Channel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;streamUpdatesOn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;privateGroups&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;channels&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;//  The array of channels, privateGroups, has been updated&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;privateGroups&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aby uzyskać działający przykład oparty na naszej prostszej próbce "uzyskiwania informacji" dla Chat SDK, zapoznaj się z artykułem &lt;a href="https://www.pubnub.com/how-to/manage-users-and-channels-with-bizops-workspace/#h-10?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Jak zarządzać użytkownikami i kanałami za pomocą BizOps Workspace&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Kontekst aplikacji i PubNub Illuminate
&lt;/h2&gt;

&lt;p&gt;PubNub&lt;a href="https://www.pubnub.com/products/illuminate/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Illuminate&lt;/a&gt; to produkt do podejmowania decyzji i analizy w czasie rzeczywistym, który można dostosować do unikalnego przypadku użycia organizacji. Produkt został zaprojektowany z myślą o menedżerach produktu i analitykach, umożliwiając im wykonywanie następujących czynności:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Definiowanie niestandardowych zagregowanych wskaźników w czasie rzeczywistym.&lt;/li&gt;
&lt;li&gt;  Konfigurowanie i wdrażanie reguł decyzyjnych z warunkami i akcjami.&lt;/li&gt;
&lt;li&gt;  Natychmiastowe wizualizowanie śledzonych metryk, wykonywanych działań i ich wyników.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Wszystko to można robić w czasie rzeczywistym bez odrywania zespołu inżynierów od bieżących projektów.&lt;/p&gt;

&lt;p&gt;Pełne wyjaśnienie, czym jest PubNub Illuminte i w jaki sposób może zapewnić natychmiastowy wgląd w dane, wykracza poza zakres tego artykułu, ale więcej informacji można znaleźć w naszej &lt;a href="https://www.pubnub.com/docs/illuminate/basics?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;dokumentacji&lt;/a&gt; i &lt;a href="https://www.pubnub.com/blog/real-time-decisioning-with-illuminate/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;przeglądzie produktu&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Podsumowując: Definiujesz &lt;strong&gt;metryki&lt;/strong&gt; związane z Twoją aplikacją, tj. rzeczy, które chcesz mierzyć. Na przykład w scenariuszu śledzenia zasobów mogą to być godziny od przyjęcia zamówienia. Gdy zostanie spełniony jakiś &lt;a href="https://www.pubnub.com/docs/illuminate/decisions/basics#conditions?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;&lt;strong&gt;warunek&lt;/strong&gt;&lt;/a&gt; związany z tą metryką, np. "Godziny od zamówienia" mogą przekroczyć określoną wartość, można podjąć pewne &lt;strong&gt;działania&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;To, które &lt;a href="https://www.pubnub.com/docs/illuminate/decisions/basics#actions?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;działanie&lt;/a&gt; zostanie podjęte, jest elastyczne, ale trzy z możliwych działań odnoszą się do App Context:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZzqfRlop--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/A2XZHFCSuF3nUxDjLDFjX/9b018c14ac44df085c2ad40b40619602/illuminate_app_context.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZzqfRlop--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/A2XZHFCSuF3nUxDjLDFjX/9b018c14ac44df085c2ad40b40619602/illuminate_app_context.png" title="How-to - Use App Context - Image 02" alt="How-to - Use App Context - Image 02" width="800" height="232"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Zaktualizuj użytkownika za pomocą PubNub Illuminate
&lt;/h3&gt;

&lt;p&gt;Umożliwia ustawienie dowolnych predefiniowanych lub niestandardowych metadanych użytkownika. Poniższy zrzut ekranu pokazuje użytkownika o identyfikatorze 123, którego status został ustawiony na statyczną wartość "Nowy status", ale możliwe jest również ustawienie wartości dynamicznej w oparciu o &lt;strong&gt;warunek&lt;/strong&gt;, który wyzwolił &lt;strong&gt;akcję&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sxO8sTRv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/4Rx8xBy406xLFdGoA38Ll2/f7b62aa24fdba0df4cec6d035a8e5812/illuminate_app_context_user.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sxO8sTRv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/4Rx8xBy406xLFdGoA38Ll2/f7b62aa24fdba0df4cec6d035a8e5812/illuminate_app_context_user.png" title="How-to - Use App Context - Image 03" alt="How-to - Use App Context - Image 03" width="800" height="507"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Kanał aktualizacji z PubNub Illuminate
&lt;/h3&gt;

&lt;p&gt;Umożliwia ustawienie dowolnych predefiniowanych lub niestandardowych metadanych kanału. Poniższy zrzut ekranu pokazuje kanał o identyfikatorze 123, którego nazwa została ustawiona na wartość statyczną "Nowa nazwa", ale możliwe jest również ustawienie wartości dynamicznej na podstawie &lt;strong&gt;warunku&lt;/strong&gt;, który wyzwolił &lt;strong&gt;akcję&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ILHCobfC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/5bVUjl1DTF1IENrhLv6T9v/b88e265164dce7dd1f39ed5437467611/illuminate_app_context_channel.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ILHCobfC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/5bVUjl1DTF1IENrhLv6T9v/b88e265164dce7dd1f39ed5437467611/illuminate_app_context_channel.png" title="How-to - Use App Context - Image 04" alt="How-to - Use App Context - Image 04" width="800" height="504"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Aktualizacja członkostwa za pomocą PubNub Illuminate
&lt;/h3&gt;

&lt;p&gt;Umożliwia ustawienie dowolnych predefiniowanych lub niestandardowych metadanych członkostwa. Poniższy zrzut ekranu pokazuje członkostwo użytkownika o identyfikatorze 123 w kanale 123, którego status został ustawiony na wartość statyczną "Nowy status". Możliwe jest również ustawienie wartości dynamicznej w oparciu o &lt;strong&gt;warunek&lt;/strong&gt;, który wyzwolił &lt;strong&gt;akcję&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--P0jKJfDZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/ZfrPMbbrj55hsyGpihCC3/44b519ccedde12e574bd44835ce799a3/illuminate_app_context_membership.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P0jKJfDZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/ZfrPMbbrj55hsyGpihCC3/44b519ccedde12e574bd44835ce799a3/illuminate_app_context_membership.png" title="How-to - Use App Context - Image 05" alt="How-to - Use App Context - Image 05" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Kontekst aplikacji i funkcje PubNub
&lt;/h2&gt;

&lt;p&gt;PubNub udostępnia funkcje do przechwytywania zdarzeń zachodzących na platformie PubNub. Funkcje pozwalają pisać kod lub wykorzystywać istniejące integracje do przekształcania, przekierowywania, rozszerzania, filtrowania, a nawet agregowania danych. Więcej informacji na temat funkcji PubNub można znaleźć w &lt;a href="https://www.pubnub.com/docs/serverless/functions/overview?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;dokumentacji Fun&lt;/a&gt; ctions, ale w tym artykule omówimy, w jaki sposób funkcje PubNub odnoszą się do App Context.&lt;/p&gt;

&lt;h3&gt;
  
  
  Aktualizacja App Context z poziomu PubNub Functions
&lt;/h3&gt;

&lt;p&gt;Środowisko, w którym uruchamiane są funkcje, ma dostęp do &lt;a href="https://www.pubnub.com/docs/serverless/functions/functions-apis/pubnub-module?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;modułu PubNub&lt;/a&gt;; moduł ten ma pełny dostęp do App Context na zestawie kluczy, a poniżej podano kilka przykładów zaczerpniętych z dokumentacji. :&lt;/p&gt;

&lt;p&gt;Przykład dla Get &lt;a href="https://www.pubnub.com/docs/serverless/functions/functions-apis/pubnub-module#get-user-metadata?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;User App Context Metadata&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pubnub&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;pubnub&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;objects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getUUIDMetadata&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;uuid&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;my-uuid&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;include&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;customFields&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Fetched UUID metadata successfully.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;abort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Failed to fetch UUID metadata&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Przykład dla &lt;a href="https://www.pubnub.com/docs/serverless/functions/functions-apis/pubnub-module#set-channel-metadata?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Set Channel&lt;/a&gt; App Context Metadata&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pubnub&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;pubnub&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;objects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setChannelMetadata&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;my-channel&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;channel-name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;What a great channel&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;custom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;foo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;bar&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;include&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;customFields&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Set channel metadata successfully.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;abort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Failed to set channel metadata.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Wyczerpujący zestaw przykładów kodu można znaleźć w dokumentacji &lt;a href="https://www.pubnub.com/docs/serverless/functions/functions-apis/pubnub-module?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;modułu PubNub&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Wyzwalanie funkcji PubNub po zmianie kontekstu aplikacji
&lt;/h3&gt;

&lt;p&gt;Istnieje wiele typów zdarzeń, które mogą wyzwalać funkcję, jak wyszczególniono w &lt;a href="https://www.pubnub.com/docs/serverless/functions/overview#event-types?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;dokumentacji typów&lt;/a&gt; zdarzeń. Obejmują one możliwość wykrywania, kiedy wysyłane są wiadomości i sygnały, wyzwalania funkcji po wystąpieniu zdarzeń obecności oraz wykonywania funkcji w określonych odstępach czasu lub na żądanie. W chwili pisania tego tekstu &lt;strong&gt;nie&lt;/strong&gt; jest możliwe wykonywanie funkcji po aktualizacji kontekstu aplikacji, ale jeśli okaże się, że Twoja aplikacja tego potrzebuje, skontaktuj się z naszym &lt;a href="https://support.pubnub.com/hc/en-us?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;zespołem pomocy technicznej&lt;/a&gt;, który z przyjemnością omówi Twoje przypadki użycia.&lt;/p&gt;

&lt;h2&gt;
  
  
  Następne kroki
&lt;/h2&gt;

&lt;p&gt;Aby zobaczyć App Context w akcji, możesz sprawdzić nasze Chat &lt;a href="https://www.pubnub.com/demos/chat/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Demo&lt;/a&gt;, które wykorzystuje App Context wraz z naszym Chat SDK, aby pokazać, jak może wyglądać aplikacja czatu z bezserwerową pamięcią masową. Demo czatu pozwala ustawić metadane użytkownika i kanału oraz zobaczyć, jak zmiany te są propagowane do innych słuchaczy i członków w czasie rzeczywistym.&lt;/p&gt;

&lt;p&gt;Zapoznaj się również z naszą powiązaną 3-częściową serią na temat przestrzeni roboczej BizOps, która zależy od App Context i obejmuje: &lt;a href="https://www.pubnub.com/how-to/manage-users-and-channels-with-bizops-workspace/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Zarządzanie użytkownikami i kanałami&lt;/a&gt;, &lt;a href="https://www.pubnub.com/how-to/monitor-and-moderate-conversations-with-bizops-workspace/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Monitorowanie i moderowanie konwersacji&lt;/a&gt; oraz &lt;a href="https://www.pubnub.com/how-to/securely-moderate-chat-and-users/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Bezpieczne moderowanie&lt;/a&gt; czatu.&lt;/p&gt;

&lt;p&gt;Na koniec zachęcamy do skontaktowania się z zespołem DevRel pod adresem &lt;a href="//mailto:devrel@pubnub.com"&gt;devrel@pubnub.com&lt;/a&gt; lub skontaktowania się z naszym zespołem &lt;a href="https://support.pubnub.com/hc/en-us?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;pomocy&lt;/a&gt; technicznej w celu uzyskania pomocy w dowolnym aspekcie rozwoju PubNub.&lt;/p&gt;

&lt;h1&gt;
  
  
  Jak PubNub może ci pomóc?
&lt;/h1&gt;

&lt;p&gt;Ten artykuł został pierwotnie opublikowany na &lt;a href="https://www.pubnub.com/how-to/use-app-context/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;PubNub.com&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Poznaj PubNub
&lt;/h2&gt;

&lt;p&gt;Sprawdź &lt;a href="https://www.pubnub.com/tour/introduction/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Live Tour&lt;/a&gt;, aby zrozumieć podstawowe koncepcje każdej aplikacji opartej na PubNub w mniej niż 5 minut.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rozpocznij konfigurację
&lt;/h2&gt;

&lt;p&gt;Załóż &lt;a href="https://admin.pubnub.com/signup/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;konto&lt;/a&gt; PubNub, aby uzyskać natychmiastowy i bezpłatny dostęp do kluczy PubNub.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rozpocznij
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Dokumenty&lt;/a&gt; PubNub pozwolą Ci rozpocząć pracę, niezależnie od przypadku użycia lub &lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;zestawu SDK&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Informacje o wersji dokumentacji - czerwiec 2024 r.</title>
      <dc:creator>PubNub Developer Relations</dc:creator>
      <pubDate>Mon, 08 Jul 2024 12:36:46 +0000</pubDate>
      <link>https://forem.com/pubnub-pl/informacje-o-wersji-dokumentacji-czerwiec-2024-r-lni</link>
      <guid>https://forem.com/pubnub-pl/informacje-o-wersji-dokumentacji-czerwiec-2024-r-lni</guid>
      <description>&lt;p&gt;Ten artykuł został pierwotnie opublikowany na stronie &lt;a href="https://www.pubnub.com/docs/release-notes/2024/june?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;https://www.pubnub.com/docs/release-notes/2024/june&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cześć! W tym miesiącu mamy dla Ciebie kilka nowych aktualizacji.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Wprowadziliśmy nową flagę integralności referencyjnej, która pomaga zachować spójność danych.&lt;/li&gt;
&lt;li&gt;  Limity grup kanałów można teraz ustawiać bezpośrednio z portalu administracyjnego.&lt;/li&gt;
&lt;li&gt;  Spróbuj zaimportować dane z Insights do BizOps, aby przetestować jego funkcje.&lt;/li&gt;
&lt;li&gt;  Ponadto zauważysz odświeżony wygląd i sposób działania Presence Management.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Poza tym wprowadziliśmy kilka drobnych, ale znaczących ulepszeń w dokumentacji, które, miejmy nadzieję, odpowiedzą na niektóre pytania lub rozwieją wszelkie wątpliwości podczas pracy z PubNub.&lt;/p&gt;

&lt;p&gt;Miłego odkrywania i dziękujemy za bycie częścią naszej społeczności!&lt;/p&gt;

&lt;h2&gt;
  
  
  Ogólne 🛠️
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Pola niestandardowe w ładunkach FCM
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Typ&lt;/strong&gt;: Ulepszenie&lt;/p&gt;

&lt;p&gt;Poprawiliśmy dokumentację dla &lt;a href="https://pubnub.com/docs/general/push/android#step-5-construct-the-push-payload" rel="noopener noreferrer"&gt;Android Mobile Push Notifications&lt;/a&gt;, dodając brakujące niestandardowe parametry PubNub, które można dodać do ładunku FCM Mobile Push Notification: &lt;code&gt;pn_debug&lt;/code&gt;, &lt;code&gt;pn_exceptions&lt;/code&gt; i &lt;code&gt;pn_dry_run&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Umożliwiają one testowanie lub debugowanie powiadomień oraz wykluczanie wybranych urządzeń z otrzymywania powiadomień.&lt;/p&gt;

&lt;p&gt;Oto przykładowy ładunek FCM z naszymi niestandardowymi polami:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pn_fcm&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;notification&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;title&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;My Title&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;body&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Message sent at&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
 &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pn_collapse_id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;collapse-id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pn_exceptions&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;optional-excluded-device-token1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
 &lt;span class="p"&gt;]&lt;/span&gt;
 &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pn_debug&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pn_dry_run&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Limity grupy kanałów
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Typ&lt;/strong&gt;: Nowa funkcja&lt;/p&gt;

&lt;p&gt;Kontroler strumienia w portalu administracyjnym ma nową, konfigurowalną opcję &lt;a href="https://pubnub.com/docs/general/metadata/basics#configuration" rel="noopener noreferrer"&gt;limitu grupy&lt;/a&gt; kanałów dla klientów korzystających z &lt;a href="https://www.pubnub.com/pricing/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;płatnych planów cenowych&lt;/a&gt;, która pozwala ustawić limity maksymalnej liczby kanałów, które mogą mieć grupy kanałów w zestawie kluczy. Można obniżyć domyślny limit 1000 kanałów lub zwiększyć go do 2000 kanałów.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pIhkfMKU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/channel-group-limit-0dce418184343bd3e6e213b7f21f2038.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pIhkfMKU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/channel-group-limit-0dce418184343bd3e6e213b7f21f2038.png" alt="Channel group limits" width="800" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Zdarzenia metadanych użytkownika w kontekście aplikacji
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Typ&lt;/strong&gt;: Ulepszenie&lt;/p&gt;

&lt;p&gt;Poprawiliśmy dokumentację, aby wyjaśnić, że przy włączonej opcji &lt;strong&gt;User Metadata Events&lt;/strong&gt; każda modyfikacja jednostki użytkownika&lt;code&gt;(ustawienie&lt;/code&gt; i &lt;code&gt;usunięcie&lt;/code&gt;) powoduje wysłanie powiadomień o zdarzeniach do wszystkich stowarzyszeń członkowskich, a więc zarówno tego użytkownika, jak i każdego kanału, którego jest członkiem. Szczegółowe informacje można znaleźć w &lt;a href="https://pubnub.com/docs/general/metadata/basics#app-context-events" rel="noopener noreferrer"&gt;dokumentacji&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iSi8-HI4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/user-metadata-events-2774cded452142e6d79bdf1a92e95174.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iSi8-HI4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/user-metadata-events-2774cded452142e6d79bdf1a92e95174.png" alt="User metadata events" width="800" height="693"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Zależność konfiguracji App Context
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Typ&lt;/strong&gt;: Ulepszenie&lt;/p&gt;

&lt;p&gt;Zaktualizowaliśmy dokumentację dotyczącą &lt;a href="https://pubnub.com/docs/general/metadata/basics#configuration" rel="noopener noreferrer"&gt;opcji konfiguracji&lt;/a&gt; App Context, aby uwzględnić informacje o krytycznej zależności.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--u1z1QWAq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/get-all-metadata-bf21a99e67f554e65c818b7b71fb9011.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--u1z1QWAq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/get-all-metadata-bf21a99e67f554e65c818b7b71fb9011.png" alt="Get all user or channel metadata" width="800" height="624"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Chociaż opcje Disallow Get &lt;strong&gt;All Channel Metadata&lt;/strong&gt; i &lt;strong&gt;Disallow Get All User Metadata&lt;/strong&gt; wydają się dość oczywiste, zastrzeżenie polega na tym, że opcje te działają tylko z włączonym Menedżerem dostępu.&lt;/p&gt;

&lt;p&gt;Innymi słowy, bez Menedżera dostępu te aktywne opcje nie wyłączają pobierania metadanych o użytkownikach lub kanałach na zestawie klawiszy. Jednocześnie po włączeniu Menedżera dostępu, który domyślnie ogranicza dostęp do wszystkich obiektów w zestawie kluczy, można łatwo ominąć ograniczenia GET Menedżera dostępu dla użytkowników i kanałów, usuwając zaznaczenie obu tych opcji konfiguracji bez tworzenia szczegółowego schematu uprawnień.&lt;/p&gt;

&lt;p&gt;Interfejs użytkownika portalu administracyjnego wkrótce również odzwierciedli tę zależność.&lt;/p&gt;

&lt;h3&gt;
  
  
  Nowa flaga integralności referencyjnej w App Context
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Typ&lt;/strong&gt;: Nowa funkcja&lt;/p&gt;

&lt;p&gt;Dodaliśmy nową opcję &lt;a href="https://pubnub.com/docs/general/metadata/basics#configuration" rel="noopener noreferrer"&gt;&lt;strong&gt;Wymuś integralność referencyjną dla członkostwa&lt;/strong&gt;&lt;/a&gt;, która jest domyślnie włączona po włączeniu App Context w zestawie kluczy aplikacji w portalu administracyjnym.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--QjGUW3Kf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/referential-integrity-2288af8171ffc0c8a5c8b67d82106247.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QjGUW3Kf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/referential-integrity-2288af8171ffc0c8a5c8b67d82106247.png" alt="Referential integrity flag" width="800" height="624"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Flaga ta zapewnia, że można ustawić nowe członkostwo tylko wtedy, gdy istnieje zarówno identyfikator użytkownika, jak i identyfikator kanału, dla którego utworzono członkostwo. Jednocześnie usunięcie nadrzędnej jednostki metadanych użytkownika lub kanału automatycznie usuwa wszelkie podrzędne skojarzenia członkostwa dla tej usuniętej jednostki. W ten sposób można upewnić się, że w zestawie kluczy nie ma nieprawidłowo działających lub osieroconych obiektów członkowskich.&lt;/p&gt;

&lt;h2&gt;
  
  
  SDK 📦
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Ulepszenia dokumentacji Python
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Typ&lt;/strong&gt;: Ulepszenie&lt;/p&gt;

&lt;p&gt;Po otrzymaniu informacji zwrotnych rozszerzyliśmy informacje na temat użycia i wykonywania metod. W rezultacie każda sekcja Returns w &lt;a href="https://pubnub.com/docs/sdks/python/api-reference/publish-and-subscribe" rel="noopener noreferrer"&gt;dokumentacji Python SDK&lt;/a&gt; opisuje teraz pola danych zwracane przez każdą metodę. Wyjaśnia również, w jaki sposób wykonanie żądania synchronicznego (&lt;code&gt;.&lt;/code&gt;&lt;code&gt;sync()&lt;/code&gt;) i asynchronicznego (&lt;code&gt;.pn_async(callback)&lt;/code&gt;) wpływa na zwracane dane dla każdej metody.&lt;/p&gt;

&lt;h3&gt;
  
  
  React SDK został przestarzały
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Typ&lt;/strong&gt;: Powiadomienie o deprecjacji&lt;/p&gt;

&lt;p&gt;Ponieważ od jakiegoś czasu nie rozwijamy aktywnie React SDK, zdecydowaliśmy się w końcu oficjalnie zdeprecjonować jego &lt;a href="https://pubnub.com/docs/sdks/react" rel="noopener noreferrer"&gt;dokumentację&lt;/a&gt; i przenieść ją do sekcji &lt;a href="https://pubnub.com/docs/sdks#call-for-contributions" rel="noopener noreferrer"&gt;Call For Contributions&lt;/a&gt; w naszych dokumentach.&lt;/p&gt;

&lt;p&gt;Jeśli znajdziesz błąd w React SDK lub chcesz rozszerzyć jego funkcjonalność, możesz utworzyć pull request w &lt;a href="https://github.com/pubnub/react" rel="noopener noreferrer"&gt;repozytorium&lt;/a&gt; i poczekać na naszą opinię!&lt;/p&gt;

&lt;h2&gt;
  
  
  Funkcje
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Eksportowanie logów funkcji poprzez zdarzenia i akcje
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Typ&lt;/strong&gt;: Nowa funkcja&lt;/p&gt;

&lt;p&gt;Każda funkcja PubNub zapisuje logi w wewnętrznym kanale &lt;code&gt;blocks-output-*&lt;/code&gt;, takim jak &lt;code&gt;blocks-output-NSPiAuYKsWSxJl4yBn30&lt;/code&gt;, który może przechowywać do 250 wierszy logów, zanim nowe je nadpiszą. Jeśli nie chcesz stracić starych dzienników, możesz teraz użyć funkcji Events &amp;amp; Actions, aby &lt;a href="https://pubnub.com/docs/general/portal/functions#export-logs-through-events--actions" rel="noopener noreferrer"&gt;wyeksportować te dzienniki&lt;/a&gt; do usługi zewnętrznej.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YdztgBWT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/functions-log-c9c6bfa2ae883d738837c6fee563167d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YdztgBWT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/functions-log-c9c6bfa2ae883d738837c6fee563167d.png" alt="Functions log" width="800" height="568"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Insights 📊
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Czas trwania użytkownika i metryki urządzeń w dokumentacji interfejsu API REST
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Typ&lt;/strong&gt;: Ulepszenie&lt;/p&gt;

&lt;p&gt;&lt;a href="https://pubnub.com/docs/release-notes/2024/may#device-metrics-dashboard" rel="noopener noreferrer"&gt;W zeszłym miesiącu&lt;/a&gt; wprowadziliśmy metryki urządzeń do pulpitu nawigacyjnego &lt;code&gt;Zachowanie użytkownika&lt;/code&gt; w PubNub Insights na portalu administratora. W tym miesiącu zaktualizowaliśmy dokumentację interfejsu &lt;a href="https://pubnub.com/docs/sdks/rest-api/introduction-16" rel="noopener noreferrer"&gt;API R&lt;/a&gt; EST, aby uwzględnić zarówno czas trwania użytkownika, jak i metryki urządzenia, dzięki czemu można bezpośrednio wywołać interfejs API PubNub Insights, aby uzyskać interesujące metryki.&lt;/p&gt;

&lt;h2&gt;
  
  
  BizOps Workspace 🏢
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Top 20 użytkowników/kanałów
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Typ&lt;/strong&gt;: Nowa funkcja&lt;/p&gt;

&lt;p&gt;Jeśli nie używasz App Context do przechowywania i zarządzania użytkownikami i kanałami, nadal możesz przetestować powiązane funkcje BizOps Workspace, importując dane testowe.&lt;/p&gt;

&lt;p&gt;Jeśli masz dostęp do PubNub Insights, możesz uzyskać do niego dostęp, przechodząc do modułów &lt;strong&gt;User Management&lt;/strong&gt; i &lt;strong&gt;Channel Management&lt;/strong&gt; w BizOps Workspace w Admin Portal i klikając przycisk &lt;strong&gt;Import from Insights&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;W rezultacie zaimportujesz z zestawu kluczy aplikacji maksymalnie 20 użytkowników, którzy opublikowali największą liczbę wiadomości w ciągu ostatniego dnia (jeśli wczoraj nie wysłano żadnych wiadomości, użytkownicy zostaną zaimportowani na podstawie danych z poprzedniego dnia).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--edam1-8B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/top-20-users-346c252e218d37df861ff5ac04538f48.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--edam1-8B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/top-20-users-346c252e218d37df861ff5ac04538f48.png" alt="Top 20 users" width="800" height="167"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Podobnie jak w przypadku użytkowników, można zaimportować z zestawu kluczy aplikacji do 20 kanałów z największą liczbą wiadomości opublikowanych w ciągu ostatniego dnia.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6mfK6c4r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/top-20-channels-53fad13cd8e1f9a7619aee7330b2fffa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6mfK6c4r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/top-20-channels-53fad13cd8e1f9a7619aee7330b2fffa.png" alt="Top 20 channels" width="800" height="165"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Użyj tych danych testowych, aby poznać możliwości BizOps Workspace.&lt;/p&gt;

&lt;h3&gt;
  
  
  Odświeżony interfejs zarządzania obecnością
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Typ&lt;/strong&gt;: Ulepszenie&lt;/p&gt;

&lt;p&gt;Niedawno przeprojektowaliśmy cały moduł zarządzania &lt;a href="https://pubnub.com/docs/bizops-workspace/presence-management" rel="noopener noreferrer"&gt;obecnością&lt;/a&gt; w BizOps Workspace, aby uprościć kreator tworzenia reguł, zmienić kolory odznak na bardziej integracyjne i dodać konfigurację wzorca "catch all", która odzwierciedla domyślną konfigurację "włącz obecność na wszystkich kanałach" konfiguracji obecności w zestawie kluczy.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--K4-MWVm9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/presence-management-7799538afb99b2c891fc6d957737d819.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--K4-MWVm9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/presence-management-7799538afb99b2c891fc6d957737d819.png" alt="Presence Management" width="800" height="614"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mamy nadzieję, że spodoba ci się jego nowy wygląd!&lt;/p&gt;

</description>
      <category>pubnub</category>
      <category>documentation</category>
      <category>releases</category>
      <category>releasenotes</category>
    </item>
    <item>
      <title>Informacje o wersji dokumentacji - maj 2024 r.</title>
      <dc:creator>PubNub Developer Relations</dc:creator>
      <pubDate>Mon, 08 Jul 2024 10:47:14 +0000</pubDate>
      <link>https://forem.com/pubnub-pl/informacje-o-wersji-dokumentacji-maj-2024-r-5922</link>
      <guid>https://forem.com/pubnub-pl/informacje-o-wersji-dokumentacji-maj-2024-r-5922</guid>
      <description>&lt;p&gt;Witamy w informacjach o wydaniu z tego miesiąca! PubNub przynosi pakiet aktualizacji zaprojektowanych w celu usprawnienia pracy i dodania szczypty wygody.&lt;/p&gt;

&lt;p&gt;Co zawiera pakiet?&lt;/p&gt;

&lt;p&gt;Ujednoliciliśmy dokumentację filtrowania danych App Context, zmodernizowaliśmy architekturę listenera zdarzeń dla Pythona i Asyncio oraz dodaliśmy nowe narzędzia, które mają pomóc w rozpoczęciu bezpiecznego moderowania czatów.&lt;/p&gt;

&lt;p&gt;Na froncie portalu administracyjnego ulepszyliśmy naszą grę dzięki szczegółowym wskaźnikom urządzeń, usprawniliśmy zarządzanie zdarzeniami dzięki opcjom grupowania i kopertowania oraz wprowadziliśmy nowe, eleganckie, skumulowane wykresy słupkowe i zmienne funkcje w Illuminate.&lt;/p&gt;

&lt;p&gt;Ponadto nasze dokumenty i strona internetowa mają teraz nową wyszukiwarkę ze sztuczną inteligencją, która pomoże Ci znaleźć dokładnie to, czego potrzebujesz.&lt;/p&gt;

&lt;p&gt;Zanurz się i odkryj te smakołyki!&lt;/p&gt;

&lt;h2&gt;
  
  
  Ogólne&lt;a href="https://pubnub.com/docs/release-notes/2024/may#general-%EF%B8%8F" rel="noopener noreferrer"&gt;🛠️&lt;/a&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Ujednolicone informacje na temat filtrowania&lt;a href="https://pubnub.com/docs/release-notes/2024/may#unified-info-on-filtering-app-context-data" rel="noopener noreferrer"&gt;danych&lt;/a&gt; App Context
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Typ&lt;/strong&gt;: Ulepszenie&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Opis&lt;/strong&gt;: Na podstawie informacji zwrotnych przejrzeliśmy i ujednoliciliśmy informacje z różnych zestawów SDK na temat filtrowania danych użytkowników, kanałów i członkostwa za pomocą interfejsu API App Context PubNub. W rezultacie stworzyliśmy jeden dokument App Context &lt;a href="https://pubnub.com/docs/general/metadata/filtering" rel="noopener noreferrer"&gt;Filtering&lt;/a&gt; (poparty licznymi przykładami), który służy jako punkt wejścia dla wszelkich zapytań dotyczących filtrowania danych.&lt;/p&gt;

&lt;p&gt;Dowiedz się:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Które dane użytkownika, kanału i członkostwa można filtrować.&lt;/li&gt;
&lt;li&gt;  Których operatorów filtrowania użyć.&lt;/li&gt;
&lt;li&gt;  Jak filtrować dane na praktycznych przykładach.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;   &lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;objects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getAllChannelMetadata&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
       &lt;span class="na"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;["description"] LIKE "*support*"&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
   &lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  SDK&lt;a href="https://pubnub.com/docs/release-notes/2024/may#sdks-" rel="noopener noreferrer"&gt;📦&lt;/a&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Zaktualizowana architektura detektorów zdarzeń dla Python i &lt;a href="https://pubnub.com/docs/release-notes/2024/may#updated-event-listeners-architecture-for-python--asyncio" rel="noopener noreferrer"&gt;Asyncio&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Typ&lt;/strong&gt;: Nowa funkcja&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Opis&lt;/strong&gt;: Nowa architektura detektorów zdarzeń dla pakietów SDK &lt;a href="https://pubnub.com/docs/sdks/python/api-reference/publish-and-subscribe" rel="noopener noreferrer"&gt;Python&lt;/a&gt; i &lt;a href="https://pubnub.com/docs/sdks/asyncio/api-reference/publish-and-subscribe" rel="noopener noreferrer"&gt;Asyncio&lt;/a&gt; wprowadza bardziej zawężone sposoby zarządzania subskrypcjami i nasłuchiwania zdarzeń w porównaniu z poprzednim monolitycznym obiektem PubNub.&lt;/p&gt;

&lt;p&gt;Podczas gdy obiekt PubNub nadal służy jako zakres globalny i pozostaje kompatybilny wstecz, nowa architektura oferuje obiekty "entity", takie jak kanały, grupy kanałów, metadane użytkowników i metadane kanałów, które zwracają obiekty Subscription.&lt;/p&gt;

&lt;p&gt;Subskrypcje te pozwalają na metody subskrypcji/rezygnacji z subskrypcji oraz metody &lt;code&gt;addListener/removeListener&lt;/code&gt; specyficzne dla pojedynczych jednostek, oferując bardziej elastyczny i niezależny sposób zarządzania zdarzeniami w czasie rzeczywistym i zmniejszając potrzebę globalnego zarządzania stanem.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;entity&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;based&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;local&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;scoped&lt;/span&gt;
&lt;span class="nx"&gt;subscription&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;f&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;{channel}&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;subscription&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;with_presence&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;bool&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Chat&lt;a href="https://pubnub.com/docs/release-notes/2024/may#chat-" rel="noopener noreferrer"&gt;💬&lt;/a&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Przykład bezpiecznej moderacji w Chat &lt;a href="https://pubnub.com/docs/release-notes/2024/may#sample-for-secure-moderation-in-chat-sdk" rel="noopener noreferrer"&gt;SDK&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Typ&lt;/strong&gt;: Nowa funkcja&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Opis&lt;/strong&gt;: Nasz zespół ds. czatu stworzył prostą &lt;a href="https://github.com/pubnub/js-chat/blob/master/samples/access-manager-api/README.md" rel="noopener noreferrer"&gt;usługę API Access Manager&lt;/a&gt;, aby pomóc w zrozumieniu kompleksowego scenariusza zabezpieczania aplikacji Chat SDK za pomocą Access Managera. Ta usługa makietuje prosty punkt końcowy i zawiera przykładowy zestaw uprawnień, którego można użyć do skonfigurowania autoryzacji po stronie serwera dla aplikacji Chat SDK z włączonym Menedżerem dostępu.&lt;/p&gt;

&lt;p&gt;Przejdź przez cały scenariusz testowy, korzystając z naszej aplikacji React Native Chat App (do interakcji z użytkownikiem), Channel Monitor (do moderowania użytkowników, takich jak wyciszanie i banowanie) oraz Access Manager API (do generowania tokenów autoryzacyjnych).&lt;/p&gt;

&lt;p&gt;Szczegółowe kroki można znaleźć na blogu &lt;a href="https://www.pubnub.com/how-to/securely-moderate-chat-and-users/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;How to Securely Moderate Chat and Users with BizOps Workspace&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KI6SFqVa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/muted-user-b18b4534be183d6d207ceeff685e5b44.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KI6SFqVa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/muted-user-b18b4534be183d6d207ceeff685e5b44.png" alt="Muted user" width="800" height="346"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Insights&lt;a href="https://pubnub.com/docs/release-notes/2024/may#insights-" rel="noopener noreferrer"&gt;📊&lt;/a&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://pubnub.com/docs/release-notes/2024/may#device-metrics-dashboard" rel="noopener noreferrer"&gt;Pulpit&lt;/a&gt; nawigacyjny metryk urządzeń
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Typ&lt;/strong&gt;: Ulepszenie&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Opis&lt;/strong&gt;: Rozszerzyliśmy pulpit nawigacyjny &lt;code&gt;Zachowanie użytkowników&lt;/code&gt; we Wnioskach o metryki &lt;a href="https://pubnub.com/docs/pubnub-insights/dashboards/user-behavior" rel="noopener noreferrer"&gt;typu&lt;/a&gt; urządzenia. Pozwala to na dogłębne zbadanie zachowania użytkowników w zależności od typu urządzenia. Od teraz możesz obserwować, gdzie użytkownicy aplikacji publikują lub subskrybują najczęściej (iOS, Android i Windows) i sprawdzać liczbę unikalnych użytkowników według typu urządzenia.&lt;/p&gt;

&lt;p&gt;Ten wgląd może pomóc w tworzeniu niestandardowych funkcji według urządzenia, a tym samym poprawić jakość obsługi klienta.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aE1MRxwy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/device-type-1ba35d904878d48813e07a9f581193d5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aE1MRxwy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/device-type-1ba35d904878d48813e07a9f581193d5.png" alt="User behavior &amp;amp; devices" width="800" height="723"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Zdarzenia i akcje&lt;a href="https://pubnub.com/docs/release-notes/2024/may#events--actions-" rel="noopener noreferrer"&gt;⚡&lt;/a&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Akcja Webhook obsługuje teraz &lt;a href="https://pubnub.com/docs/release-notes/2024/may#webhook-action-now-supports-batching" rel="noopener noreferrer"&gt;grupowanie&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Typ&lt;/strong&gt;: Ulepszenie&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Opis&lt;/strong&gt;: Funkcja &lt;a href="https://pubnub.com/docs/serverless/events-and-actions/events#batching" rel="noopener noreferrer"&gt;Batching&lt;/a&gt; w Events &amp;amp; Action pozwala zarządzać dużą liczbą zdarzeń, wysyłając je w jednym żądaniu, zamiast wysyłać każde zdarzenie osobno. Ta funkcja jest również dostępna dla typu &lt;a href="https://pubnub.com/docs/serverless/events-and-actions/actions/create-webhook-action" rel="noopener noreferrer"&gt;akcji Webhook&lt;/a&gt; od maja.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UuXPtdsa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/batching-e3cf9a2f9881bf32f6c8a0782ac4efff.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UuXPtdsa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/batching-e3cf9a2f9881bf32f6c8a0782ac4efff.png" alt="Batching feature" width="726" height="280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  (Un)&lt;a href="https://pubnub.com/docs/release-notes/2024/may#unenveloping" rel="noopener noreferrer"&gt;enveloping&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Typ&lt;/strong&gt;: Ulepszenie&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Opis&lt;/strong&gt;: Można teraz zawinąć ładunek każdej akcji w &lt;a href="https://pubnub.com/docs/serverless/events-and-actions/events#envelope" rel="noopener noreferrer"&gt;kopertę&lt;/a&gt;, tj. wybrać, czy schemat ładunku powinien zawierać szczegółowe metadane JSON zdarzeń i akcji. Może to być pomocne w przypadkach, gdy chcesz użyć metadanych poza ładunkiem, takich jak informacje o kanale, do którego wysłano ładunek lub słuchaczu, który go wyzwolił.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---Op_HGbc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/envelope-a629b278f2f637155ddfe6486c3441b5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---Op_HGbc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/envelope-a629b278f2f637155ddfe6486c3441b5.png" alt="Envelope feature" width="678" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Illuminate&lt;a href="https://pubnub.com/docs/release-notes/2024/may#illuminate-" rel="noopener noreferrer"&gt;💡&lt;/a&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Skumulowane &lt;a href="https://pubnub.com/docs/release-notes/2024/may#stacked-bar-charts" rel="noopener noreferrer"&gt;wykresy&lt;/a&gt; słupkowe
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Typ&lt;/strong&gt;: Nowa funkcja&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Opis&lt;/strong&gt;: Oprócz wykresów słupkowych i liniowych, Illuminate Dashboards oferuje teraz nowy typ wykresu &lt;a href="https://pubnub.com/docs/illuminate/dashboards/basics#settings" rel="noopener noreferrer"&gt;słupkowego sk&lt;/a&gt; umulowanego, który poprawia czytelność danych, gdy na jednym wykresie znajduje się wiele wymiarów i wartości.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Zem7lnII--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/stacked-bar-chart-1c8ca3660f7fcba4c54d4e6b0c60c757.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Zem7lnII--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/stacked-bar-chart-1c8ca3660f7fcba4c54d4e6b0c60c757.png" alt="Stacked bar chart" width="800" height="547"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://pubnub.com/docs/release-notes/2024/may#variables" rel="noopener noreferrer"&gt;Zmienne&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Typ&lt;/strong&gt;: Ulepszenie&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Opis&lt;/strong&gt;: Podczas tworzenia akcji w Decisions (określających, co chcesz zrobić z zebranymi metrykami), możesz dodawać &lt;a href="https://pubnub.com/docs/illuminate/decisions/basics#decision-structure" rel="noopener noreferrer"&gt;zmienne&lt;/a&gt; w tabelach konfiguracji akcji, aby kontrolować i dynamicznie zmieniać to, do czego się odnoszą. Zmiennych można używać bardziej elastycznie - odwołując się do wstępnie zdefiniowanych warunków (wpisz&lt;code&gt;${&lt;/code&gt; &lt;code&gt;)&lt;/code&gt; i wybierz z listy) lub konfigurując nowe zmienne&lt;code&gt;(${zmienna}&lt;/code&gt;) na bieżąco. Zmienne są teraz dostępne dla większości pól akcji, nie tylko w polu &lt;strong&gt;Payload&lt;/strong&gt; lub &lt;strong&gt;Body&lt;/strong&gt; akcji.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1MD1SbGJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/variables-7d466ce2dfd4f14a521e2257ab92c582.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1MD1SbGJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/variables-7d466ce2dfd4f14a521e2257ab92c582.png" alt="Variables" width="800" height="498"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Ulepszone&lt;a href="https://pubnub.com/docs/release-notes/2024/may#improved-data-mapping-fields" rel="noopener noreferrer"&gt;pola&lt;/a&gt; mapowania danych
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Typ&lt;/strong&gt;: Ulepszenie&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Opis&lt;/strong&gt;: Podczas tworzenia obiektu biznesowego i definiowania miar (jakie dane chcesz śledzić) lub wymiarów (aby segmentować to, co śledzisz), musisz zmapować nazwy pól do rzeczywistych pól w ładunku, aby poinformować Illuminate, gdzie należy szukać tych danych. Do tej pory konieczne było ręczne wprowadzenie dokładnego mapowania konkretnego pola ładunku. Od maja Illuminate oferuje bardziej przyjazne dla użytkownika &lt;a href="https://pubnub.com/docs/illuminate/business-objects/basics#data-mapping" rel="noopener noreferrer"&gt;menu rozwijane&lt;/a&gt;, aby zlokalizować dokładną lokalizację danych Publish i App Context.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ml0E_Zqm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/json-menu-5f7606df253bb033f38a900b97f66626.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ml0E_Zqm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/json-menu-5f7606df253bb033f38a900b97f66626.png" alt="JSON menu" width="774" height="558"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Inne&lt;a href="https://pubnub.com/docs/release-notes/2024/may#other-" rel="noopener noreferrer"&gt;🌟&lt;/a&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Nowe wyszukiwanie i&lt;a href="https://pubnub.com/docs/release-notes/2024/may#new-search-and-ai-assistant" rel="noopener noreferrer"&gt;asystent&lt;/a&gt; AI
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Typ&lt;/strong&gt;: Nowa funkcja&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Opis&lt;/strong&gt;: Na koniec, ale zdecydowanie nie mniej ważne, zamieniliśmy wyszukiwanie Algolia w naszych dokumentach na nowe połączone wyszukiwanie i asystenta AI, aby przygoda z nauką PubNub była bardziej dokładna i interaktywna.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kWNcuv_i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://pubnub.com/assets/images/search-88e1601c53cfce296c5b54947b3b32f5.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kWNcuv_i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://pubnub.com/assets/images/search-88e1601c53cfce296c5b54947b3b32f5.gif" alt="Search and AI Assistant" width="800" height="440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Czas podnieść poziom swojej gry w kodowanie i zaprzyjaźnić się z naszym nowym asystentem AI i funkcją wyszukiwania. Będziemy ją udoskonalać w oparciu o Twoje opinie, więc jeśli czegoś brakuje, na pewno to zaktualizujemy. Miłego kodowania! 🚀&lt;/p&gt;

</description>
      <category>pubnub</category>
      <category>documentation</category>
      <category>releases</category>
      <category>releasenotes</category>
    </item>
    <item>
      <title>Przegląd technologii strumieniowego przesyłania danych</title>
      <dc:creator>PubNub Developer Relations</dc:creator>
      <pubDate>Mon, 08 Jul 2024 09:40:21 +0000</pubDate>
      <link>https://forem.com/pubnub-pl/przeglad-technologii-strumieniowego-przesylania-danych-5d9a</link>
      <guid>https://forem.com/pubnub-pl/przeglad-technologii-strumieniowego-przesylania-danych-5d9a</guid>
      <description>&lt;p&gt;Zdolność do przetwarzania dużych ilości danych (big data) w czasie rzeczywistym stała się kluczowa dla wielu organizacji i właśnie w tym miejscu pojawiają się &lt;a href="https://www.pubnub.com/solutions/data-streaming/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;technologie strumieniowego przesyłania danych&lt;/a&gt;. Technologie te pozwalają na przetwarzanie dużych ilości danych w czasie rzeczywistym lub zbliżonym do rzeczywistego w momencie ich generowania, umożliwiając firmom uzyskanie natychmiastowego wglądu i podejmowanie decyzji opartych na danych.&lt;/p&gt;

&lt;p&gt;Sercem tych technologii jest koncepcja strumieni danych, znanych również jako strumienie zdarzeń. Strumienie danych to sekwencje generowane przez różne źródła, takie jak kanały mediów społecznościowych, urządzenia Internetu rzeczy (IoT), pliki dziennika, zestawy danych naukowych i inne. Te strumienie danych są następnie pozyskiwane i przetwarzane przez technologie strumieniowego przesyłania danych.&lt;/p&gt;

&lt;p&gt;Kolejnym ważnym aspektem jest skalowalność strumieni danych. Wraz ze wzrostem ilości danych, technologie mogą skalować się w celu obsługi zwiększonego obciążenia, zapewniając firmom możliwość zbierania danych analitycznych w czasie rzeczywistym. Oznacza to, że firmy mogą analizować swoje dane w miarę ich generowania, umożliwiając im podejmowanie szybkich decyzji, szczególnie przydatnych w scenariuszach, w których ważny jest czas, takich jak wykrywanie oszustw lub optymalizacja obsługi klienta.&lt;/p&gt;

&lt;p&gt;Technologie strumieniowego przesyłania danych obsługują różne formaty, od danych strukturalnych, takich jak bazy danych SQL, po dane nieustrukturyzowane, takie jak wydarzenia na żywo lub kanały mediów społecznościowych; zapewnia to firmom możliwość przetwarzania i analizowania wszystkich rodzajów danych, niezależnie od ich źródła lub formatu. Należy zauważyć, że chociaż technologie te oferują wiele korzyści, wiążą się z nimi również wyzwania; na przykład wymagają zaawansowanych umiejętności inżynierii danych do wdrożenia i zarządzania, wymagając niskiego opóźnienia i wysokiej przepustowości, szczególnie w przypadku obsługi dużych ilości danych.&lt;/p&gt;

&lt;h2&gt;
  
  
  Podstawowe koncepcje technologii strumieniowego przesyłania danych
&lt;/h2&gt;

&lt;p&gt;Technologie strumieniowego przesyłania danych opierają się na kilku podstawowych koncepcjach. Zrozumienie tych pojęć ma kluczowe znaczenie dla pełnego wykorzystania możliwości przetwarzania danych w czasie rzeczywistym:&lt;/p&gt;

&lt;h3&gt;
  
  
  Strumienie danych
&lt;/h3&gt;

&lt;p&gt;Strumienie danych to ciągłe przepływy danych z różnych źródeł, takich jak urządzenia IoT, pliki dziennika, giełdy itp. Te źródła danych generują dane z dużą prędkością, często w czasie rzeczywistym lub prawie w czasie rzeczywistym, a generowane dane są zazwyczaj wrażliwe na czas, co oznacza, że ich znaczenie maleje z czasem.&lt;/p&gt;

&lt;h3&gt;
  
  
  Przetwarzanie strumieniowe
&lt;/h3&gt;

&lt;p&gt;Przetwarzanie strumieniowe to przetwarzanie strumieni danych w czasie rzeczywistym. W przeciwieństwie do przetwarzania wsadowego, które przetwarza dane w zaplanowanych odstępach czasu, przetwarzanie strumieniowe obsługuje dane natychmiast po ich nadejściu. Zapewnia to niskie opóźnienia, co jest niezbędne w przypadku aplikacji wrażliwych na czas, takich jak śledzenie pozycji użytkownika lub cen towarów i podejmowanie decyzji na podstawie tych wartości.&lt;/p&gt;

&lt;h3&gt;
  
  
  Przetwarzanie wsadowe a przetwarzanie strumieniowe
&lt;/h3&gt;

&lt;p&gt;Przetwarzanie wsadowe i przetwarzanie strumieniowe reprezentują dwa różne podejścia do przetwarzania danych. Przetwarzanie wsadowe obsługuje duże ilości danych jednocześnie, w zaplanowanych odstępach czasu i jest odpowiednie do zadań analizy danych niewrażliwych na czas. Z drugiej strony, przetwarzanie strumieniowe obsługuje dane natychmiast po ich wygenerowaniu, zapewniając wgląd w czasie rzeczywistym.&lt;/p&gt;

&lt;p&gt;Mówiąc o przetwarzaniu strumieniowym danych, można również spotkać się z terminem "micro-batch" - podejście to znajduje się pomiędzy przetwarzaniem wsadowym i strumieniowym, gdy potrzebne są bardzo świeże dane, ale niekoniecznie w czasie rzeczywistym.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architektura strumieniowego przesyłania danych
&lt;/h2&gt;

&lt;p&gt;Typowa architektura technologii strumieniowego przesyłania danych obejmuje źródła danych, systemy pozyskiwania danych, systemy przetwarzania strumieniowego i systemy przechowywania danych.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Źródła danych generują strumienie danych.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Systemy pozyskiwania danych, takie jak Apache Kafka lub Amazon Kinesis, przechwytują te strumienie danych do przetwarzania.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Procesor strumieniowy, taki jak Apache Flink lub Apache Spark Streaming, przetwarza pozyskane dane w czasie rzeczywistym.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Przetworzone dane są następnie przechowywane w jeziorach danych lub hurtowniach danych w celu dalszej analizy lub wizualizacji pulpitów nawigacyjnych.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Dane mogą być przesyłane strumieniowo do brzegu sieci bezpośrednio przy użyciu systemów takich jak &lt;a href="https://www.pubnub.com/developers/kafka/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;PubNub Kafka Bridge&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Dane przepływają przez architekturę od źródła do miejsca docelowego w potokach danych. Zasadniczo potoki danych reprezentują podróż danych od punktu ich pochodzenia, poprzez pozyskiwanie, przetwarzanie, a na końcu przechowywanie lub wizualizację.&lt;/p&gt;

&lt;h3&gt;
  
  
  Spójność danych
&lt;/h3&gt;

&lt;p&gt;Spójność danych jest istotnym zagadnieniem w strumieniowym przesyłaniu danych. Technologie strumieniowego przesyłania danych wykorzystują różne techniki, takie jak porządkowanie zdarzeń, przetwarzanie dokładnie raz i odporność na błędy w celu zapewnienia spójności. Techniki te zapewniają, że dane są przetwarzane we właściwej kolejności, żadne dane nie są tracone lub przetwarzane wielokrotnie, a system może odzyskać sprawność po awarii bez utraty danych.&lt;/p&gt;

&lt;p&gt;Na przykład PubNub oferuje kilka sposobów &lt;a href="https://www.pubnub.com/message-delivery-guarantee/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;gwarantowania dostarczania wiadomości&lt;/a&gt;, takich jak potwierdzenia odczytu, porządkowanie wiadomości i kolejkowanie.&lt;/p&gt;

&lt;h3&gt;
  
  
  Narzędzia dla technologii strumieniowego przesyłania danych
&lt;/h3&gt;

&lt;p&gt;Dostępne są różne narzędzia open-source i komercyjne do wdrażania technologii strumieniowego przesyłania danych. Należą do nich Apache Kafka, Apache Flink, AWS Kinesis i Microsoft Azure Stream Analytics. Każde narzędzie ma swoje mocne strony i przypadki użycia, a wybór narzędzia zależy od konkretnych wymagań aplikacji do strumieniowego przesyłania danych.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kolejne kroki z PubNub Data Streaming
&lt;/h2&gt;

&lt;p&gt;Po zrozumieniu podstawowych pojęć i architektury technologii strumieniowego przesyłania danych, kolejnym krokiem jest wdrożenie tych technologii we własnych systemach. PubNub zapewnia solidną i skalowalną platformę strumieniowego przesyłania danych w czasie rzeczywistym, którą można łatwo zintegrować z istniejącą architekturą.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YVmNlsZK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/4821PXPFoWt6Lxhru8nTx7/da5aee77c5ff80c7f351907b22b5fa4a/twitter_short.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YVmNlsZK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/4821PXPFoWt6Lxhru8nTx7/da5aee77c5ff80c7f351907b22b5fa4a/twitter_short.png" title="Data Streaming Demo image" alt="Image showing real-time data streaming" width="800" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Oto kroki, które należy wykonać, aby rozpocząć pracę z PubNub Data Streaming:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Explore Demos&lt;/strong&gt;: PubNub udostępnia wersję demonstracyjną strumieniowego przesyłania &lt;a href="https://www.pubnub.com/demos/real-time-data-streaming/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;danych w czasie&lt;/a&gt; rzeczywistym, która pomaga zrozumieć, jak działa nasza platforma. Ta wersja demonstracyjna ma zastosowanie do szerokiego zakresu przypadków użycia, od aplikacji czatu po sterowanie urządzeniami IoT.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Poznaj podstawy&lt;/strong&gt;: PubNub udostępnia obszerny glosariusz opisujący kluczowe terminy i pojęcia, w tym wpis dotyczący &lt;a href="https://www.pubnub.com/learn/glossary/data-streaming/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;strumieniowego&lt;/a&gt; przesyłania danych.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Zrozumieć&lt;/strong&gt; PubNub Illuminate: Dzięki &lt;a href="https://www.pubnub.com/products/illuminate/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;PubNub&lt;/a&gt; Illuminate możesz na bieżąco dostosowywać strategie monetyzacji, łączyć zachowania użytkowników z zachętami, śledzić każde działanie za pomocą niestandardowych, zagregowanych danych w czasie rzeczywistym i urządzeń oraz natychmiast widzieć wyniki - a wszystko to bez obciążania zespołu programistów.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Rejestracja&lt;/strong&gt;: Zarejestruj konto PubNub. Można to zrobić na &lt;a href="https://admin.pubnub.com/#/register?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;stronie rejestracji&lt;/a&gt;. Darmowa warstwa konta PubNub ma duże limity i nie wymaga karty kredytowej, dopóki nie będziesz gotowy do aktualizacji.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Zacznij&lt;/strong&gt; tworzyć: Gdy już opanujesz podstawy, zacznij tworzyć własne aplikacje do strumieniowego przesyłania danych. PubNub udostępnia wiele samouczków, które poprowadzą cię przez tworzenie różnych typów aplikacji, w tym &lt;a href="https://www.pubnub.com/tutorials/real-time-data-streaming/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;samouczek dotyczący tworzenia aplikacji do strumieniowego przesyłania danych w czasie rzeczywistym&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Poznaj interfejsy API&lt;/strong&gt;: PubNub zapewnia szeroką gamę interfejsów API i zestawów SDK, które można wykorzystać do tworzenia aplikacji. Więcej informacji można znaleźć na naszej &lt;a href="https://www.pubnub.com/docs/sdks?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;stronie dokumentacji SDK&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Poznaj ceny&lt;/strong&gt;: Przed zakończeniem tworzenia aplikacji warto wiedzieć, ile to będzie kosztować. Więcej informacji na temat cen PubNub można znaleźć na stronie z &lt;a href="https://www.pubnub.com/pricing/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;cennikiem&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Głębsze spojrzenie na przypadki użycia technologii strumieniowego przesyłania danych
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Analiza danych w czasie rzeczywistym
&lt;/h3&gt;

&lt;p&gt;Jednym z głównych zastosowań technologii strumieniowego przesyłania danych jest analiza danych w czasie rzeczywistym. Przetwarzając i analizując strumienie danych w czasie rzeczywistym, firmy mogą uzyskać natychmiastowy wgląd w swoje operacje i podejmować szybkie, świadome decyzje. Może to być szczególnie przydatne w branżach takich jak finanse, gdzie analiza danych w czasie rzeczywistym może być wykorzystywana do wykrywania oszustw, analizy trendów rynkowych i nie tylko.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/products/illuminate/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;PubNub&lt;/a&gt; Illuminate jest przykładem platformy analitycznej działającej w czasie rzeczywistym. PubNub Illuminate jest jednak czymś więcej niż tylko platformą do zarządzania danymi, pozwala również definiować warunki w oparciu o metryki danych, które po uruchomieniu wykonają dynamiczne działania w oparciu o te dane.&lt;/p&gt;

&lt;h3&gt;
  
  
  Internet rzeczy (IoT)
&lt;/h3&gt;

&lt;p&gt;Innym ważnym zastosowaniem technologii strumieniowego przesyłania danych jest Internet rzeczy (IoT), w którym urządzenia generują strumienie danych, które mogą być przetwarzane w czasie rzeczywistym w celu zapewnienia cennych informacji. Na przykład monitorowanie wydajności urządzeń przemysłowych umożliwia firmom wykrywanie i rozwiązywanie problemów, zanim doprowadzą one do awarii sprzętu.&lt;/p&gt;

&lt;h3&gt;
  
  
  Analiza mediów społecznościowych
&lt;/h3&gt;

&lt;p&gt;Platformy mediów społecznościowych generują ogromne ilości danych w każdej sekundzie, a technologie strumieniowego przesyłania danych mogą przetwarzać te dane w czasie rzeczywistym, umożliwiając firmom monitorowanie trendów, śledzenie nastrojów klientów i natychmiastowe reagowanie na opinie klientów.&lt;/p&gt;

&lt;h3&gt;
  
  
  Handel elektroniczny
&lt;/h3&gt;

&lt;p&gt;W branży e-commerce technologie strumieniowego przesyłania danych mogą śledzić zachowania klientów w czasie rzeczywistym, umożliwiając firmom dostarczanie spersonalizowanych rekomendacji, poprawę doświadczeń klientów i zwiększenie sprzedaży.&lt;/p&gt;

&lt;h2&gt;
  
  
  Przyszłe trendy w technologiach strumieniowego przesyłania danych
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Integracja z uczeniem maszynowym i sztuczną inteligencją
&lt;/h3&gt;

&lt;p&gt;Jednym ze znaczących trendów w technologiach strumieniowego przesyłania danych jest integracja uczenia maszynowego i generatywnej sztucznej inteligencji. Modele uczenia maszynowego mogą być dostarczane z danymi w czasie rzeczywistym potrzebnymi do dokonywania dokładnych i terminowych prognoz. Może to być szczególnie przydatne w konserwacji predykcyjnej, gdzie modele uczenia maszynowego mogą przewidywać awarie części na podstawie danych w czasie rzeczywistym - na przykład cykle rozładowania baterii urządzenia mobilnego mogą być wykorzystane do oszacowania oczekiwanej żywotności baterii.&lt;/p&gt;

&lt;h3&gt;
  
  
  Zwiększone wykorzystanie frameworków open source
&lt;/h3&gt;

&lt;p&gt;Struktury open-source, takie jak Apache Kafka, Apache Flink i Spark Streaming, stały się popularnymi narzędziami do wdrażania technologii strumieniowego przesyłania danych. Struktury te oferują solidne możliwości przetwarzania dużych ilości danych w czasie rzeczywistym, a ich charakter open-source sprawia, że są wysoce konfigurowalne i można je dostosować do różnych przypadków użycia. Spodziewamy się zwiększonego wykorzystania tych i innych frameworków open-source w przyszłości.&lt;/p&gt;

&lt;h3&gt;
  
  
  Większy nacisk na bezpieczeństwo i prywatność danych
&lt;/h3&gt;

&lt;p&gt;Ponieważ firmy w coraz większym stopniu polegają na technologiach strumieniowego przesyłania danych w celu przetwarzania danych wrażliwych, większy nacisk będzie kładziony na bezpieczeństwo i prywatność danych. Będzie to wymagało wdrożenia solidnych środków bezpieczeństwa w celu ochrony strumieni danych przed nieautoryzowanym dostępem i zapewnienia zgodności z przepisami dotyczącymi prywatności danych.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bardziej zaawansowane techniki inżynierii danych
&lt;/h3&gt;

&lt;p&gt;Spodziewamy się bardziej zaawansowanych technik inżynierii danych, w miarę jak inżynierowie będą coraz lepiej zaznajomieni z tymi technologiami, w tym bardziej wyrafinowanych algorytmów przetwarzania strumieni, optymalizacji potoków danych i zapewniania spójności danych.&lt;/p&gt;

&lt;h2&gt;
  
  
  Podsumowanie
&lt;/h2&gt;

&lt;p&gt;Przyszłość technologii strumieniowego przesyłania danych rysuje się w jasnych barwach. Zapewniając firmom lepszy wgląd w działalność operacyjną w czasie rzeczywistym, mogą one podejmować natychmiastowe działania bez konieczności polegania na danych historycznych, zwiększając zadowolenie klientów, wydajność i rentowność. Niezależnie od branży, czy jest to zarządzanie klientami, handel elektroniczny, IoT czy analiza mediów społecznościowych, technologie strumieniowego przesyłania danych mogą potencjalnie zmienić sposób działania firm.&lt;/p&gt;

&lt;p&gt;PubNub może pomóc w przekształceniu firmy dzięki strumieniowemu przesyłaniu danych. Zachęcamy do skontaktowania się z zespołem DevRel pod adresem &lt;a href="//mailto:devrel@pubnub.com"&gt;devrel@pubnub.com&lt;/a&gt; lub z naszym zespołem &lt;a href="https://support.pubnub.com/hc/en-us?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;pomocy&lt;/a&gt; technicznej w celu uzyskania pomocy w dowolnym aspekcie rozwoju PubNub.&lt;/p&gt;

&lt;h1&gt;
  
  
  Jak PubNub może ci pomóc?
&lt;/h1&gt;

&lt;p&gt;Ten artykuł został pierwotnie opublikowany na &lt;a href="https://www.pubnub.com/blog/data-streaming-technologies-overview/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;PubNub.com&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Fundamentem naszej platformy jest największa w branży i najbardziej skalowalna sieć przesyłania wiadomości 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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Poznaj PubNub
&lt;/h2&gt;

&lt;p&gt;Sprawdź &lt;a href="https://www.pubnub.com/tour/introduction/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Live Tour&lt;/a&gt;, aby zrozumieć podstawowe koncepcje każdej aplikacji opartej na PubNub w mniej niż 5 minut.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rozpocznij konfigurację
&lt;/h2&gt;

&lt;p&gt;Załóż &lt;a href="https://admin.pubnub.com/signup/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;konto&lt;/a&gt; PubNub, aby uzyskać natychmiastowy i bezpłatny dostęp do kluczy PubNub.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rozpocznij
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Dokumenty&lt;/a&gt; PubNub pozwolą Ci rozpocząć pracę, niezależnie od przypadku użycia lub &lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;zestawu SDK&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Moderacja czatu za pomocą OpenAI</title>
      <dc:creator>PubNub Developer Relations</dc:creator>
      <pubDate>Wed, 03 Jul 2024 15:17:47 +0000</pubDate>
      <link>https://forem.com/pubnub-pl/moderacja-czatu-za-pomoca-openai-29o0</link>
      <guid>https://forem.com/pubnub-pl/moderacja-czatu-za-pomoca-openai-29o0</guid>
      <description>&lt;p&gt;Każda aplikacja zawierająca &lt;a href="https://www.pubnub.com/solutions/chat/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;czat w aplikacji&lt;/a&gt; musi w jakiś sposób regulować i moderować wiadomości, które użytkownicy mogą wymieniać. Ponieważ nie jest możliwe moderowanie wszystkich nieodpowiednich treści za pomocą ludzkich moderatorów, system moderacji musi być automatyczny. Ponieważ użytkownicy często próbują obejść moderację, uczenie maszynowe, generatywna sztuczna inteligencja i duże modele językowe (LLM) [oraz modele GPT, takie jak GPT-3 i GPT-4] są popularnymi sposobami moderowania treści.&lt;/p&gt;

&lt;p&gt;Moderacja to złożony temat, a PubNub oferuje różne rozwiązania spełniające wszystkie przypadki użycia naszych deweloperów.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.pubnub.com/docs/serverless/functions/overview?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;Funkcje&lt;/a&gt; PubNub mogą przechwytywać i modyfikować wiadomości, zanim dotrą one do miejsca docelowego. W ramach funkcji można stosować niestandardową logikę, w tym wywoływanie zewnętrznego interfejsu API REST, co pozwala na korzystanie z dowolnej zewnętrznej usługi do moderowania wiadomości. To podejście zostało wykorzystane w tym artykule do integracji z OpenAI.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Funkcje PubNub oferują &lt;a href="https://www.pubnub.com/integrations/?page=1&amp;amp;sortBy=Most%20recent&amp;amp;utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;niestandardowe integracje&lt;/a&gt;, które obsługują moderację treści i analizę nastrojów, w tym &lt;a href="https://www.pubnub.com/integrations/lasso-moderation/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;Lasso Moderation&lt;/a&gt;, &lt;a href="https://www.pubnub.com/integrations/tisane-labs-nlp/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;Tisane&lt;/a&gt;, &lt;a href="https://www.pubnub.com/integrations/chat-message-profanity-filter/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;filtr wulgaryzmów oparty na RegEx&lt;/a&gt;, &lt;a href="https://www.pubnub.com/integrations/lexalytics/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;Lexalytics&lt;/a&gt; i &lt;a href="https://www.pubnub.com/integrations/communitysift/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;Community Sift&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;BizOps Workspace firmy PubNub może &lt;a href="https://www.pubnub.com/how-to/monitor-and-moderate-conversations-with-bizops-workspace/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;monitorować i moderować konwersacje&lt;/a&gt;, w tym edytować i usuwać wiadomości.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Punkt końcowy moderowania Open AI
&lt;/h2&gt;

&lt;p&gt;W tym artykule przyjrzymy się &lt;a href="https://platform.openai.com/docs/guides/moderation/overview"&gt;OpenAI Moderation API&lt;/a&gt;, interfejsowi API REST, który wykorzystuje sztuczną inteligencję (AI) do określenia, czy dostarczony tekst zawiera potencjalnie szkodliwe terminy. Intencją API jest umożliwienie programistom filtrowania lub usuwania szkodliwych treści, a w chwili pisania tego tekstu jest on udostępniany &lt;strong&gt;bezpłatnie&lt;/strong&gt;, choć obsługuje tylko język angielski.&lt;/p&gt;

&lt;p&gt;Model stojący za Moderation API będzie kategoryzował dostarczony tekst w następujący sposób (zaczerpnięty z &lt;a href="https://platform.openai.com/docs/guides/moderation/overview"&gt;dokumentacji API&lt;/a&gt;):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Nienawiść&lt;/strong&gt;: Treści, które wyrażają, podżegają lub promują nienawiść ze względu na rasę, płeć, pochodzenie etniczne, religię, narodowość, orientację seksualną, niepełnosprawność lub kastę. Nienawistne treści skierowane do grup nieobjętych ochroną (np. szachistów) stanowią nękanie.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Nienawiść / Groźby:&lt;/strong&gt; Nienawistne treści, które obejmują również przemoc lub poważne obrażenia wobec grupy docelowej w oparciu o rasę, płeć, pochodzenie etniczne, religię, narodowość, orientację seksualną, status niepełnosprawności lub kastę.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Nękanie:&lt;/strong&gt; Treści, które wyrażają, podżegają lub promują napastliwy język wobec dowolnej grupy docelowej.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Nękanie/groźby:&lt;/strong&gt; Treści nękające, które obejmują również przemoc lub poważne obrażenia wobec dowolnej osoby.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Samookaleczenie&lt;/strong&gt;: Treści, które promują, zachęcają lub przedstawiają akty samookaleczenia, takie jak samobójstwo, cięcie się i zaburzenia odżywiania.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Samookaleczenie / zamiar:&lt;/strong&gt; Treści, w których osoba mówiąca wyraża, że angażuje się lub zamierza angażować się w akty samookaleczenia, takie jak samobójstwo, cięcie się i zaburzenia odżywiania.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Samookaleczenie / Instrukcje:&lt;/strong&gt; Treści, które zachęcają do dokonywania aktów samookaleczenia, takich jak samobójstwo, cięcie się i zaburzenia odżywiania, lub które zawierają instrukcje lub porady dotyczące popełniania takich aktów.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Seksualne:&lt;/strong&gt; Treści mające na celu wzbudzenie podniecenia seksualnego, takie jak opisy aktywności seksualnej lub promujące usługi seksualne (z wyłączeniem edukacji seksualnej i dobrego samopoczucia).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Seksualne / Nieletni:&lt;/strong&gt; Treści o charakterze seksualnym przedstawiające osoby poniżej 18 roku życia.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Przemoc:&lt;/strong&gt; Treści przedstawiające śmierć, przemoc lub obrażenia fizyczne.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Przemoc / Grafika:&lt;/strong&gt; Treści przedstawiające śmierć, przemoc lub obrażenia fizyczne w szczegółach graficznych.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Wyniki są dostarczane w strukturze JSON w następujący sposób (ponownie zaczerpnięte z dokumentacji API):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;modr-XXXXX&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;model&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text-moderation-007&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;results&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;flagged&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;categories&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;sexual&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hate&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;harassment&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;self-harm&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;sexual/minors&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hate/threatening&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;violence/graphic&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;self-harm/intent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;self-harm/instructions&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;harassment/threatening&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;violence&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;category_scores&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;//  Out of scope for this article&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Wywoływanie Open AI Moderation API z PubNub
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Integracja interfejsu API Moderation z dowolną aplikacją PubNub jest łatwa przy użyciu funkcji PubNub&lt;/strong&gt;, postępując zgodnie z tym samouczkiem krok po kroku:&lt;/p&gt;

&lt;p&gt;Funkcje umożliwiają przechwytywanie zdarzeń w czasie rzeczywistym zachodzących na platformie PubNub, takich jak wysyłane i odbierane wiadomości; można następnie napisać niestandardowy kod bezserwerowy w ramach tych funkcji, aby modyfikować, przekierowywać, rozszerzać lub filtrować wiadomości w razie potrzeby.&lt;/p&gt;

&lt;p&gt;Będziesz musiał użyć typu zdarzenia "Before Publish or Fire"; ten typ funkcji zostanie wywołany &lt;em&gt;przed&lt;/em&gt; dostarczeniem wiadomości i musi zakończyć wykonywanie, zanim wiadomość zostanie zwolniona, aby mogła zostać dostarczona do odbiorców. &lt;a href="https://www.pubnub.com/docs/serverless/functions/overview#what-function-type-to-use?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;Dokumentacja&lt;/a&gt; PubNub zawiera więcej informacji i szczegółów, ale w skrócie: "Before Publish or Fire" to wywołanie synchroniczne, które może &lt;em&gt;zmienić wiadomość lub jej ładunek&lt;/em&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tworzenie funkcji PubNub
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Zaloguj się do &lt;a href="https://admin.pubnub.com?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;portalu administracyjnego&lt;/a&gt; PubNub i wybierz aplikację oraz zestaw kluczy dla aplikacji, którą chcesz moderować.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Wybierz "Functions", które można znaleźć w zakładce "Build".&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Wybierz "+ CREATE NEW MODULE" i nadaj modułowi nazwę i opis.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Wybierz "+ CREATE NEW FUNCTION" i nadaj funkcji nazwę.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Jako typ zdarzenia wybierz "Before Publish or Fire".&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Jako nazwę kanału wpisz &lt;strong&gt;*&lt;/strong&gt; (w tym demo użyjemy &lt;strong&gt;*&lt;/strong&gt;, ale twoja aplikacja może określić tutaj tylko kanały, które chcesz moderować).&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Po utworzeniu funkcji PubNub musisz podać swój klucz API Open AI jako sekret.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Wybierz "MOJE SEKRETY" i utwórz nowy klucz o nazwie "OPENAI_API_KEY".&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Wygeneruj&lt;a href="https://platform.openai.com/account/api-keys"&gt;klucz&lt;/a&gt; API Open AI i upewnij się, że klucz ma dostęp do umiarkowanego API.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Podaj wygenerowany klucz API do właśnie utworzonego sekretu funkcji PubNub.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Treść funkcji PubNub będzie wyglądać następująco:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;xhr&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;xhr&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;vault&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vault&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;messageText&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;getOpenaiApiKey&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;apiKey&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;openAIModeration&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;messageText&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;aiResponse&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;//  Append the response to the message&lt;/span&gt;
        &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;openAiModeration&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;aiResponse&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="c1"&gt;//  If the message was harmful, you might also choose to report the message here.&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
      &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;OPENAI_API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getOpenaiApiKey&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Use cached key&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;OPENAI_API_KEY&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;resolve&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;OPENAI_API_KEY&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="c1"&gt;// Fetch key from vault&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;vault&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;OPENAI_API_KEY&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;apikey&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;OPENAI_API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;apikey&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;resolve&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;OPENAI_API_KEY&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;openAIModeration&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;messageText&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://api.openai.com/v1/moderations&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;http_options&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;method&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;headers&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Authorization&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Bearer &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;OPENAI_API_KEY&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;body&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;input&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;messageText&lt;/span&gt;
    &lt;span class="p"&gt;}),&lt;/span&gt;
    &lt;span class="na"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;9500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;retries&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;xhr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;http_options&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;body&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Open AI Timed out&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sama funkcja jest dość prosta:&lt;/p&gt;

&lt;p&gt;Dla każdej otrzymanej wiadomości:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Przekaż ją do funkcji moderacji Open AI&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Dołącz zwrócony obiekt moderacji jako nowy klucz do obiektu Message (JSON).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Zapisz funkcję i upewnij się, że moduł jest uruchomiony.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Opóźnienie
&lt;/h3&gt;

&lt;p&gt;Funkcja PubNub, którą właśnie utworzyłeś, będzie wykonywana synchronicznie za każdym razem, gdy wiadomość zostanie wysłana, a wiadomość ta nie zostanie dostarczona, dopóki funkcja nie zakończy wykonywania. Ponieważ funkcja zawiera wywołanie zewnętrznego interfejsu API, opóźnienie dostarczenia będzie zależeć od szybkości powrotu wywołania API do Open AI, co jest poza kontrolą PubNub i może być dość wysokie.&lt;/p&gt;

&lt;p&gt;Istnieje kilka sposobów na złagodzenie pogorszenia wrażeń użytkownika. Większość wdrożeń zapewnia natychmiastową informację zwrotną dla nadawcy, że wiadomość została wysłana, a następnie polega na potwierdzeniach odczytu, aby wskazać, że wiadomość została dostarczona (lub zgłoszona).&lt;/p&gt;

&lt;h3&gt;
  
  
  Aktualizacja aplikacji klienckiej
&lt;/h3&gt;

&lt;p&gt;Rozważmy, co byłoby wymagane do obsługi ładunku moderacji w aplikacji przy użyciu &lt;a href="https://www.pubnub.com/demos/chat/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;Chat Demo&lt;/a&gt;, która jest aplikacją React wykorzystującą &lt;a href="https://www.pubnub.com/docs/chat/overview?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;PubNub Chat SDK&lt;/a&gt; do pokazania większości funkcji typowej aplikacji czatu.&lt;/p&gt;

&lt;p&gt;Skonfiguruj atrybut, aby śledzić, czy potencjalnie szkodliwa wiadomość powinna zostać wyświetlona:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;showHarmfulMessage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setShowHarmfulMessage&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I dodać trochę logiki, aby domyślnie nie wyświetlać potencjalnie szkodliwej wiadomości, w tym przypadku w &lt;a href="https://github.com/PubNubDevelopers/Chat-SDK-Demo-Web/blob/90447262583c251c983f04f23ffb23adcbbd6d25/chat-sdk-demo-web/app/chat/ui-components/message.tsx"&gt;message.tsx&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{(&lt;/span&gt;
  &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;openAiModeration&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; 
  &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;openAiModeration&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;flagged&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; 
  &lt;span class="nx"&gt;showHarmfulMessage&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;
&lt;span class="p"&gt;)}&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;showHarmfulMessage&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; 
  &lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;openAiModeration&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;flagged&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; 
  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;span&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Message&lt;/span&gt; &lt;span class="nx"&gt;contains&lt;/span&gt; &lt;span class="nx"&gt;potentially&lt;/span&gt; &lt;span class="nx"&gt;harmful&lt;/span&gt; &lt;span class="nx"&gt;content&lt;/span&gt; 
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;span&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text-blue-400 cursor-pointer&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; 
    &lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;setShowHarmfulMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)}}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Reveal&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/span&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/span&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ygaqd9Nx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/1qmBAFCDiDwwKdp7TLSCaw/516d3b1de50c22784996f1e43a65fdc7/Screenshot_2024-07-01_at_10.59.58.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ygaqd9Nx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/1qmBAFCDiDwwKdp7TLSCaw/516d3b1de50c22784996f1e43a65fdc7/Screenshot_2024-07-01_at_10.59.58.png" title="Chat Moderation with OpenAI - Image 01" alt="Chat Moderation with OpenAI - Image" width="800" height="240"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Zauważ, że te zmiany nie są obecne w &lt;strong&gt;hostowanej&lt;/strong&gt; wersji &lt;a href="https://www.pubnub.com/demos/chat/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;Chat Demo&lt;/a&gt;, ale &lt;a href="https://github.com/PubNubDevelopers/Chat-SDK-Demo-Web/blob/main/README.md"&gt;ReadMe zawiera pełne instrukcje&lt;/a&gt;, jak ją zbudować i uruchomić z własnego zestawu kluczy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Podsumowanie
&lt;/h2&gt;

&lt;p&gt;Oto szybki i łatwy (oraz darmowy) sposób na dodanie zarówno moderacji, jak i analizy sentymentu do aplikacji przy użyciu Open AI.&lt;/p&gt;

&lt;p&gt;Aby dowiedzieć się więcej o integracji Open AI z PubNub, zapoznaj się z innymi zasobami:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.pubnub.com/blog/openai-gpt-api-integration-with-functions/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;Integracja API OpenAI GPT z funkcjami&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.pubnub.com/blog/build-a-chatbot-with-pubnub-and-chatgpt-openai/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;Tworzenie Chatbota z PubNub i ChatGPT&lt;/a&gt; (Dodawanie Chatbota do naszej prezentacji PubNub)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.pubnub.com/blog/enhance-geo-app-with-pubnub-and-openai-chatgpt/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;Ulepszanie aplikacji geograficznej za pomocą PubNub i Chat GPT / OpenAI&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Zachęcamy do skontaktowania się z zespołem DevRel pod adresem &lt;a href="//mailto:devrel@pubnub.com"&gt;devrel@pubnub.com&lt;/a&gt; lub z naszym zespołem &lt;a href="https://support.pubnub.com/hc/en-us?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;pomocy&lt;/a&gt; technicznej w celu uzyskania pomocy w dowolnym aspekcie rozwoju PubNub.&lt;/p&gt;

&lt;h1&gt;
  
  
  Jak PubNub może ci pomóc?
&lt;/h1&gt;

&lt;p&gt;Ten artykuł został pierwotnie opublikowany na &lt;a href="https://www.pubnub.com/blog/chat-moderation-with-openai/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;PubNub.com&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Fundamentem naszej platformy jest największa w branży i najbardziej skalowalna sieć przesyłania wiadomości 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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Poznaj PubNub
&lt;/h2&gt;

&lt;p&gt;Sprawdź &lt;a href="https://www.pubnub.com/tour/introduction/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;Live Tour&lt;/a&gt;, aby zrozumieć podstawowe koncepcje każdej aplikacji opartej na PubNub w mniej niż 5 minut.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rozpocznij konfigurację
&lt;/h2&gt;

&lt;p&gt;Załóż &lt;a href="https://admin.pubnub.com/signup/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;konto&lt;/a&gt; PubNub, aby uzyskać natychmiastowy i bezpłatny dostęp do kluczy PubNub.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rozpocznij
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;Dokumenty&lt;/a&gt; PubNub pozwolą Ci rozpocząć pracę, niezależnie od przypadku użycia lub &lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;zestawu SDK&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Jak używać Illuminate do balansowania gier</title>
      <dc:creator>PubNub Developer Relations</dc:creator>
      <pubDate>Wed, 03 Jul 2024 06:30:47 +0000</pubDate>
      <link>https://forem.com/pubnub-pl/jak-uzywac-illuminate-do-balansowania-gier-57kb</link>
      <guid>https://forem.com/pubnub-pl/jak-uzywac-illuminate-do-balansowania-gier-57kb</guid>
      <description>&lt;p&gt;Najnowsza wersja produktu PubNub, Illuminate, to skalowalne narzędzie do podejmowania decyzji, które stworzyliśmy, aby pomóc twórcom gier, menedżerom produktów i kierownikom projektów tworzyć, iterować i eksperymentować w ramach platformy PubNub.&lt;/p&gt;

&lt;p&gt;Zaprojektowane od podstaw z doskonałym interfejsem użytkownika, Illuminate może pomóc w podejmowaniu decyzji, aby zapewnić graczom lepsze wrażenia i przyspieszyć monetyzację w czasie rzeczywistym.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Czym więc jest balansowanie rozgrywki i jak można z niego korzystać w czasie rzeczywistym?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Balans gry to gałąź projektowania gier, która poprawia rozgrywkę i wrażenia użytkownika poprzez zrównoważenie trudności i sprawiedliwości. Balans gry polega na dostosowaniu nagród, wyzwań i/lub elementów gry w celu stworzenia zamierzonego doświadczenia gracza.&lt;/p&gt;

&lt;p&gt;Balans gry jest ogólnie rozumiany jako wprowadzenie sprawiedliwości dla graczy. Obejmuje to;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Dostosowanie poziomu trudności,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Modyfikowanie warunków wygranej i przegranej&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;stany gry&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Równoważenie ekonomii&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Więcej informacji na temat balansowania gry można znaleźć na stronie &lt;a href="https://en.wikipedia.org/wiki/Game_balance"&gt;Wikipedia&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Korzystanie z balansu gry w czasie rzeczywistym może pomóc utrzymać zaangażowanie graczy, sprawić, że nowi gracze poczują się mile widziani i potencjalnie zarabiać na rozgrywce.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Jak Illuminate może pomóc w utrzymaniu zaangażowania graczy?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Jak wspomniano, Illuminate jest narzędziem do podejmowania decyzji w czasie rzeczywistym. Aby pomóc utrzymać zaangażowanie naszych graczy, skupimy się na nowych graczach, tych, którzy są nowi w grze i potencjalnie potrzebują pomocy w przyzwyczajeniu się do sposobu gry.&lt;/p&gt;

&lt;p&gt;W tym przykładzie zbudowałem staromodną kopię asteroid napisaną w JavaScript i hostowaną w całości na funkcjach PubNub. Więcej informacji na temat funkcji PubNub można znaleźć na stronie &lt;a href="https://www.pubnub.com/docs/serverless/functions/overview?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;https://www.pubnub.com/docs/serverless/functions/overview&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Po pierwsze, aby ustawić scenę.&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Wyobraźmy sobie, że nowy gracz dołącza do gry i zaczyna grać, przegrywa i zaczyna się nudzić brakiem postępów.&lt;/p&gt;

&lt;p&gt;Poprzez publikację możemy wysłać wiadomość z gry do PubNub, która powiadamia Illuminate o postępach gracza i wyniku, Illuminate podejmuje pewne decyzje w oparciu o predefiniowane metryki, a następnie wysyła wiadomość z powrotem do tego gracza, oferując mu opcję zakupu trzech żyć lub obejrzenia płatnej promocji w zamian za otrzymanie dwóch żyć.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Przejdźmy przez ekrany.&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dvjKtS3o--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/5ELOgmKIhdlJDGcsRfeLRr/ea1c9bd24814904ca26d9add6fd150ce/image2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dvjKtS3o--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/5ELOgmKIhdlJDGcsRfeLRr/ea1c9bd24814904ca26d9add6fd150ce/image2.png" title="Use Illuminate to Balance your Games - Image - 01" alt="Use Illuminate to Balance your Games" width="800" height="579"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Gra zaczyna się normalnie, ale jak widać, nie jestem zbyt dobrym graczem i zginąłem z zaledwie 70 punktami.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Wa3NuixJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/25ixCXROWywRJGXEfuZ1ww/f674cfdcbe0452c50e9a4006b61407cb/image3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Wa3NuixJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/25ixCXROWywRJGXEfuZ1ww/f674cfdcbe0452c50e9a4006b61407cb/image3.png" title="Use Illuminate to Balance your Games - Image - 02" alt="Use Illuminate to Balance your Games" width="800" height="503"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Aby pomóc mi kontynuować grę, Illuminate otrzymało ten wynik i obliczyło, że powinienem otrzymać możliwość zakupu kilku żyć lub obejrzenia reklamy, aby uzyskać kilka żyć.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rJbLh6TP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/6JROao8WMMGqV8dfKIj3XV/e584b545d64fc7edde4332e76c3b2d2b/image5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rJbLh6TP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/6JROao8WMMGqV8dfKIj3XV/e584b545d64fc7edde4332e76c3b2d2b/image5.png" title="Use Illuminate to Balance your Games - Image - 03" alt="Use Illuminate to Balance your Games" width="800" height="509"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Decydując się na wydanie pieniędzy, byłem w stanie kupić kilka żyć i szybko wróciłem do gry.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2wJApHCr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/5tUDTkcymTnRqZfkLobWly/1e8982bd6b68b3a1e183e8e292f1c809/image4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2wJApHCr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/5tUDTkcymTnRqZfkLobWly/1e8982bd6b68b3a1e183e8e292f1c809/image4.png" title="Use Illuminate to Balance your Games - Image - 04" alt="Use Illuminate to Balance your Games" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Przejdźmy za kulisy Illuminate.&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Illuminate można znaleźć w portalu konta PubNub - &lt;a href="https://admin.pubnub.com/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;https://admin.pubnub.com/,&lt;/a&gt; pod nagłówkiem "Optymalizacja".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HEU8DB6M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/2N5rjdq2zVsuvvJNcihzEV/e924e81bf6edade34287bfd7308524c5/image7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HEU8DB6M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/2N5rjdq2zVsuvvJNcihzEV/e924e81bf6edade34287bfd7308524c5/image7.png" title="Use Illuminate to Balance your Games - Image - 05" alt="Use Illuminate to Balance your Games" width="291" height="227"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Naszym pierwszym przystankiem jest sprawdzenie naszych obiektów biznesowych. Obiekty biznesowe to sposób na pobieranie danych do Illuminate, pomagają nam zdefiniować, jakiego rodzaju dane musimy przechwytywać i skąd.&lt;/p&gt;

&lt;p&gt;Możesz zdefiniować, jakie dane chcesz śledzić, dodając miary i jak chcesz segmentować te dane, dodając wymiary.&lt;/p&gt;

&lt;p&gt;Jeśli potrzebujesz pomocy w konfiguracji lub zrozumieniu konfiguracji Illuminate, możesz znaleźć dokumenty tutaj: &lt;a href="https://www.pubnub.com/docs/illuminate/basics?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;https://www.pubnub.com/docs/illuminate/basics&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Zrównoważenie gry wymaga wiedzy na temat tego, co chcesz śledzić i co chcesz zaoferować nowym graczom, aby utrzymać ich zaangażowanie.&lt;/p&gt;

&lt;p&gt;Takie są umiejętności Illuminate; bez żadnego kodowania możemy dodawać, usuwać lub modyfikować zmienne, aby doskonalić, a nawet dostosowywać to, co oferujemy różnym graczom.&lt;/p&gt;

&lt;p&gt;W tym prostym przykładzie zdecydowałem się zmierzyć wynik gry, ale można łatwo dodać inne miary; przykłady tutaj obejmują;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Czy gracz jest gościem, czy ma konto na platformie gry?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Całkowita długość gry&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Typ urządzenia - sieć, telefon komórkowy, telewizor.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Czy wcześniej kupili coś od ciebie w poprzednich wydarzeniach lub grach?&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Wracając do moich celów biznesowych, pozwól, że pokażę ci miary, z którymi pracuję.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oozHcE3I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/5j3WZoN5vgm83pxBmPwqbo/86b0b2ded611de919de4f73b7f061447/image6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oozHcE3I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/5j3WZoN5vgm83pxBmPwqbo/86b0b2ded611de919de4f73b7f061447/image6.png" title="Use Illuminate to Balance your Games - Image - 06" alt="Use Illuminate to Balance your Games" width="800" height="698"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rozkładając to na czynniki pierwsze:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mierniki:&lt;/strong&gt; Wartości liczbowe, które można zmierzyć lub zsumować.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wymiary:&lt;/strong&gt; Wartości jakościowe, które można wykorzystać do segmentacji miar.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Metryki:&lt;/strong&gt; Agregacja miar posegmentowanych według wybranych wymiarów.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Decyzje:&lt;/strong&gt; Zbiór warunków i działań. Gdy warunki są spełnione, uruchamiana jest odpowiednia akcja.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dashboards:&lt;/strong&gt; Zbiór wykresów w czasie rzeczywistym, które wizualizują metryki i decyzje.&lt;/p&gt;

&lt;p&gt;W moim przykładzie jedną z miar, których używam, jest klient proszący Illuminate o pomoc, gdy wynik jest poniżej 500 punktów.&lt;/p&gt;

&lt;p&gt;Następnie zmapowałem to do decyzji: "Jeśli gracz ma wynik poniżej 500 punktów, zaoferuj mu możliwość zakupu życia lub obejrzenia reklamy".&lt;/p&gt;

&lt;p&gt;Gdy gracz wybierze, czy chce obejrzeć reklamę lub kupić życia, jest to przekazywane jako metryka, która jest następnie wyświetlana na moim pulpicie nawigacyjnym.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vdC8zk66--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/1s61i2Z2ILWGnj4HUhnvPr/f117994e40465a9c34ae34fea2ad8e76/image1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vdC8zk66--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/1s61i2Z2ILWGnj4HUhnvPr/f117994e40465a9c34ae34fea2ad8e76/image1.png" title="Use Illuminate to Balance your Games - Image - 07" alt="Use Illuminate to Balance your Games" width="800" height="439"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Oto uproszczony widok mojego pulpitu nawigacyjnego. Widać, że śledzimy, którzy gracze zdobyli mniej niż 500 punktów i którzy gracze zdecydowali się zapłacić za swoje życia zamiast oglądać reklamy.&lt;/p&gt;

&lt;p&gt;Ponownie, zakres rozszerzenia złożoności jest tutaj bardzo szeroki;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Czy więcej graczy zapłaciłoby za dodatkowe życia, gdyby były one tanie?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Czy oglądaliby 30-sekundową reklamę czy 3-minutową?&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;W porównaniu do tradycyjnego podejścia?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Gry strategiczne? Gry online? Równoważenie wrażeń i mechaniki gry dla wszystkich graczy może być długim procesem. Przed premierą można przetestować różne elementy gry, stworzyć samouczek wprowadzający i, w oparciu o zachowanie graczy, zapewnić progresywny projekt poziomów, aby zarówno zmaksymalizować czas gry, jak i zapobiec zbyt łatwej grze. Po uruchomieniu możesz monitorować fora graczy, sprawdzać dane analityczne dotyczące liczby graczy i ich działań, a następnie wydawać łatki, aby rozwiązać wszelkie problemy z równowagą... i miejmy nadzieję, że nie osłabisz przy tym swojej gry!&lt;/p&gt;

&lt;p&gt;Może to być bardzo długi cykl analizy i wydawania, a Illuminate może w tym pomóc. Możesz podejmować decyzje w czasie rzeczywistym, niezależnie od typu gry: Możesz mieć grę wieloosobową, taką jak FPS lub RPG, bijatykę dla jednego gracza na Steam lub arenę bitewną, taką jak League of Legends. Tak długo, jak gra wideo jest online, gdzie na równowagę gracza może wpływać podejmowanie działań w danym momencie, Illuminate może poprawić wrażenia gracza - zapytałem PM i powiedzieli, że gry planszowe i karciane nie są jeszcze na mapie drogowej :(.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Podsumowanie&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Wykorzystanie PubNub's Illuminate do zbalansowania gry to szybki, niewymagający kodowania sposób na wprowadzenie do aplikacji narzędzi do natychmiastowego podejmowania decyzji, dzięki czemu wrażenia graczy będą jeszcze lepsze.&lt;/p&gt;

&lt;p&gt;Aby dowiedzieć się więcej o tworzeniu pierwszej gry z akcjami w czasie rzeczywistym, sprawdź naszą stronę &lt;a href="https://www.pubnub.com/products/Illuminate-gaming/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;Illuminate for gaming&lt;/a&gt; i naszą &lt;a href="https://www.pubnub.com/docs/illuminate/basics?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;dokumentację&lt;/a&gt;. Mamy nadzieję, że spotkamy się na następnej konferencji GDC, gdzie z chęcią posłuchamy, co już stworzyliście z PubNub!&lt;/p&gt;

&lt;h1&gt;
  
  
  Jak PubNub może ci pomóc?
&lt;/h1&gt;

&lt;p&gt;Ten artykuł został pierwotnie opublikowany na &lt;a href="https://www.pubnub.com/blog/how-to-use-illuminate-to-balance-your-games/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;PubNub.com&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Fundamentem naszej platformy jest największa w branży i najbardziej skalowalna sieć przesyłania wiadomości 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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Poznaj PubNub
&lt;/h2&gt;

&lt;p&gt;Sprawdź &lt;a href="https://www.pubnub.com/tour/introduction/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;Live Tour&lt;/a&gt;, aby zrozumieć podstawowe koncepcje każdej aplikacji opartej na PubNub w mniej niż 5 minut.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rozpocznij konfigurację
&lt;/h2&gt;

&lt;p&gt;Załóż &lt;a href="https://admin.pubnub.com/signup/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;konto&lt;/a&gt; PubNub, aby uzyskać natychmiastowy i bezpłatny dostęp do kluczy PubNub.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rozpocznij
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;Dokumenty&lt;/a&gt; PubNub pozwolą Ci rozpocząć pracę, niezależnie od przypadku użycia lub &lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;zestawu SDK&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Śledzenie geolokalizacji JavaScript za pomocą Google Maps API</title>
      <dc:creator>PubNub Developer Relations</dc:creator>
      <pubDate>Fri, 31 May 2024 14:30:46 +0000</pubDate>
      <link>https://forem.com/pubnub-pl/sledzenie-geolokalizacji-javascript-za-pomoca-google-maps-api-2hl1</link>
      <guid>https://forem.com/pubnub-pl/sledzenie-geolokalizacji-javascript-za-pomoca-google-maps-api-2hl1</guid>
      <description>&lt;p&gt;Oto zaktualizowany wpis na blogu, z płynnie osadzonymi wszystkimi słowami kluczowymi.&lt;/p&gt;

&lt;p&gt;Jest to podsumowanie czteroodcinkowej serii o tworzeniu aplikacji internetowych na żywo, w czasie rzeczywistym, z funkcjami geolokalizacji przy użyciu Google Maps JavaScript API i PubNub. Nasz samouczek przeprowadzi Cię przez proces generowania ścieżek lotu przy użyciu JavaScript i PubNub.&lt;/p&gt;

&lt;p&gt;Aby zobaczyć, jak to wszystko jest zaimplementowane, sprawdź nasze &lt;a href="https://showcase.pubnub.com/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;demo Showcase&lt;/a&gt; na stronie PubNub. Przejdź do wersji demonstracyjnej Geolocation, aby zobaczyć, jak wykorzystujemy PubNub ze śledzeniem w czasie rzeczywistym. Aby zapoznać się z kodem wersji demonstracyjnej, przejdź do naszego serwisu &lt;a href="https://github.com/PubNubDevelopers/PubNub-Showcase/tree/main/web/geolocation"&gt;Github&lt;/a&gt;, aby zobaczyć, jak to wszystko działa.&lt;/p&gt;

&lt;h2&gt;
  
  
  Czym są ścieżki lotu?
&lt;/h2&gt;

&lt;p&gt;Ścieżki lotu, zaimplementowane w tym &lt;strong&gt;samouczku&lt;/strong&gt;, odnoszą się do &lt;strong&gt;polilinii&lt;/strong&gt;, które umożliwiają &lt;strong&gt;dynamiczne rysowanie ścieżek przez punkty określone przez użytkownika&lt;/strong&gt; na mapie znajdującej się na &lt;strong&gt;urządzeniach mobilnych&lt;/strong&gt; lub w przeglądarce internetowej. Są one integralną częścią &lt;strong&gt;HTML5 Geolocation API&lt;/strong&gt; i &lt;strong&gt;Google Maps API&lt;/strong&gt; do śledzenia wzorców ruchu.&lt;/p&gt;

&lt;h2&gt;
  
  
  Przegląd samouczka
&lt;/h2&gt;

&lt;p&gt;Upewnij się, że spełniłeś wymagania wstępne z &lt;a href="https://www.pubnub.com/blog/javascript-mapping-javascript-tracking/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;części pierwszej,&lt;/a&gt; &lt;a href="https://www.pubnub.com/blog/javascript-google-maps-api-map-markers/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;drugiej&lt;/a&gt; i &lt;a href="https://www.pubnub.com/blog/javascript-google-maps-api-location-publishing/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;trzeciej&lt;/a&gt;, , gdzie skonfigurowaliśmy &lt;a href="https://www.pubnub.com/blog/javascript-mapping-javascript-tracking/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;nasze środowisko JavaScript&lt;/a&gt; i omówiliśmy &lt;a href="https://www.pubnub.com/blog/javascript-google-maps-api-map-markers/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;znaczniki map&lt;/a&gt; oraz &lt;a href="https://www.pubnub.com/blog/javascript-google-maps-api-location-publishing/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;śledzenie lokalizacji&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Gdy to zrobisz, przejdź do następnej części.&lt;/p&gt;

&lt;h2&gt;
  
  
  Przewodnik po kodzie
&lt;/h2&gt;

&lt;p&gt;Zacznijmy od zdefiniowania zmiennych &lt;code&gt;let\&lt;/code&gt; &lt;code&gt;map\&lt;/code&gt;, &lt;code&gt;mark\&lt;/code&gt; i &lt;code&gt;lineCoords\&lt;/code&gt; do przechowywania naszych obiektów mapy, markera i &lt;strong&gt;współrzędnych&lt;/strong&gt; polilinii. W ten sposób możemy je dostosowywać w miarę nadejścia zdarzeń PubNub. Następnie definiujemy wywołanie zwrotne &lt;code&gt;initialize\&lt;/code&gt;, które jest używane przez &lt;a href="https://developers.google.com/maps/documentation/javascript/overview"&gt;Google Maps JavaScript API&lt;/a&gt; po gotowości do załadowania. Upewnij się, że zastąpiłeś &lt;code&gt;YOUR\_GOOGLE\_MAPS\_API\_KEY\&lt;/code&gt; swoim rzeczywistym &lt;strong&gt;kluczem API&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;mark&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;lineCoords&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;initialize&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;map&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;google&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;maps&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;map-canvas&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;center&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="na"&gt;lat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;lat&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="na"&gt;lng&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;lng&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="na"&gt;zoom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="nx"&gt;mark&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;google&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;maps&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Marker&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="na"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="na"&gt;lat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;lat&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;lng&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;lng&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="na"&gt;map&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;initialize&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;initialize&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Teraz, dzięki obsłudze zdarzenia "redraw", zaktualizujemy nowe informacje o lokalizacji w locie, wywołując metodę geolokalizacji &lt;code&gt;getCurrentPosition() \&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Lat/Long
&lt;/h3&gt;

&lt;p&gt;Następnie definiujemy funkcję obsługi zdarzenia redraw, którą będziemy wywoływać za każdym razem, gdy otrzymamy nowe zdarzenie zmiany pozycji w locie. W pierwszej części funkcji ustawiamy szerokość i długość geograficzną na nowe wartości z komunikatu. Następnie wywołujemy odpowiednie metody na obiektach mapy, markera i polilinii, aby zaktualizować pozycję, dodać ją do końca linii i ponownie wyśrodkować mapę.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;redraw&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;lat&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lat&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;lng&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lng&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setCenter&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="na"&gt;lat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;lat&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;lng&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;lng&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;alt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="nx"&gt;mark&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setPosition&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="na"&gt;lat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;lat&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;lng&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;lng&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;alt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="nx"&gt;lineCoords&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;google&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;maps&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;LatLng&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;lat&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;lng&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;lineCoordinatesPath&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;google&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;maps&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Polyline&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;lineCoords&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;geodesic&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;strokeColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#2E10FF&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="nx"&gt;lineCoordinatesPath&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setMap&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Inicjalizacja PubNub
&lt;/h2&gt;

&lt;p&gt;Po zdefiniowaniu naszych wywołań zwrotnych, zainicjujemy funkcję strumieniowego przesyłania danych w czasie rzeczywistym PubNub, która działa na &lt;strong&gt;telefonach komórkowych, tabletach, przeglądarkach&lt;/strong&gt; i &lt;strong&gt;laptopach&lt;/strong&gt; w różnych technologiach, takich jak &lt;strong&gt;iOS, Android, JavaScript, .NET, Java, Ruby, Python, PHP&lt;/strong&gt; i innych.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pnChannel&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;map3-channel&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pubnub&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;PubNub&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;publishKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;   &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;YOUR_PUB_KEY&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;subscribeKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;YOUR_SUB_KEY&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;subscribe&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="na"&gt;channels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;pnChannel&lt;/span&gt;&lt;span class="p"&gt;]});&lt;/span&gt;
&lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addListener&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;redraw&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Funkcjonalność PubNub do &lt;strong&gt;publikowania&lt;/strong&gt; i &lt;strong&gt;subskrybowania&lt;/strong&gt; tematów w kanałach czasu rzeczywistego zapewnia wydajne możliwości strumieniowego przesyłania danych.&lt;/p&gt;

&lt;h2&gt;
  
  
  Publikowanie długości i szerokości geograficznej
&lt;/h2&gt;

&lt;p&gt;W tym prostym samouczku skonfigurowaliśmy podstawowy licznik interwałów JavaScript, aby publikować nowe pozycje w oparciu o bieżący czas. Co 500 milisekund wywołujemy anonimową funkcję zwrotną, która publikuje nowy obiekt szerokości/długości geograficznej (ze współrzędnymi poruszającymi się w kierunku północno-wschodnim) na określonym kanale PubNub. W swojej aplikacji prawdopodobnie będziesz pobierać pozycję z pozycji urządzenia na żywo lub lokalizacji zgłoszonej przez użytkownika.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;setInterval&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;publish&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="na"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;pnChannel&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="na"&gt;lat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lat&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;0.001&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;lng&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lng&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;0.01&lt;/span&gt;&lt;span class="p"&gt;}});&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Wreszcie, na samym końcu inicjalizujemy interfejs API Map Google, aby upewnić się, że elementy DOM i warunki wstępne JavaScript są spełnione.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;script&lt;/span&gt; &lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://maps.googleapis.com/maps/api/js?v=3.exp&amp;amp;key=YOUR_GOOGLE_MAPS_API_KEY&amp;amp;callback=initialize&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/script&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Podsumowanie
&lt;/h2&gt;

&lt;p&gt;Ta seria samouczków pokazała nam, jak Google Maps &lt;a href="https://developers.google.com/maps/documentation/javascript/overview"&gt;API&lt;/a&gt; i &lt;a href="https://www.pubnub.com/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;PubNub&lt;/a&gt; wyjątkowo dobrze współpracują ze sobą w celu śledzenia lokalizacji w czasie rzeczywistym w aplikacjach internetowych i mobilnych. Jest to podobne do tego, jak usługi przewozowe, takie jak &lt;strong&gt;Uber&lt;/strong&gt; i &lt;strong&gt;Lyft&lt;/strong&gt;, pokazują ruch swoich pojazdów w czasie rzeczywistym.&lt;/p&gt;

&lt;h2&gt;
  
  
  Poznaj PubNub
&lt;/h2&gt;

&lt;p&gt;Zapoznaj się z &lt;a href="https://www.pubnub.com/tour/introduction/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;Live&lt;/a&gt; Tour, aby zrozumieć podstawowe koncepcje każdej aplikacji opartej na PubNub w mniej niż 5 minut. Dowiedz się więcej o doświadczeniach naszych użytkowników bezpośrednio z naszej &lt;a href="https://github.com/PubNubDevelopers"&gt;strony GitHub&lt;/a&gt; i opinii dostępnych na naszej stronie internetowej.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rozpocznij konfigurację
&lt;/h2&gt;

&lt;p&gt;Zarejestruj &lt;a href="https://admin.pubnub.com/#/login?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;konto Pub&lt;/a&gt; Nub, aby uzyskać natychmiastowy dostęp do kluczy PubNub za darmo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rozpocznij
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;Dokumenty&lt;/a&gt; PubNub pozwolą Ci rozpocząć pracę, niezależnie od przypadku użycia. Mamy sekcje poświęcone JavaScript Google Maps API i temu, jak używać ich ze śledzeniem w czasie rzeczywistym w naszym SDK.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Odkrywanie przypadków użycia dla usług kognitywnych</title>
      <dc:creator>PubNub Developer Relations</dc:creator>
      <pubDate>Fri, 31 May 2024 13:50:06 +0000</pubDate>
      <link>https://forem.com/pubnub-pl/odkrywanie-przypadkow-uzycia-dla-uslug-kognitywnych-10n4</link>
      <guid>https://forem.com/pubnub-pl/odkrywanie-przypadkow-uzycia-dla-uslug-kognitywnych-10n4</guid>
      <description>&lt;p&gt;Przeanalizujmy kilka przykładów aplikacji i firm przekształconych przez usługi kognitywne oraz kilka przyszłych przypadków użycia, aby zobaczyć, jak bardzo zmieniają one krajobraz technologiczny.&lt;/p&gt;

&lt;p&gt;Dzięki usługom kognitywnym gigantów chmury, takich jak AWS, IBM i Microsoft Azure, zespoły programistów każdej wielkości mają teraz dostęp do &lt;a href="https://pubnub.com/resources/ebook/building-apps-with-cognitive-services/" rel="noopener noreferrer"&gt;usług kognitywnych&lt;/a&gt; o oszałamiającej mocy. Usługi te, dostarczane za pośrednictwem interfejsów API, ułatwiają wprowadzanie inteligencji nowej generacji do aplikacji.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://pubnub.com/learn/glossary/what-is-a-chat-api/" rel="noopener noreferrer"&gt;&lt;strong&gt;Czat&lt;/strong&gt;&lt;/a&gt; &lt;strong&gt;i interakcje społecznościowe&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;W 2015 roku miesięczna liczba aktywnych użytkowników aplikacji do czatowania przewyższyła liczbę użytkowników sieci społecznościowych, a przepaść ta wciąż się powiększa. Rzeczywiście, przesyłanie wiadomości stało się istotną cechą samych sieci społecznościowych. Wraz z tym szybkim wzrostem, aplikacje do przesyłania wiadomości ewoluowały od prostych narzędzi do wysyłania i odbierania krótkich wiadomości tekstowych do innowacyjnych, w pełni funkcjonalnych doświadczeń z zaskakującymi i zachwycającymi funkcjami. A siłą napędową tych innowacji są kognitywne interfejsy API.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Chatboty i obliczenia kognitywne&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Chatboty są jedną z najwcześniejszych form algorytmów sztucznej inteligencji. Choć jest mało prawdopodobne, że wkrótce przejdą test Turinga, stanowią one naturalną ewolucję aplikacji obsługujących głos. Tam, gdzie kiedyś można było zadzwonić na linię pomocy technicznej i nacisnąć 1, aby uzyskać informacje o płatnościach, teraz można mówić pełnymi zdaniami do systemu, który potrafi rozpoznać intencje użytkownika.&lt;/p&gt;

&lt;p&gt;Niezależnie od tego, czy zdajesz sobie sprawę, czy nie, adopcja chatbotów eksplodowała, ponieważ firmy starają się skrócić czas oczekiwania, poprawić jakość obsługi klienta i zminimalizować koszty ludzkich operatorów telefonicznych. Obecnie są one wykorzystywane głównie do obsługi prostych zadań: rozumienia podstawowych żądań i reagowania w oparciu o predefiniowane reguły, odpowiadając na pytania takie jak "Gdzie jest moje zamówienie?" lub "Chatbot, włącz nastrojowe światła".&lt;/p&gt;

&lt;p&gt;Jednak interfejsy API, takie jak &lt;a href="https://www.ibm.com/cloud/watson-assistant/" rel="noopener noreferrer"&gt;Watson Assistant&lt;/a&gt; lub &lt;a href="https://aws.amazon.com/lex/" rel="noopener noreferrer"&gt;Amazon Lex&lt;/a&gt;, ułatwiają tworzenie usług, które mogą stosować logikę do zaobserwowanych wzorców w tych żądaniach w języku naturalnym. Usługi te mogą na przykład zaobserwować nagły wzrost liczby połączeń z lotniska, które ma opóźnienia w starcie, i zmienić sekwencję opcji, aby nadać priorytet zmianie harmonogramu lotów. Mogą też zauważyć, że połączenia z określonego kraju lub regionu są zwykle prowadzone w innym języku i odpowiednio zmienić domyślne ustawienia. Mogą nawet zidentyfikować wzorce gramatyczne, które wskazują klientów do natychmiastowego przekazania do przełożonego.&lt;/p&gt;

&lt;p&gt;Inteligentne interfejsy konwersacyjne wykorzystujące rozpoznawanie mowy, zamianę tekstu na mowę, rozpoznawanie twarzy i modele uczenia maszynowego mogą zapewnić wysoce angażujące doświadczenia i realistyczne rozmowy do różnych celów. A co więcej, będą uczyć się na podstawie tych doświadczeń.&lt;/p&gt;

&lt;p&gt;Chatboty zmienią sposób, w jaki bankujemy, robimy zakupy i uczymy się: tworząc rekomendacje, rozumiejąc abstrakcyjne pojęcia i poznając osoby na podstawie wcześniejszych kontaktów. W końcu staną się tak dobre, że nawet nie będziesz wiedział, czy rozmawiasz z człowiekiem.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Przykład kodu: Chatbot automatyki domowej&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Korzystając z Watson i PubNub ChatEngine, możesz łatwo stworzyć &lt;a href="https://www.pubnub.com/docs/chat/samples?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;chatbota ze sztuczną inteligencją&lt;/a&gt;, który kontroluje twój inteligentny dom.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2Fasset-17suaysk1qa1j6q%2F194c3f35c69c92190fb678a82720e014%2Fchatengine-home-automation.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2Fasset-17suaysk1qa1j6q%2F194c3f35c69c92190fb678a82720e014%2Fchatengine-home-automation.jpg" title="chatengine home automation"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ten samouczek pokazuje, jak zbudować chatbota, który akceptuje polecenia tekstowe, analizuje je i podejmuje działania na ich podstawie. Na przykład, użytkownik wpisze "włącz światła w salonie", a bot uruchomi światła.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;

  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;homeauto_intents&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; 
  &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;intent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;turnOFF&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;examples&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
      &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Put off&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Switch off&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Turn off&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;description&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Turn on intents&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;intent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;turnON&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;examples&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
      &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Put on&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Switch on&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Turn on&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;description&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Turn off intents&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Przetwarzanie języka naturalnego&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Kolejnym niezwykle istotnym obszarem jest nauka o danych i przetwarzanie języka naturalnego (NLP), czyli ogólny termin dla rozwiązań AI, które mogą owocnie przetwarzać duże ilości danych w języku naturalnym. NLP może nie tylko oceniać słowa i gramatykę z semantycznego punktu widzenia, ale może także odkrywać nastroje i emocje, odkrywając, jak użytkownicy czują się na dany temat lub temat poprzez analizę wiadomości po wiadomości.&lt;/p&gt;

&lt;p&gt;NLP to ogromna korzyść dla marek, osób publicznych i organizacji, które muszą zrozumieć opinie użytkowników i reagować na nie w czasach, gdy reputacja może zostać zbudowana lub zniszczona w ciągu kilku minut. Wyobraźmy sobie, że marka wypuszcza nową reklamę produktu. Korzystając z odpowiednich usług kognitywnych, może połączyć się ze strumieniem mediów społecznościowych pod określonym hashtagiem lub nazwą produktu i zlecić swojemu interfejsowi NLP API analizę wszystkich istotnych wiadomości i dostarczyć informacji zwrotnych na temat reakcji opinii publicznej na produkt.&lt;/p&gt;

&lt;p&gt;Poniżej znajduje się przykład aplikacji zaprojektowanej do analizowania i oceniania opinii ludzi na temat amerykańskich polityków na Twitterze. Monitoruje ona określone słowa kluczowe i frazy, a następnie może wykreślić emocje użytkowników w określonych regionach geograficznych.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdownloads.ctfassets.net%2F3prze68gbwl1%2Fasset-17suaysk1qa1j6r%2F92344c256d72ebba547a73bdf5c30441%2F1_d_i_gD52jeJi71ihWIt9rA-1.gif%3Fw%3D700%26h%3D550" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdownloads.ctfassets.net%2F3prze68gbwl1%2Fasset-17suaysk1qa1j6r%2F92344c256d72ebba547a73bdf5c30441%2F1_d_i_gD52jeJi71ihWIt9rA-1.gif%3Fw%3D700%26h%3D550" title="1 d i gD52jeJi71ihWIt9rA 1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Na przykład, jeśli użytkownik wyśle tekst "Jestem szczęśliwy"...&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;session_id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;I am happy!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Watson analizuje tekst i zwraca następujące informacje:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;session_id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;I am happy!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;session_sentiment&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;overall&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.879998&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;positive&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
         &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;count&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
         &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;avg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.879998&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;negative&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
         &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;count&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
         &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;avg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;neutral&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
         &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;count&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
         &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;avg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
   &lt;span class="p"&gt;},&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;score&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.88006828&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Marki już wydają duże kwoty na analizę nastrojów rynkowych. W miarę jak systemy te stają się coraz bardziej inteligentne, niezawodne i zautomatyzowane, będą w stanie znacznie lepiej zrozumieć opinię publiczną przy niższych kosztach.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;eCommerce&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Chociaż zakupy online całkowicie zmieniły sposób, w jaki kupujemy towary, w handlu elektronicznym brakuje jednego kluczowego elementu sklepu stacjonarnego: pomocnych pracowników. W skali, w jakiej działają sklepy internetowe, nie jest ekonomicznie opłacalne posiadanie prawdziwych pracowników czatu na żywo.&lt;/p&gt;

&lt;p&gt;W rezultacie wiele sklepów internetowych korzysta z usług inteligentnych botów-asystentów zakupowych, aby zoptymalizować obsługę, pomagać kupującym w zadawaniu pytań, przedstawiać rekomendacje, a nawet dokonywać płatności.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://wersm.com/nordstrom-ruled-holidays-with-its-amazing-chatbot/" rel="noopener noreferrer"&gt;Nordstrom zdominował poprzednie sezony świąteczne&lt;/a&gt; swoim chatbotem Messenger, który wykraczał poza proste, predefiniowane pytania i odpowiedzi i wykorzystywał usługi kognitywne, aby naprawdę zrozumieć, czego szuka klient i pomóc w razie potrzeby. Oferował rekomendacje prezentów, a nawet mógł pomóc w realizacji zamówienia.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2Fasset-17suaysk1qa1j6t%2F720950f250125abd6e6be3c136c6306b%2Fnordstrombot.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2Fasset-17suaysk1qa1j6t%2F720950f250125abd6e6be3c136c6306b%2Fnordstrombot.png" title="nordstrombot"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Chatboty uchroniły nas również przed przerażającymi rozmowami telefonicznymi z działem obsługi klienta i czekaniem przez godzinę, aż przedstawiciel firmy rozwiąże prosty problem. Amazon wdrożył chatboty, które mogą rozwiązywać drobne problemy, z którymi boryka się większość klientów potrzebujących pomocy przy składaniu zamówień.&lt;/p&gt;

&lt;p&gt;Teraz, gdy przyjrzeliśmy się kilku przykładom inteligencji w świecie rzeczywistym, spójrzmy w przyszłość i zobaczmy, jak usługi kognitywne zmienią nasz świat w przyszłości.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Inteligentne miasta&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Miasta przyszłości będą polegać na różnych zintegrowanych inteligentnych usługach, aby uczynić je bezpieczniejszymi, bardziej wydajnymi i bardziej przyjaznymi dla środowiska. Rozpoznawanie obrazów, wizja komputerowa i interfejsy API wizji będą odgrywać kluczową rolę w tej transformacji, przetwarzając i podejmując działania na obrazach w przestrzeni miejskiej.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Rolnictwo&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Globalna populacja wciąż rośnie, a wyżywienie tych miliardów ludzi będzie w nadchodzących latach sporym wyzwaniem. Usługi kognitywne odegrają kluczową rolę w zarządzaniu polami i fabrykami, pozwalając nam podejmować inteligentne decyzje i kontrolować zasoby z precyzją, jakiej nigdy wcześniej nie mieliśmy.&lt;/p&gt;

&lt;p&gt;Inteligentne farmy i IoT będą obejmować jak najwięcej cennych punktów danych, aby podejmować inteligentne decyzje rolnicze, nawet te, które wydają się sprzeczne z intuicją. Na przykład, agregując dane pogodowe w czasie rzeczywistym, dane ze zdalnych czujników i historyczne wyniki, usługi kognitywne mogą udoskonalić indywidualny plan nawadniania i aktualizować go w zależności od wyjątkowych okoliczności każdego dnia.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Bezpieczeństwo danych&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;W miarę jak stajemy się coraz bardziej połączeni, a nasze cyfrowe życie przyćmiewa nasze fizyczne, prywatność i bezpieczeństwo danych przekształcają się z czegoś, czego jesteśmy niejasno świadomi, w niepokojące, stale obecne osobiste zagrożenie.&lt;/p&gt;

&lt;p&gt;Przepisy i zasady - HIPAA, RODO, SOC II - są jednym ze sposobów na zapewnienie, że firmy i organizacje mają odpowiednie zabezpieczenia. Wdrożenie tych złożonych przepisów w szczegółach może być bardzo trudne, dlatego do gry wkracza uczenie maszynowe.&lt;/p&gt;

&lt;p&gt;Usługi kognitywne można przeszkolić w zakresie rozumienia i nadawania sensu zasadom i przepisom, a następnie sugerować sposoby osiągnięcia zgodności. Usługi kognitywne umożliwiają dostarczanie cennych informacji na temat bezpieczeństwa danych, od odpowiednich zasad i przepisów po moderację treści.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Opieka zdrowotna&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Innowacje w branży opieki zdrowotnej zwykle postępują wolniej niż w innych branżach z kilku powodów, w tym z powodu wąskich marż, surowych przepisów oraz silosowych badań i rozwoju. Usługi kognitywne oferują możliwość zniesienia barier dla innowacji i usprawnienia systemu dostarczania usług od organizacji po pacjentów.&lt;/p&gt;

&lt;p&gt;Podejmowanie decyzji w opiece zdrowotnej zazwyczaj odbywa się na zasadzie silosowej, pacjent po pacjencie. Usługi kognitywne natomiast analizują i działają w oparciu o kompleksowy obraz czynników wpływających na zdrowie: status społeczno-ekonomiczny, środowisko, dostęp do opieki zdrowotnej itp. Usługi kognitywne mogą zalecać lekarzom lepszą, bardziej ukierunkowaną opiekę nad pacjentem, w tym programy zdrowotne i odnowy biologicznej.&lt;/p&gt;

&lt;p&gt;Usługi kognitywne mogą napędzać integrację i łączenie istniejących systemów w organizacjach opieki zdrowotnej oraz odkrywać istotne spostrzeżenia. Nagle, będąc w stanie agregować dane i łączyć potrzeby interesariuszy, organizacje mogą zapewnić lepszą opiekę, działając jednocześnie bardziej efektywnie.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Inteligencja teraz&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;W tym artykule opisano tylko niewielką próbkę tego, jak usługi kognitywne zmienią sposób, w jaki myślimy o biznesie i roli, jaką mogą odgrywać aplikacje. W przeszłości oprogramowanie wykonywało instrukcje. Dzięki usługom kognitywnym rozwiązania mogą się dostosowywać, ewoluować i osiągać rzeczy, które jeszcze kilka lat temu wydawały się niemożliwe. Nie widzimy wszystkich implikacji, ale z tego, co wiemy, nie ma wątpliwości, że wpływ na biznes będzie głęboki, pozytywny - i zanim się zorientujesz.&lt;/p&gt;

&lt;h1&gt;
  
  
  Jak PubNub może ci pomóc?
&lt;/h1&gt;

&lt;p&gt;Ten artykuł został pierwotnie opublikowany na &lt;a href="https://www.pubnub.com/blog/the-many-uses-of-cognitive-services/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;PubNub.com&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Poznaj PubNub
&lt;/h2&gt;

&lt;p&gt;Sprawdź &lt;a href="https://www.pubnub.com/tour/introduction/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Live Tour&lt;/a&gt;, aby zrozumieć podstawowe koncepcje każdej aplikacji opartej na PubNub w mniej niż 5 minut.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rozpocznij konfigurację
&lt;/h2&gt;

&lt;p&gt;Załóż &lt;a href="https://admin.pubnub.com/signup/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;konto&lt;/a&gt; PubNub, aby uzyskać natychmiastowy i bezpłatny dostęp do kluczy PubNub.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rozpocznij
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Dokumenty&lt;/a&gt; PubNub pozwolą Ci rozpocząć pracę, niezależnie od przypadku użycia lub &lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;zestawu SDK&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Śledzenie zatwierdzeń na pulpicie nawigacyjnym GitHub w czasie rzeczywistym</title>
      <dc:creator>PubNub Developer Relations</dc:creator>
      <pubDate>Thu, 30 May 2024 19:31:31 +0000</pubDate>
      <link>https://forem.com/pubnub-pl/sledzenie-zatwierdzen-na-pulpicie-nawigacyjnym-github-w-czasie-rzeczywistym-5a7b</link>
      <guid>https://forem.com/pubnub-pl/sledzenie-zatwierdzen-na-pulpicie-nawigacyjnym-github-w-czasie-rzeczywistym-5a7b</guid>
      <description>&lt;p&gt;W dziedzinie tworzenia oprogramowania wykresy C3.js w czasie rzeczywistym oferują skuteczny sposób monitorowania aktywności w organizacji. W przypadku zespołów inżynieryjnych jednym z możliwych do śledzenia wskaźników są zatwierdzenia w serwisie GitHub. Aby zgłębić ten temat, ten wpis na blogu zawiera samouczek, który poprowadzi Cię przez proces wykorzystania interfejsu API GitHub do pobierania i wyświetlania danych zatwierdzeń GitHub na interaktywnym wykresie w czasie rzeczywistym. Wykorzystamy moc HTML, Javascript, CSS i użyjemy PubNub do stworzenia pulpitu nawigacyjnego GitHub i przesyłania strumieniowego danych zatwierdzeń, podczas gdy C3.js pomoże w wizualizacji.&lt;/p&gt;

&lt;p&gt;Aby dowiedzieć się więcej o &lt;a href="https://pubnub.com/blog/building-realtime-live-updating-animated-graphs-c3-js/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;wykresach C3.js w czasie rzeczywistym, przygotowaliśmy świetny samouczek&lt;/a&gt;. A teraz do dzieła!&lt;/p&gt;

&lt;h2&gt;
  
  
  Jak utworzyć pulpit nawigacyjny GitHub w czasie rzeczywistym
&lt;/h2&gt;

&lt;p&gt;Tworzenie pulpitu nawigacyjnego GitHub w czasie rzeczywistym obejmuje łączenie się z różnymi źródłami danych, takimi jak repozytorium GitHub i dbanie o niektóre niezbędne zależności. Należy pamiętać o niezbędnych środkach bezpieczeństwa cybernetycznego, takich jak bezpieczne kodowanie i szyfrowanie danych. Przestrzeganie branżowych protokołów bezpieczeństwa jest koniecznością.&lt;/p&gt;

&lt;p&gt;Oto przewodnik krok po kroku:&lt;/p&gt;

&lt;h3&gt;
  
  
  Dodaj webhook GitHub
&lt;/h3&gt;

&lt;p&gt;Aby skonfigurować webhook, wykonaj następujące kroki:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Utwórz repozytorium GitHub lub użyj istniejącego repozytorium git.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Kliknij "Ustawienia" po prawej stronie strony.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Kliknij "&lt;a href="https://www.pubnub.com/learn/glossary/what-is-a-webhook/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Webhooks&lt;/a&gt;" po lewej stronie strony.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Kliknij "Dodaj Webhook" w prawym górnym rogu.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;GitHub poprosi o podanie hasła, wprowadź je.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;W polu "Payload URL" wpisz: &lt;strong&gt;&lt;a href="http://pubnub-git-hook.herokuapp.com/github/ORG-NAME/TEAM-NAME" rel="noopener noreferrer"&gt;http://pubnub-git-hook.herokuapp.com/github/ORG-NAME/TEAM-NAME&lt;/a&gt;.&lt;/strong&gt; Zastąp ORG-NAME nazwą swojej organizacji, a TEAM-NAME nazwą zespołu kontrolującego repozytorium.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F3ClKsiJfxkUjxO6wIEgADI%2F51ef64eb2a41df60ba14db62255e2c70%2FScreenshot_2024-05-30_at_3.09.23_PM.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F3ClKsiJfxkUjxO6wIEgADI%2F51ef64eb2a41df60ba14db62255e2c70%2FScreenshot_2024-05-30_at_3.09.23_PM.png" title="Github Webhook Settings"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Załaduj wizualny pulpit nawigacyjny
&lt;/h3&gt;

&lt;p&gt;Odwiedź&lt;a href="https://pubnub.github.io/git-commits-ui/" rel="noopener noreferrer"&gt;tę stronę&lt;/a&gt;. Zobaczysz listę wszystkich commitów wysłanych przez dashboard PubNub - słodkie! Po przesłaniu jednego z commitów do GitHub, w ciągu kilkudziesięciu milisekund na pulpicie commitów GitHub powinna pojawić się wiadomość, a wykresy będą aktualizowane w czasie rzeczywistym.&lt;/p&gt;

&lt;h2&gt;
  
  
  Jak zbudowaliśmy pulpit nawigacyjny zatwierdzeń Github
&lt;/h2&gt;

&lt;p&gt;Pulpit nawigacyjny jest połączeniem GitHub, PubNub Data Stream Network i wizualizacji wykresów D3 obsługiwanych przez &lt;a href="https://c3js.org/" rel="noopener noreferrer"&gt;C3.js&lt;/a&gt;. Gdy commit jest przesyłany do GitHub, metadane commitu są publikowane w małej instancji Heroku, która publikuje je w sieci PubNub. &lt;a href="https://pubnub.github.io/git-commits-ui/" rel="noopener noreferrer"&gt;Hostujemy stronę pulpitu nawigacyjnego na stronach GitHub.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Gdy nasza instancja Heroku otrzyma dane zatwierdzenia z GitHub, publikuje podsumowanie tych danych w PubNub przy użyciu publicznych kluczy publikowania/subskrybowania na kanale &lt;strong&gt;pubnub-git&lt;/strong&gt;. &lt;a href="https://www.pubnub.com/docs/console/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Kanał pubnub-git można monitorować za pośrednictwem naszej konsoli programisty tutaj&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Oto przykładowy ładunek wiadomości:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt; 
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;drnugent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;avatar_url&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://avatars.githubusercontent.com/u/857270?v=3&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;num_commits&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;team&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;team-pubnub&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;org&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pubnub&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;time&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1430436692806&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;repo_name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;drnugent/test&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Druga połowa magii dzieje się, gdy dashboard otrzymuje te informacje za pośrednictwem &lt;strong&gt;wywołania zwrotnego subskrypcji&lt;/strong&gt;. Jeśli spojrzysz na źródło dashboardu, zobaczysz ten kod:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;subscribe&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;pubnub-git&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;displayLiveMessage&lt;/span&gt;

&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To wywołanie subskrypcji zapewnia, że funkcja JavaScript &lt;strong&gt;displayLiveMessage()&lt;/strong&gt; jest wywoływana za każdym razem, gdy wiadomość zostanie odebrana na kanale &lt;strong&gt;pubnub-git&lt;/strong&gt;. displayLiveMessage() dodaje powiadomienie commit push na górze dziennika i aktualizuje wykresy wizualizacji C3.&lt;/p&gt;

&lt;p&gt;Ale zaraz, w jaki sposób pulpit nawigacyjny jest wypełniany po pierwszym załadowaniu?&lt;/p&gt;

&lt;h2&gt;
  
  
  Wykorzystanie PubNub Storage &amp;amp; Playback API dla pulpitu nawigacyjnego
&lt;/h2&gt;

&lt;p&gt;PubNub przechowuje zapis każdej wysłanej wiadomości i zapewnia programistom sposób na dostęp do tych zapisanych wiadomości za pomocą interfejsu &lt;a href="https://www.pubnub.com/products/pubnub-platform/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;API Storage &amp;amp; Playback (History)&lt;/a&gt;. Głębiej w pulpicie nawigacyjnym zobaczysz następujący kod:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;displayMessages&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ms&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ms&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;displayMessage&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;history&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;pubnub-git&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;displayMessages&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;count&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Jest to żądanie pobrania ostatnich 1000 wiadomości wysłanych za pośrednictwem kanału pubnub-git. Tak więc, nawet jeśli pulpit nawigacyjny mógł być offline, gdy te wiadomości zostały wysłane, jest w stanie je pobrać i wykorzystać te dane do wypełnienia pulpitu nawigacyjnego tak, jakby był stale online.&lt;/p&gt;

&lt;p&gt;Funkcja ta jest szczególnie przydatna w przypadku urządzeń z przerywaną lub zawodną łącznością, takich jak aplikacje mobilne w sieciach komórkowych lub podłączone samochody. Dzięki sieci PubNub nasz pulpit wizualizacji nie wymaga zaplecza do przechowywania stanu aplikacji.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tworzenie własnego pulpitu nawigacyjnego GitHub
&lt;/h2&gt;

&lt;p&gt;Aby rozpocząć tworzenie własnego pulpitu nawigacyjnego Github, rozwidl repozytorium Git Commit UI na github.com i postępuj zgodnie z README, aby uzyskać instrukcje konfiguracji. Żądania ściągnięcia są mile widziane w ramach współpracy społeczności open source.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2Fasset-17suaysk1qa1huv%2F16fe7d9c1c2eb1d0d182c33c37a40f57%2F687474703a2f2f692e696d6775722e636f6d2f4d524b32304b622e676966.gif%3Fw%3D700%26h%3D550" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2Fasset-17suaysk1qa1huv%2F16fe7d9c1c2eb1d0d182c33c37a40f57%2F687474703a2f2f692e696d6775722e636f6d2f4d524b32304b622e676966.gif%3Fw%3D700%26h%3D550" title="687474703a2f2f692e696d6775722e636f6d2f4d524b32304b622e676966"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Przyszłe trendy i rozwój pulpitów nawigacyjnych w czasie rzeczywistym
&lt;/h2&gt;

&lt;p&gt;Śledzenie ostatnich trendów i rozwoju w zakresie pulpitów nawigacyjnych w czasie rzeczywistym i powiązanych technologii ma kluczowe znaczenie. Obejmuje to websockety do transmisji danych w czasie rzeczywistym, wykorzystanie powiadomień do natychmiastowego wglądu oraz wykorzystanie pulpitu nawigacyjnego w czasie rzeczywistym w różnych przepływach pracy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Doświadczenie PubNub
&lt;/h2&gt;

&lt;p&gt;PubNub pomógł wielu klientom osiągnąć sukces dzięki ich aplikacjom działającym w czasie rzeczywistym. Na przykład system powiadomień w czasie rzeczywistym LinkedIn...&lt;/p&gt;

&lt;h2&gt;
  
  
  Konfiguracja
&lt;/h2&gt;

&lt;p&gt;Zarejestruj konto PubNub, aby uzyskać natychmiastowy dostęp do kluczy PubNub za darmo. Najnowsze funkcje dostępne na koncie PubNub obejmują ...&lt;/p&gt;

&lt;h2&gt;
  
  
  Rozpocznij
&lt;/h2&gt;

&lt;p&gt;Nasze obszerne &lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;dokumenty&lt;/a&gt; PubNub pozwolą ci rozpocząć pracę w mgnieniu oka, niezależnie od przypadku użycia lub &lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;zestawu SDK&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;PubNub oferuje przyjazną dla użytkownika platformę, która zwiększa komfort użytkowania. Nasze usługi zostały zaprojektowane z myślą o programistach, aby zapewnić płynny proces integracji.&lt;/p&gt;

&lt;p&gt;Jesteśmy tu po to, by ułatwić i usprawnić proces tworzenia aplikacji w czasie rzeczywistym. Skonfiguruj adres URL ładunku i zaczynajmy!&lt;/p&gt;

&lt;p&gt;Oficjalna dokumentacja i wiarygodne źródła mogą być przywoływane w całym wpisie na blogu w celu potwierdzenia ważności informacji.&lt;/p&gt;

&lt;h1&gt;
  
  
  Jak PubNub może ci pomóc?
&lt;/h1&gt;

&lt;p&gt;Ten artykuł został pierwotnie opublikowany na &lt;a href="https://www.pubnub.com/blog/tracking-realtime-github-dashboard-commits/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;PubNub.com&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Poznaj PubNub
&lt;/h2&gt;

&lt;p&gt;Sprawdź &lt;a href="https://www.pubnub.com/tour/introduction/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Live Tour&lt;/a&gt;, aby zrozumieć podstawowe koncepcje każdej aplikacji opartej na PubNub w mniej niż 5 minut.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rozpocznij konfigurację
&lt;/h2&gt;

&lt;p&gt;Załóż &lt;a href="https://admin.pubnub.com/signup/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;konto&lt;/a&gt; PubNub, aby uzyskać natychmiastowy i bezpłatny dostęp do kluczy PubNub.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rozpocznij
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Dokumenty&lt;/a&gt; PubNub pozwolą Ci rozpocząć pracę, niezależnie od przypadku użycia lub &lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;zestawu SDK&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Jak bezpiecznie moderować czat i użytkowników za pomocą BizOps Workspace</title>
      <dc:creator>PubNub Developer Relations</dc:creator>
      <pubDate>Thu, 23 May 2024 10:00:09 +0000</pubDate>
      <link>https://forem.com/pubnub-pl/jak-bezpiecznie-moderowac-czat-i-uzytkownikow-za-pomoca-bizops-workspace-13g7</link>
      <guid>https://forem.com/pubnub-pl/jak-bezpiecznie-moderowac-czat-i-uzytkownikow-za-pomoca-bizops-workspace-13g7</guid>
      <description>&lt;p&gt;Ten artykuł instruktażowy jest częścią serii artykułów omawiających możliwości zarządzania danymi PubNub, znane pod wspólną nazwą &lt;a href="https://pubnub.com/docs/bizops-workspace/basics?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;BizOps Work&lt;/a&gt;space:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://pubnub.com/how-to/manage-users-and-channels-with-bizops-workspace/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Jak zarządzać użytkownikami i kanałami za pomocą BizOps Workspace&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://www.pubnub.com/how-to/monitor-and-moderate-conversations-with-bizops-workspace/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Jak monitorować i moderować konwersacje za pomocą BizOps Workspace&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  Jak bezpiecznie moderować konwersacje i użytkowników za pomocą BizOps Workspace&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;BizOps Workspace to zestaw narzędzi, które pomagają zarządzać aplikacją. Ten artykuł rozszerzy poprzedni artykuł "Jak&lt;a href="https://www.pubnub.com/how-to/monitor-and-moderate-conversations-with-bizops-workspace/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;monitorować i moderować konwersacje&lt;/a&gt;za pomocą BizOps Workspace", aby pokazać kompleksową bezpieczną aplikację do czatowania z ręcznymi możliwościami moderacji, tj. możliwością monitorowania konwersacji w czasie rzeczywistym oraz wyciszania lub blokowania użytkowników.&lt;/p&gt;

&lt;p&gt;Chociaż ten artykuł można czytać samodzielnie, zdecydowanie zalecam przeczytanie poprzedniego artykułu "&lt;a href="https://www.pubnub.com/how-to/monitor-and-moderate-conversations-with-bizops-workspace/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Jak monitorować i moderować konwersacje za&lt;/a&gt;pomocą BizOps Workspace", aby lepiej zrozumieć tło omawianych tutaj koncepcji.&lt;/p&gt;

&lt;h2&gt;
  
  
  Czym jest Channel Monitor?
&lt;/h2&gt;

&lt;p&gt;Channel Monitor umożliwia moderatorom czatu oglądanie na żywo podglądu rozmów prowadzonych w czasie rzeczywistym na wielu kanałach. Jeśli moderator zauważy coś niepokojącego, takiego jak niewłaściwie zachowujący się użytkownik lub obraźliwe wiadomości, może natychmiast podjąć działania w celu złagodzenia problemu.&lt;/p&gt;

&lt;p&gt;Moderator ma dużą swobodę w zakresie podejmowanych działań:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Obserwować użytkownika bez ograniczania jego praw dostępu&lt;/li&gt;
&lt;li&gt;  edytować lub usunąć obraźliwą wiadomość&lt;/li&gt;
&lt;li&gt;  ograniczyć możliwość publikowania wiadomości przez użytkownika&lt;a href="https://pubnub.com/docs/bizops-workspace/channel-monitor#mute?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;(wy&lt;/a&gt;ciszyć)&lt;/li&gt;
&lt;li&gt;  ograniczyć użytkownikowi możliwość czytania lub publikowania wiadomości (&lt;a href="https://pubnub.com/docs/bizops-workspace/channel-monitor#ban?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;ban&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Wszystkie możliwości w ramach funkcji "Monitor" są ręczne: ręczne przeglądanie wiadomości, ręczne wyciszanie użytkowników itp. Ten artykuł nie omawia automatycznej moderacji.&lt;/p&gt;

&lt;p&gt;Aby korzystać z funkcji Channel Monitor, konieczne jest włączenie kilku funkcji w zestawie kluczy PubNub, w szczególności &lt;a href="https://www.pubnub.com/docs/general/metadata/channel-metadata?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;kontekstu aplikacji&lt;/a&gt; i &lt;a href="https://www.pubnub.com/docs/general/storage?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;trwałości&lt;/a&gt; wiadomości. Więcej szczegółów można znaleźć w sekcji "Wymagania dotyczące zestawu kluczy dla Channel Monitor" w &lt;a href="https://www.pubnub.com/how-to/monitor-and-moderate-conversations-with-bizops-workspace/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;poprzednim artykule&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Czym jest menedżer dostępu PubNub?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Programiści muszą chronić się przed użytkownikami próbującymi obejść ich system&lt;/strong&gt; moderacji; można to osiągnąć za pomocą menedżera dostępu PubNub.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/docs/general/security/access-control?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Menedżer&lt;/a&gt; dostępu pozwala zdefiniować zestaw reguł, które opisują uprawnienia określonego użytkownika (lub użytkowników) i jakie działania mogą wykonywać na określonych zasobach. Na przykład:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Użytkownik o identyfikatorze &lt;code&gt;123&lt;/code&gt; ma uprawnienia do odczytu i zapisu na kanale &lt;code&gt;456&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  Wszyscy użytkownicy, których ID pasuje do wyrażenia regularnego &lt;code&gt;user-*&lt;/code&gt;, mogą czytać z dowolnego kanału, którego ID pasuje do wyrażenia regularnego &lt;code&gt;global-*&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;  Użytkownik o identyfikatorze &lt;code&gt;123&lt;/code&gt; ma uprawnienia do aktualizacji metadanych kanału (tj. kontekstu aplikacji).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pełna lista uprawnień znajduje się w dokumentacji na stronie &lt;a href="https://www.pubnub.com/docs/general/security/access-control#permissions?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;https://www.pubnub.com/docs/general/security/access-control#permissions&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Menedżer dostępu PubNub jest oparty na tokenach, a najłatwiejszym sposobem na jego opisanie jest przejście przez przepływ autoryzacji pokazany w &lt;a href="https://www.pubnub.com/docs/general/security/access-control?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;dokumentacji&lt;/a&gt; i zapewnienie dodatkowego kontekstu, w jaki sposób ten przepływ odnosi się do moderacji:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F6VXlbbCqQz8X8GKG1yU7Xc%2Fa8597a87f1bf8a701737935141b45918%2Fpam-v3-authorization-flow-d3c28108b6948645d029e42097d1b30e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F6VXlbbCqQz8X8GKG1yU7Xc%2Fa8597a87f1bf8a701737935141b45918%2Fpam-v3-authorization-flow-d3c28108b6948645d029e42097d1b30e.png" title="How-to - BizOps Workspace Secure Chat - Image 01" alt="Access Manager workflow"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Próba logowania&lt;/strong&gt;. Klient uwierzytelnia się na serwerze, aby zalogować użytkowników do aplikacji. Prawdopodobnie odbywa się to za pośrednictwem dostawcy tożsamości; po tym kroku serwer ma pewność, że rozmawia z zarejestrowanym użytkownikiem aplikacji i kim on jest. Klient żąda tokenu uwierzytelniania PubNub Access Manager w ramach swojej inicjalizacji.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Żądanie przyznania uprawnień&lt;/strong&gt;. Serwer obsługuje żądanie klienta o token, wywołując interfejs API SDK "&lt;a href="https://www.pubnub.com/docs/sdks/javascript/api-reference/access-manager#grant-token?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;grantToken()&lt;/a&gt;". Kilka punktów do odnotowania na temat tego API: Można go wywołać tylko za pomocą &lt;strong&gt;tajnego klucza&lt;/strong&gt; PubNub, a zatem można go wywołać tylko z serwera; jest dostępny dla wszystkich naszych zestawów SDK po stronie serwera; i to API zaakceptuje obiekty JSON w celu zdefiniowania zasobów i uprawnień, które definiują dostęp użytkownika (użytkowników).&lt;/li&gt;
&lt;li&gt; Zwrócony*&lt;em&gt;token&lt;/em&gt;*. PubNub przyznaje żądane uprawnienia żądanym użytkownikom i zwraca token uwierzytelniający do serwera.&lt;/li&gt;
&lt;li&gt; Token*&lt;em&gt;przekazany&lt;/em&gt;*. Następnie serwer zwraca token uwierzytelniający do pierwotnego klienta wywołującego.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Token ustaw&lt;/strong&gt;iony. Klient może określić ten token uwierzytelniający podczas inicjalizacji lub w dowolnym momencie cyklu życia aplikacji za pomocą metody &lt;a href="https://www.pubnub.com/docs/sdks/javascript/api-reference/access-manager#set-token?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;setToken()&lt;/a&gt;. Możliwość aktualizacji tokena w dowolnym momencie jest niezbędna, ponieważ tokeny wygasają, ale klient będzie również musiał zażądać nowego tokena, jeśli Channel Monitor zaktualizuje swoje uprawnienia (tj. zostanie wyciszony lub zbanowany).&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Autoryzowane żądanie API&lt;/strong&gt;. Wszelkie kolejne połączenia z PubNub będą teraz uznawane za autoryzowane. PubNub zezwoli lub odrzuci każde żądanie API w oparciu o uprawnienia przyznane w kroku 2 i ważność tokena klienta.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Jak wygląda bezpieczne rozwiązanie moderacyjne?
&lt;/h2&gt;

&lt;p&gt;Pod koniec &lt;a href="https://www.pubnub.com/how-to/monitor-and-moderate-conversations-with-bizops-workspace/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;poprzedniego&lt;/a&gt; artykułu pokazałem demo tego, jak wyglądałoby wyciszanie lub banowanie po stronie klienta. Chat SDK zawiera &lt;a href="https://www.pubnub.com/docs/chat/chat-sdk/build/features/users/moderation#listen-to-moderation-events?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;zdarzenia moderacji&lt;/a&gt;, które informują klienta o tym, czy został wyciszony lub zbanowany; jednak poza aktualizacją interfejsu użytkownika nie uniemożliwia to &lt;strong&gt;klientowi dalszego wysyłania wiadomości, mimo że został wyciszony/zbanowany&lt;/strong&gt;. Aby bezpiecznie wyciszyć lub zablokować klienta, należy cofnąć jego istniejące uprawnienia Menedżera dostępu i przyznać mu nowe, aby odzwierciedlić jego nowy status wyciszenia lub zablokowania.&lt;/p&gt;

&lt;p&gt;Rozważmy następujący scenariusz, w którym użytkownik został wyciszony z kanału "musicale":&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F2CHx5c361f7BWbrHAbI99t%2F220aebf2f99c53ba43b91053a2902d28%2FSecure_chat_sequence_diagram.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F2CHx5c361f7BWbrHAbI99t%2F220aebf2f99c53ba43b91053a2902d28%2FSecure_chat_sequence_diagram.png" title="How-to - BizOps Workspace Secure Chat - Image 02" alt="Secure chat sequence diagram"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Użytkownik ma dostęp do dwóch kanałów, "filmy" i "musicale", ale administrator chce wyciszyć go tylko z kanału "musicale".&lt;/li&gt;
&lt;li&gt; Moderator wycisza użytkownika za pomocą Monitora kanałów. Pod przykrywką jest to wywołanie interfejsu API "&lt;a href="https://www.pubnub.com/docs/chat/chat-sdk/build/features/users/moderation#method-signature-1?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;setRestrictions()&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; Aplikacja serwerowa otrzymuje powiadomienie o "wyciszeniu" za pośrednictwem &lt;a href="https://www.pubnub.com/docs/chat/chat-sdk/build/features/users/moderation#listen-to-moderation-events?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;zdarzenia moderacji&lt;/a&gt; i &lt;a href="https://www.pubnub.com/docs/sdks/javascript/api-reference/access-manager#revoke-token?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;unieważnia&lt;/a&gt; istniejący token dostępu użytkownika.&lt;/li&gt;
&lt;li&gt; Aplikacja kliencka otrzymuje powiadomienie "mute" powiązane z kanałem "musicals" poprzez zdarzenie &lt;a href="https://www.pubnub.com/docs/chat/chat-sdk/build/features/users/moderation#listen-to-moderation-events?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;moderacji&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt; Aplikacja aktualizuje swój interfejs użytkownika, aby zapobiec wysyłaniu większej liczby wiadomości. Użytkownik może obejść tę zmianę interfejsu użytkownika, modyfikując JavaScript strony, ale każda próba wysłania wiadomości zakończy się niepowodzeniem, ponieważ jego token uwierzytelniający został cofnięty.&lt;/li&gt;
&lt;li&gt; Aplikacja żąda nowego tokenu uwierzytelniania z serwera, jak opisano w sekcji Menedżer dostępu powyżej. Nowo przyznany token będzie odzwierciedlał nowe uprawnienia użytkownika, w tym tylko dostęp "do odczytu" do kanału "musicale".&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;W &lt;a href="https://www.pubnub.com/how-to/monitor-and-moderate-conversations-with-bizops-workspace/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;poprzednim&lt;/a&gt; artykule opisano "Składniki rozwiązania do moderacji" i wymieniono interfejsy API dostępne zarówno dla klienta, jak i serwera, korzystając z poniższej grafiki. Interfejsy API omówione w powyższych krokach są również pokazane na tej grafice.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F50rOVZsxRPDbpl2azfmGCx%2F76842024f05c290e76ef9169f89994ad%2Fmoderation.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F50rOVZsxRPDbpl2azfmGCx%2F76842024f05c290e76ef9169f89994ad%2Fmoderation.png" title="How-to - BizOps Workspace Channel Monitor - Image 09" alt="Table showing components of a chat moderation solution"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Przykładowa aplikacja Chat SDK
&lt;/h2&gt;

&lt;p&gt;Ten sam zapracowany zespół inżynierów odpowiedzialny za rozwój Channel Monitor i Chat SDK stworzył również przykładową aplikację napisaną w React Native, która korzysta z Chat SDK.&lt;/p&gt;

&lt;p&gt;Próbka pokazuje możliwości SDK i najlepsze praktyki tworzenia realistycznej i w pełni funkcjonalnej aplikacji czatu przy użyciu PubNub. Jest to open source i część tego samego repozytorium GitHub, które zawiera Chat SDK pod &lt;a href="https://github.com/pubnub/js-chat/tree/master/samples/react-native-group-chat" rel="noopener noreferrer"&gt;/samples/react-native-group-chat&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F3LN1pHPw77sxb284B3ae3d%2F51cccbcd3b841bcb5dad1d3a3f0ced49%2Ftemp-chat-sdk-mobile-demo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F3LN1pHPw77sxb284B3ae3d%2F51cccbcd3b841bcb5dad1d3a3f0ced49%2Ftemp-chat-sdk-mobile-demo.png" title="How-to - BizOps Workspace Channel Monitor - Image 02" alt="Sample app running on iOS and Android"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ta aplikacja została niedawno zaktualizowana, aby żądać tokenów z serwera Access Manager i żądać nowego tokena, gdy uprawnienia użytkownika ulegną zmianie, tj. zostaną zablokowane lub wyciszone z kanałów. To ulepszenie zostało wprowadzone od czasu napisania &lt;a href="https://www.pubnub.com/how-to/monitor-and-moderate-conversations-with-bizops-workspace/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;poprzedniego artykułu&lt;/a&gt;, więc pamiętaj, aby pobrać najnowsze źródło z &lt;a href="https://github.com/pubnub/js-chat/tree/master/samples/react-native-group-chat" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;. W chwili pisania tego tekstu najnowszy identyfikator zatwierdzenia git to &lt;a href="https://github.com/pubnub/js-chat/tree/ae9dfa0/samples/react-native-group-chat" rel="noopener noreferrer"&gt;ae9dfa0&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Bezpieczne wyciszanie i banowanie użytkowników: Demo przy użyciu przykładowej aplikacji
&lt;/h2&gt;

&lt;p&gt;W tej sekcji opisano, jak uruchomić nasze kompleksowe demo, pokazujące bezpieczną moderację zarówno z perspektywy klienta, jak i serwera.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tworzenie zestawu kluczy PubNub
&lt;/h3&gt;

&lt;p&gt;Zalecam utworzenie nowego zestawu kluczy PubNub, aby uruchomić to demo w następujący sposób:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Zaloguj się do &lt;a href="https://admin.pubnub.com/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;portalu administratora&lt;/a&gt; i utwórz nową aplikację lub nowy zestaw kluczy w istniejącej aplikacji. W razie potrzeby możesz znaleźć instrukcje krok po kroku w naszym &lt;a href="https://www.pubnub.com/how-to/admin-portal-create-keys/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Jak utworzyć klucze portalu administra&lt;/a&gt;cyjnego.&lt;/li&gt;
&lt;li&gt; Na stronie zestawów kluczy włącz następujące opcje konfiguracji. Możesz zaakceptować ustawienia domyślne, chyba że określono inaczej:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://www.pubnub.com/docs/general/metadata/channel-metadata?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;App Context&lt;/a&gt;. Przechowuje on metadane o kanałach i użytkownikach i został opisany w poprzednim artykule na temat&lt;a href="https://pubnub.com/how-to/manage-users-and-channels-with-bizops-workspace/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;"Zarządzania użytkownikami i kanałami&lt;/a&gt;". Włącz także zdarzenia &lt;code&gt;metadanych&lt;/code&gt; &lt;code&gt;użytkownika&lt;/code&gt;, &lt;code&gt;zdarzenia metadanych kanału&lt;/code&gt; i &lt;code&gt;zdarzenia członkostwa&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://www.pubnub.com/docs/general/storage?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Trwałość wiadomości&lt;/a&gt;. Przechowuje historię wiadomości w PubNub, dzięki czemu administrator może przeglądać i edytować konwersacje.&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://www.pubnub.com/docs/general/security/access-control?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Menedżer&lt;/a&gt; dostępu. Zapobiega nieautoryzowanemu dostępowi do danych i jest wymagany do stworzenia bezpiecznego rozwiązania moderacji.&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://www.pubnub.com/docs/general/presence/overview?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Obecność&lt;/a&gt;. Służy do śledzenia, czy użytkownik jest online czy offline.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Zapisz zmiany.&lt;/p&gt;

&lt;p&gt;W kolejnych krokach potrzebne będą klucze &lt;code&gt;Publish Key&lt;/code&gt;, &lt;code&gt;Subscribe Key&lt;/code&gt; i &lt;code&gt;Secret Key&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tworzenie przykładowej aplikacji
&lt;/h3&gt;

&lt;p&gt;Jak opisano wcześniej, aplikacja Chat SDK Sample jest wieloplatformową aplikacją kliencką napisaną w React Native przy użyciu frameworka Expo.&lt;/p&gt;

&lt;p&gt;Sklonuj i zbuduj przykładową aplikację, postępując zgodnie z instrukcjami podanymi w &lt;a href="https://github.com/pubnub/js-chat/tree/ae9dfa0/samples/react-native-group-chat#readme" rel="noopener noreferrer"&gt;readme aplikacji&lt;/a&gt;. W szczególności upewnij się, że masz zainstalowane wymagania wstępne, w tym yarn i Node.js. ReadMe mówi o korzystaniu z XCode i iOS, ale można również uruchomić aplikację na emulatorze Androida. W chwili pisania tego tekstu najnowszy identyfikator zatwierdzenia git to &lt;a href="https://github.com/pubnub/js-chat/tree/ae9dfa0/samples/react-native-group-chat" rel="noopener noreferrer"&gt;ae9dfa0&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Podając klucze Pub/Sub, użyj kluczy wygenerowanych w poprzednim kroku. Jeśli nie umieścisz kluczy w pliku &lt;code&gt;.env&lt;/code&gt;, aplikacja będzie domyślnie korzystać z niektórych kluczy &lt;code&gt;demonstracyjnych&lt;/code&gt;; możesz wyłączyć tę logikę na stronie &lt;a href="https://github.com/pubnub/js-chat/blob/ae9dfa0/samples/react-native-group-chat/App.tsx#L60" rel="noopener noreferrer"&gt;https://github.com/pubnub/js-chat/blob/ae9dfa0/samples/react-native-group-chat/App.tsx#L60&lt;/a&gt;, aby uniknąć nieporozumień.&lt;/p&gt;

&lt;p&gt;Uruchom aplikację. ReadMe instruuje, aby uruchomić yarn &lt;code&gt;ios&lt;/code&gt;, ale można również uruchomić &lt;code&gt;yarn android&lt;/code&gt; lub &lt;code&gt;yarn run start&lt;/code&gt;, z których ten ostatni daje interaktywne menu.&lt;/p&gt;

&lt;p&gt;Po zalogowaniu w konsoli powinno pojawić się następujące ostrzeżenie:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F7jc5aAT6ohAvQdvszqUerY%2F36987e68ee4386813332e69c0d1d6ab0%2FFailed_to_obtain_auth_token.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F7jc5aAT6ohAvQdvszqUerY%2F36987e68ee4386813332e69c0d1d6ab0%2FFailed_to_obtain_auth_token.png" title="How-to - BizOps Workspace Secure Chat - Image " alt="Failed log message"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Dzieje się tak, ponieważ klient nie połączył się z serwerem Access Manager, więc zbudujmy go.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tworzenie przykładowego serwera Access Manager
&lt;/h3&gt;

&lt;p&gt;Sample Access Manager Server można znaleźć pod adresem &lt;a href="https://github.com/pubnub/js-chat/tree/master/samples/access-manager-api" rel="noopener noreferrer"&gt;https://github.com/pubnub/js-chat/tree/master/samples/access-manager-api,&lt;/a&gt; jest to ten sam monorepo, co aplikacja kliencka omówiona wcześniej.&lt;/p&gt;

&lt;p&gt;Otwórz plik &lt;code&gt;src/chatsdk.service.&lt;/code&gt; ts w wybranym edytorze i wypełnij pola &lt;code&gt;publishKey&lt;/code&gt;, &lt;code&gt;subscribeKey&lt;/code&gt; i &lt;code&gt;secretKey&lt;/code&gt;. Klucze publish i subscribe muszą być zgodne z tymi, których użyto do utworzenia aplikacji klienckiej, a klucz tajny jest dostępny na stronie zestawu kluczy dla aplikacji w &lt;a href="https://admin.pubnub.com?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;portalu administratora&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Z katalogu &lt;code&gt;REPO/samples/access-manager-api&lt;/code&gt; uruchom polecenie &lt;code&gt;yarn run start&lt;/code&gt;, aby uruchomić serwer Access Manager, a powinieneś zobaczyć coś takiego jak poniżej:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F7vrAN5Y2vD6yQKucs25iHy%2Fb8fb34f5ab9c1e75a23606c2b980cea3%2Fauth_token_server.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F7vrAN5Y2vD6yQKucs25iHy%2Fb8fb34f5ab9c1e75a23606c2b980cea3%2Fauth_token_server.png" title="How-to - BizOps Workspace Secure Chat - Image 04" alt="Sample Access Manager Server output"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Aby zobaczyć, co robi serwer Access Manager, spójrz na &lt;code&gt;app.service.ts&lt;/code&gt;. Zobaczysz struktury uprawnień wygenerowane dla żądającego użytkownika i wywołanie &lt;code&gt;chat.sdk.grantToken()&lt;/code&gt; w celu zastosowania tych uprawnień, zwracając wygenerowany klucz authKey do klienta wywołującego.&lt;/p&gt;

&lt;p&gt;Są to uprawnienia wymagane przez aplikację demonstracyjną, ale Twoja aplikacja prawdopodobnie będzie potrzebować innych uprawnień. Możesz użyć tego dostarczonego zestawu reguł jako szablonu początkowego, ale podczas tworzenia serwera Access Manager dla swojej aplikacji skonsultuj się z &lt;a href="https://www.pubnub.com/docs/chat/chat-sdk/build/features/users/permissions?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;https://www.pubnub.com/docs/chat/chat-sdk/build/features/users/permissions&lt;/a&gt;, aby dokładnie zrozumieć, jakie uprawnienia są wymagane przez poszczególne funkcje Chat SDK.&lt;/p&gt;

&lt;p&gt;Uruchom ponownie aplikację demonstracyjną klienta i powinieneś być teraz w stanie zalogować się bez błędów. Będziesz wiedział, że wszystko się powiodło, gdy otrzymasz toast "Authkey refreshed".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F6DXY3wSm18YpJ4K08iwoJ4%2Ff5db7a28ca9efcfcff54ddfb36369729%2Fauthkey_refreshed.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F6DXY3wSm18YpJ4K08iwoJ4%2Ff5db7a28ca9efcfcff54ddfb36369729%2Fauthkey_refreshed.png" title="How-to - BizOps Workspace Secure Chat - Image 05" alt="AuthKey refreshed"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Zainicjuj rozmowę między dwoma klientami.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F1VS5T3rvnRYCDK6ITsSVZG%2F63901926e457c4d9cdf1bea009921bb1%2FIn_Conversation.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F1VS5T3rvnRYCDK6ITsSVZG%2F63901926e457c4d9cdf1bea009921bb1%2FIn_Conversation.png" title="How-to - BizOps Workspace Secure Chat - Image 06" alt="Initiate a conversation between two clients"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Wyciszanie i banowanie użytkowników za pomocą Monitora kanałów
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Ważne:&lt;/strong&gt; Jeśli wcześniej nie zainicjowałeś konwersacji między dwoma klientami, zrób to teraz. Kanały są tworzone dynamicznie przez aplikację demonstracyjną, więc będą wyświetlane w Channel Monitor dopiero po rozpoczęciu czatu.&lt;/p&gt;

&lt;p&gt;Należy pamiętać, że wszelkie aktualizacje interfejsu użytkownika pokazane poniżej, takie jak baner "auth key refreshed" lub modal "banned user", są częścią aplikacji demonstracyjnej - Twoja aplikacja wyświetli te informacje użytkownikowi za pośrednictwem własnego interfejsu użytkownika.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Uruchom Channel Monitor, logując się do &lt;a href="https://admin.pubnub.com/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;portalu administratora&lt;/a&gt; i wybierając zestaw kluczy użyty dla próbki Access Manager i aplikacji klienckiej.&lt;/li&gt;
&lt;li&gt;  Przejdź do sekcji &lt;strong&gt;BizOps Workspace&lt;/strong&gt; w lewym panelu nawigacyjnym i wybierz Channel &lt;strong&gt;Monitor&lt;/strong&gt;. Jeśli nie widzisz sekcji &lt;strong&gt;BizOps&lt;/strong&gt; Workspace, prawie na pewno musisz zaktualizować swój &lt;a href="https://www.pubnub.com/pricing/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;plan PubNub&lt;/a&gt;, ale w razie jakichkolwiek problemów &lt;a href="https://support.pubnub.com/hc/en-us?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;skontaktuj się z naszym działem pomocy technicznej&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;  Zostaniesz poproszony o wybranie kanałów do rozpoczęcia moderacji. Nazwa kanału będzie miała postać &lt;code&gt;1:1 użytkownik z USER_ID&lt;/code&gt;, gdzie USER_ID to nazwa użytkownika osoby, która zainicjowała konwersację.&lt;/li&gt;
&lt;li&gt;  Wiadomości na kanale będą wyświetlane w czasie rzeczywistym, w tym poprzednie wiadomości, jeśli w zestawie klawiszy włączona jest funkcja trwałości.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F3bjU02EMdQk4dwYcgaAS0d%2F6dd2b2b1c9b7be3e8fef76ca8306b8db%2F1._Channel_Monitor.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F3bjU02EMdQk4dwYcgaAS0d%2F6dd2b2b1c9b7be3e8fef76ca8306b8db%2F1._Channel_Monitor.png" title="How-to - BizOps Workspace Secure Chat - Image 07" alt="Initial conversation with channel monitor"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Wycisz użytkownika, naciskając przycisk mikrofonu obok wiadomości wysłanej przez tego użytkownika. Na urządzeniu wyciszonego użytkownika pojawi się komunikat informujący, że klucz autoryzacji został odświeżony. Próba wysłania wiadomości jako wyciszony użytkownik spowoduje wyświetlenie okna dialogowego z informacją, że jest to zabronione, ale nie ma to wpływu na niewyciszonego użytkownika.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F1RdO4jGGHDiSiL4Qq7TReO%2F0d924dae0e07f5b4ac0f5c3ef5dc11cd%2F2._Muted_User.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F1RdO4jGGHDiSiL4Qq7TReO%2F0d924dae0e07f5b4ac0f5c3ef5dc11cd%2F2._Muted_User.png" title="How-to - BizOps Workspace Secure Chat - Image 08" alt="Muted user"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Wyłącz wyciszenie użytkownika, naciskając ponownie przycisk mikrofonu. Na urządzeniu niewyciszonego użytkownika pojawi się komunikat informujący, że klucz autoryzacji został odświeżony i wysyłanie wiadomości będzie teraz możliwe.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F58g7AQjJ7pRqc3eoV8RB49%2F428d3ca094f369bc1f4fa592eeb53589%2F3._Unmuted_User.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F58g7AQjJ7pRqc3eoV8RB49%2F428d3ca094f369bc1f4fa592eeb53589%2F3._Unmuted_User.png" title="How-to - BizOps Workspace Secure Chat - Image 09" alt="User unmuted"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Zbanuj użytkownika, naciskając przycisk bana obok wiadomości wysłanej przez tego użytkownika i podając powód bana. Powód jest tekstem swobodnym, więc możesz podać dowolne istotne informacje. Klucz autoryzacji zostanie odświeżony, a użytkownik powróci do ekranu wyboru czatu w swojej aplikacji.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F5ZaHnr78P2KEkPnb71RbGU%2F90d13bab4b2e144b0582ec58cdcb7bf0%2F4._Banned_User.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F5ZaHnr78P2KEkPnb71RbGU%2F90d13bab4b2e144b0582ec58cdcb7bf0%2F4._Banned_User.png" title="How-to - BizOps Workspace Secure Chat - Image 10" alt="User is banned"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Próba uzyskania dostępu do zablokowanego kanału spowoduje wyświetlenie błędu:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F2eyswSTv0uMNS6SedvR0Ea%2F68c0f54239a1283c7fc56e7a9df765d7%2F5._Banned_User_error.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F2eyswSTv0uMNS6SedvR0Ea%2F68c0f54239a1283c7fc56e7a9df765d7%2F5._Banned_User_error.png" title="How-to - BizOps Workspace Secure Chat - Image 11" alt="Banned user error message"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Odblokuj użytkownika, wybierając opcję "Usuń blokadę" w Monitorze kanałów. Klucz autoryzacji zostanie odświeżony. Użytkownik zostanie odbanowany i będzie mógł ponownie uzyskać dostęp do czatu.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F3L0k1itC0X4yHApaWxohJU%2F340c12f4a84503a165f3b98904e0aaa0%2F6_Unbanned_User_2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F3L0k1itC0X4yHApaWxohJU%2F340c12f4a84503a165f3b98904e0aaa0%2F6_Unbanned_User_2.png" title="How-to - BizOps Workspace Secure Chat - Image 12" alt="User is unbanned"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Podsumowanie
&lt;/h2&gt;

&lt;p&gt;Opracowanie dowolnej &lt;a href="https://www.pubnub.com/solutions/chat/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;aplikacji cz&lt;/a&gt; atu to tylko pierwszy krok. Najtrudniejsze wyzwania pojawiają się po wdrożeniu aplikacji do obsługi rosnącej bazy użytkowników. BizOps Workspace to zestaw narzędzi zaprojektowanych do zarządzania każdym aspektem aplikacji czatu, upraszczając wyzwania po uruchomieniu.&lt;/p&gt;

&lt;p&gt;Chociaż w tym artykule skupiliśmy się na bezpiecznym wyciszaniu i banowaniu użytkowników, nadal rozszerzamy funkcje &lt;a href="https://pubnub.com/docs/bizops-workspace/basics?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;BizOps Work&lt;/a&gt;space. Ten artykuł skupiał się również wyłącznie na Chat SDK, ale Channel Monitor można również &lt;a href="https://www.pubnub.com/docs/bizops-workspace/basics#configuration?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;skonfigurować&lt;/a&gt; do pracy z dowolnym z naszych SDK.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2FFYH6PoZLSHGPgvikC9vCd%2Fe74f82e37fbfb7fe6f370594adf1da7f%2FChannel_Monitor_Configuration.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2FFYH6PoZLSHGPgvikC9vCd%2Fe74f82e37fbfb7fe6f370594adf1da7f%2FChannel_Monitor_Configuration.png" title="How-to - BizOps Workspace Channel Monitor - Image 00" alt="Channel monitor configuration"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Jeśli potrzebujesz pomocy lub wsparcia, skontaktuj się z naszym &lt;a href="https://support.pubnub.com/hc/en-us?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;dedykowanym zespołem wsparcia&lt;/a&gt; lub napisz do naszego zespołu ds. relacji z programistami na adres &lt;a href="//mailto:devrel@pubnub.com"&gt;devrel@pubnub.com&lt;/a&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  Jak PubNub może ci pomóc?
&lt;/h1&gt;

&lt;p&gt;Ten artykuł został pierwotnie opublikowany na &lt;a href="https://www.pubnub.com/how-to/securely-moderate-chat-and-users/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;PubNub.com&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Fundamentem naszej platformy jest największa w branży i najbardziej skalowalna sieć przesyłania wiadomości 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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Poznaj PubNub
&lt;/h2&gt;

&lt;p&gt;Sprawdź &lt;a href="https://www.pubnub.com/tour/introduction/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Live Tour&lt;/a&gt;, aby zrozumieć podstawowe koncepcje każdej aplikacji opartej na PubNub w mniej niż 5 minut.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rozpocznij konfigurację
&lt;/h2&gt;

&lt;p&gt;Załóż &lt;a href="https://admin.pubnub.com/signup/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;konto&lt;/a&gt; PubNub, aby uzyskać natychmiastowy i bezpłatny dostęp do kluczy PubNub.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rozpocznij
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;Dokumenty&lt;/a&gt; PubNub pozwolą Ci rozpocząć pracę, niezależnie od przypadku użycia lub &lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl" rel="noopener noreferrer"&gt;zestawu SDK&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Jak dodać czat w czasie rzeczywistym do gry Unity</title>
      <dc:creator>PubNub Developer Relations</dc:creator>
      <pubDate>Thu, 16 May 2024 21:08:11 +0000</pubDate>
      <link>https://forem.com/pubnub-pl/jak-dodac-czat-w-czasie-rzeczywistym-do-gry-unity-5613</link>
      <guid>https://forem.com/pubnub-pl/jak-dodac-czat-w-czasie-rzeczywistym-do-gry-unity-5613</guid>
      <description>&lt;p&gt;Czat w czasie rzeczywistym lub czat w grze zwiększa zaangażowanie graczy i pomaga im pozostać w grze. Czat w czasie rzeczywistym pozwala graczom komunikować się ze sobą, wspierając poczucie wspólnoty i zapewniając platformę do interakcji społecznych, które sprawiają, że gra jest przyjemniejsza.&lt;/p&gt;

&lt;p&gt;Włączenie czatu w czasie rzeczywistym jest łatwiejsze do powiedzenia niż do zrobienia. Aby zacząć od zera, potrzeba wielu zasobów do zbudowania, utrzymania i skalowania wraz ze wzrostem liczby graczy. Na szczęście PubNub sprawił, że wprowadzanie funkcji czasu rzeczywistego do gier Unity jest łatwiejsze niż kiedykolwiek dzięki naszej platformie API czasu rzeczywistego o niskim opóźnieniu. Niezależnie od tego, czy tworzysz gry dla systemów Windows, Mac, iOS, Android, systemów rzeczywistości wirtualnej, takich jak Oculus i Meta Quest, czy też korzystasz z wielu platform, nasz &lt;a href="https://www.pubnub.com/docs/sdks/unity?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;pakiet Unity SDK&lt;/a&gt; jest dla Ciebie.&lt;/p&gt;

&lt;p&gt;Czytaj dalej, aby dowiedzieć się, jak dodać czat w czasie rzeczywistym do swojej gry wideo Unity za pomocą PubNub, zaczynając od zrozumienia, jak skonfigurować różne wzorce kanałów, nauczyć się wysyłać / odbierać wiadomości, a następnie ulepszyć / zabezpieczyć czat w grze za pomocą innych funkcji, takich jak moderacja, emotikony, reakcje i GIF-y.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pierwsze kroki z PubNub
&lt;/h2&gt;

&lt;p&gt;Zanim zaczniesz rozumieć, jak skonfigurować czat w grze, musisz zrozumieć platformę PubNub i jak skonfigurować aplikację, aby korzystać z jej funkcji.&lt;/p&gt;

&lt;h3&gt;
  
  
  Przegląd
&lt;/h3&gt;

&lt;p&gt;PubNub opiera się na modelu Pub/Sub (publikuj/subskrybuj). Użytkownik &lt;a href="https://www.pubnub.com/docs/general/messages/publish?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;publikuje&lt;/a&gt; wiadomość, która jest zasadniczo ładunkiem zawierającym wszystkie istotne informacje, w sieci PubNub. Użytkownicy, którzy chcą odebrać lub odsłuchać wiadomość, &lt;a href="https://www.pubnub.com/docs/general/messages/receive?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;subskrybują&lt;/a&gt; sieć PubNub i analizują wiadomość. Wiadomość może zawierać wszystko, co chcesz, o ile ma mniej niż 32 KB (i najlepiej w formacie JSON).&lt;/p&gt;

&lt;p&gt;Aby zapewnić, że wiadomość dotrze do właściwych odbiorców, &lt;a href="https://www.pubnub.com/docs/general/channels/overview?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;kanały&lt;/a&gt; są używane jako mechanizm, za pośrednictwem którego dane są przesyłane z jednego urządzenia do drugiego. Kanały są wymagane za każdym razem, gdy urządzenie chce publikować i subskrybować sieć PubNub. Podczas gdy użytkownik może publikować tylko jedną wiadomość na raz, użytkownik może subskrybować wiele różnych kanałów na raz, nasłuchując różnych wiadomości.&lt;/p&gt;

&lt;p&gt;Podczas gdy podczas publikowania wiadomości należy określić dokładną nazwę kanału, można subskrybować wiele kanałów jednocześnie za pomocą &lt;a href="https://www.pubnub.com/docs/general/channels/subscribe#channel-multiplexing?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;multipleksowania&lt;/a&gt;, czyli subskrybowania jednego lub więcej kanałów poprzez podanie nazw kanałów jako tablicy ciągów znaków.&lt;/p&gt;

&lt;p&gt;Dlaczego te informacje są niezbędne? Cały system przesyłania wiadomości w grze będzie opierał się na koncepcji kanałów: _sposób formatowania i zabezpieczania nazwy wzorca kanału określa rodzaj cz_atu.&lt;/p&gt;

&lt;h3&gt;
  
  
  Instalacja i konfiguracja PubNub Unity SDK
&lt;/h3&gt;

&lt;p&gt;Aby rozpocząć, musisz skonfigurować PubNub Unity SDK, aby połączyć swoją aplikację z siecią PubNub. Aby uzyskać szczegółowe informacje, zapoznaj się z &lt;a href="https://www.pubnub.com/docs/sdks/unity?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;dokumentacją&lt;/a&gt; Unity SDK, ale jako przegląd, będziesz musiał:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Dodać pakiet Unity za pośrednictwem &lt;a href="https://www.pubnub.com/docs/sdks/unity#install-via-package-manager?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;Menedżera pakietów&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt; Utworzyć &lt;a href="https://admin.pubnub.com/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;bezpłatne konto PubNub&lt;/a&gt; i uzyskać klucze PubNub. Ważne jest, aby włączyć funkcje w zestawie kluczy, których potrzebuje aplikacja - w przypadku podstawowych funkcji Pub/Sub wystarczy włączyć Stream Controller. Z pewnością omówimy wszelkie inne ustawienia, które mogą być potrzebne do skonfigurowania zaawansowanych funkcji.&lt;/li&gt;
&lt;li&gt; Przekaż Unity klucze publikowania i subskrybowania uzyskane w poprzednim kroku, aby &lt;a href="https://www.pubnub.com/docs/sdks/unity#configure-pubnub?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;skonfigurować&lt;/a&gt; obiekt PubNub GameObject. Powinieneś również podać UserId, ponieważ każdy obiekt PubNub wymaga unikalnego identyfikatora w celu nawiązania połączenia z PubNub. Gdy to zrobisz, zainicjalizuj obiekt PubNub:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;using&lt;/span&gt; &lt;span class="nx"&gt;PubnubApi&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;using&lt;/span&gt; &lt;span class="nx"&gt;PubnubApi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Unity&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="err"&gt;…&lt;/span&gt;
&lt;span class="nx"&gt;PubNub&lt;/span&gt; &lt;span class="nx"&gt;pubnub&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Pubnub&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pnConfiguration&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt; Dodaj &lt;a href="https://www.pubnub.com/docs/sdks/unity#add-event-listeners?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;detektory&lt;/a&gt; zdarzeń dla swojej gry, aby reagować na zdarzenia i wiadomości. Istnieją różne detektory zdarzeń, aby móc zaimplementować niestandardową logikę reagowania na każdy rodzaj wiadomości lub zdarzenia, ale do podstawowej funkcjonalności wymiany wiadomości na czacie potrzebny będzie po prostu detektor zdarzeń wiadomości (w dalszej części tego przewodnika dowiesz się, jak dodać dodatkowe funkcje do czatu w czasie rzeczywistym, aby uczynić go bardziej angażującym):
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;listener&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;SubscribeCallbackListener&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;AddListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;listener&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;listener&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onMessage&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;OnPnMessage&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="err"&gt;…&lt;/span&gt;
&lt;span class="kr"&gt;private&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nc"&gt;OnPnMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Pubnub&lt;/span&gt; &lt;span class="nx"&gt;pn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;PNMessageResult&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;object&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;Debug&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Message received: {result.Message}&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Zanim zaczniesz publikować, aby wysyłać wiadomości do innych urządzeń i subskrybować, aby otrzymywać wiadomości od wydawców, musisz zdefiniować nazwę swojego kanału. Pamiętaj: sposób formatowania wzorca kanału określa typ czatu, który chcesz wdrożyć.&lt;/p&gt;

&lt;h2&gt;
  
  
  Definiowanie różnych wzorców czatu
&lt;/h2&gt;

&lt;p&gt;Musisz rozważyć, jakie typy czatu będziesz musiał zaimplementować w swojej grze. Ta sekcja ma na celu omówienie wzorca kanału, a nie całej konfiguracji uzyskiwania wymaganych informacji z gry lub użytkowników. Jeśli chcesz zobaczyć różne wzorce czatu w projekcie Unity wykorzystującym PubNub, sprawdź naszą &lt;a href="https://github.com/PubNubDevelopers/unity-multiplayer-shooter"&gt;grę pokazową Unity&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Czat ogólny/globalny
&lt;/h3&gt;

&lt;p&gt;Czat ogólny lub globalny umożliwia komunikację między wszystkimi graczami w grze. Możesz skonfigurować ogólny czat, publikując i subskrybując wiadomości za pomocą wspólnego kanału, który subskrybują wszyscy gracze. Można skonfigurować strukturę kanałów dla graczy globalnych:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="nx"&gt;allChat&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="err"&gt;“&lt;/span&gt;&lt;span class="nb"&gt;global&lt;/span&gt;&lt;span class="err"&gt;”&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Każdy klient będzie wtedy subskrybował kanał i zapewni, że wszyscy otrzymają te same wiadomości w czasie rzeczywistym, tworząc wspólny czat, którego każdy może być częścią.&lt;/p&gt;

&lt;h3&gt;
  
  
  Czat prywatny/szeptany
&lt;/h3&gt;

&lt;p&gt;Czat prywatny lub szeptany pozwala graczom na prowadzenie rozmów jeden na jednego, w których tylko dwaj zaangażowani gracze mogą ze sobą rozmawiać i nikt inny. We wzorcu kanału czatu prywatnego lub szeptanego każdy użytkownik subskrybuje strukturę kanału przeznaczoną do rozmów prywatnych:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="nx"&gt;privateChatBase&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="err"&gt;“&lt;/span&gt;&lt;span class="nx"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kr"&gt;private&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="err"&gt;”&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Wykorzystuje to koncepcję &lt;a href="https://www.pubnub.com/docs/general/channels/subscribe#wildcard-subscribe?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;Wildcard Subscribe&lt;/a&gt;. Ta funkcja może być używana do subskrybowania hierarchicznej listy kanałów, gdzie można subskrybować wiele kanałów za pomocą pojedynczej deklaracji nazwy.&lt;/p&gt;

&lt;p&gt;Na przykład, gdy użytkownik ma zamiar wysłać prywatną wiadomość do innego użytkownika, należy połączyć bieżący identyfikator użytkownika PubNub (lub UUID/uuid), który reprezentuje unikalny identyfikator identyfikujący użytkownika w sieci PubNub i identyfikator użytkownika zamierzonego odbiorcy wiadomości. Chociaż zawsze można uzyskać identyfikator użytkownika dla bieżącego użytkownika (poprzez pubnub.GetCurrentUserId()), należy uzyskać identyfikator użytkownika zamierzonego odbiorcy. Po uzyskaniu identyfikatora użytkownika odbiorcy można połączyć kanał w następujący sposób:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="nx"&gt;privateChatMessage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="err"&gt;“&lt;/span&gt;&lt;span class="nx"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kr"&gt;private&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;uuid&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;uuid&lt;/span&gt;&lt;span class="err"&gt;”&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ponieważ określono wieloznaczny wzorzec kanału, taki jak chat.private.*, aplikacja zasubskrybuje wszystkie nazwy kanałów pasujące do tego wzorca. Dzięki temu nie trzeba zawsze znać nazwy kanału w czasie działania aplikacji. Wreszcie, użycie identyfikatorów użytkowników gwarantuje, że nazwa kanału będzie unikalna, a rozmowa pozostanie między dwoma użytkownikami.&lt;/p&gt;

&lt;h3&gt;
  
  
  Czat znajomy/kolega
&lt;/h3&gt;

&lt;p&gt;Utworzenie czatu Friend lub Buddy pozwala graczom na prywatną komunikację z konkretnymi graczami, z którymi chcą nawiązać bliższą więź, niezależnie od tego, czy są to nowo poznani gracze, czy znajomi spoza gry.&lt;/p&gt;

&lt;p&gt;We wzorcu czatu przyjaciel/kumpel należy utworzyć wzorzec kanału, który jest unikalny dla każdego urządzenia lub gracza, podobnie jak w przypadku tworzenia wzorca kanału czatu prywatnego poprzez dołączenie identyfikatora użytkownika:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="nx"&gt;chanFriendChat&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;chat.friends.” + pubnub.GetCurrentUserId();”
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Następnie powtórz tę czynność dla każdego użytkownika, z którym chcesz się zaprzyjaźnić - zastąp ich identyfikatory użytkownika w łańcuchu chanFriendChat identyfikatorem pubnub.GetCurrentUserId(). Chociaż masz już gotowy wzorzec kanału, nie możesz po prostu zasubskrybować go za pomocą wzorca wieloznacznego, takiego jak chat.friends.*; zamiast tego będziesz potrzebować mechanizmu określającego, którzy gracze są przyjaciółmi.&lt;/p&gt;

&lt;p&gt;Rozwiązaniem tego problemu są &lt;a href="https://www.pubnub.com/docs/general/channels/subscribe#channel-groups?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;grupy kanałów&lt;/a&gt; PubNub, które pozwalają zarządzać dużą liczbą kanałów jednocześnie. Grupy kanałów są zasadniczo wskaźnikiem do listy kanałów; w tym przypadku grupa kanałów jest unikalna dla gracza i będzie zawierać odniesienie do wszystkich znajomych gracza:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="nx"&gt;chanGroupFriendChat&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;chanGroupFriendChat_&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;GetCurrentUserId&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Uwaga: Nazwy grup kanałów są zgodne z tymi samymi konwencjami, co nazwy kanałów, ale &lt;a href="https://www.pubnub.com/docs/general/channels/subscribe#channel-group-names?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;nie mogą zawierać kropek&lt;/a&gt; w nazwie, stąd różnica w strukturze wzorca.&lt;/p&gt;

&lt;p&gt;Podobnie jak w przypadku subskrybowania kanałów za pomocą obiektu pubnub (wyjaśnione w następnej sekcji), można również subskrybować grupy kanałów w tym samym czasie. Oznacza to, że skoro gracz jest subskrybowany do grupy kanałów swoich znajomych, to za każdym razem, gdy dodawany jest nowy znajomy, chanFriendChat tego znajomego jest dodawany do grupy kanałów znajomych gracza i będzie otrzymywał wiadomości w detektorze zdarzeń Message za każdym razem, gdy którykolwiek z tych kanałów opublikuje wiadomość. Chociaż nie można publikować w grupie kanałów, można po prostu opublikować wiadomość na dowolnym z powiązanych kanałów w grupie kanałów, a każdy subskrybent (znajomy) otrzyma tę wiadomość.&lt;/p&gt;

&lt;p&gt;Korzystając z interfejsu &lt;a href="https://www.pubnub.com/docs/sdks/unity/api-reference/channel-groups?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;API Channel Groups dla PubNub Unity SDK&lt;/a&gt;, możesz dodawać, wyświetlać i usuwać znajomych/kanały z grup kanałów, do których masz uprawnienia. Funkcja Channel Groups jest również używana do określania, kiedy znajomi są online/offline, znanego jako Obecność. Zostanie to szczegółowo omówione w naszym szczegółowym &lt;a href="https://www.pubnub.com/how-to/add-friend-list-to-your-unity-game/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;przewodniku Jak dodać listę znajomych w Unity&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Czat gildii/sojuszu/klanu
&lt;/h3&gt;

&lt;p&gt;W grach, w których występują gildie, sojusze lub klany, dedykowane środowisko czatu może znacznie poprawić koordynację zespołu i koleżeństwo. Ten styl czatu grupowego umożliwia komunikację między wieloma użytkownikami, promując współpracę i pracę zespołową wśród większej liczby graczy niż tylko twoi znajomi. Czat gildii/sojuszu/klanu pozwala członkom tej samej grupy planować strategie, dzielić się osiągnięciami lub po prostu tworzyć bardziej osobistą społeczność w grze.&lt;/p&gt;

&lt;p&gt;Konfiguracja czatu w PubNub jest taka sama, jak w przypadku czatu ze znajomymi. Należy utworzyć grupy kanałów dla każdego typu, zasubskrybować te grupy kanałów i dodać znajomych do tych grup kanałów po uzyskaniu autoryzacji. Wszelkie wiadomości publikowane na kanale powiązanym z tymi grupami kanałów będą wyzwalać detektor zdarzeń i można odpowiednio wyświetlić czat.&lt;/p&gt;

&lt;p&gt;Grupy kanałów to świetny sposób na zarządzanie dużymi grupami, ponieważ grupa kanałów każdego gracza może &lt;a href="https://www.pubnub.com/docs/general/channels/subscribe#channel-groups?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;zarządzać 2000 kanałów&lt;/a&gt; (w tym przypadku graczy), co jest więcej niż wystarczające nawet dla największych gildii w masowych grach online. Co więcej, każdy indywidualny klient podłączony do sieci PubNub może mieć 10 grup kanałów, co oznacza, że w razie potrzeby masz dostęp do subskrypcji 20 000 kanałów.&lt;/p&gt;

&lt;h3&gt;
  
  
  Czat Party/Lobby
&lt;/h3&gt;

&lt;p&gt;Czaty Party lub Lobby są przeznaczone dla małych, tymczasowych grup utworzonych na potrzeby konkretnej sesji gry lub misji. Chociaż te style czatu są przeznaczone do różnych celów, ich implementacja jest podobna do wzorca tworzenia prywatnego/szeptanego kanału czatu.&lt;/p&gt;

&lt;p&gt;Najpierw należy utworzyć ciąg bazowy dla każdego z typów czatu grupowego. Kiedy subskrybujesz tablicę kanałów (omówioną w następnym kroku), będziesz subskrybować za pomocą symboli wieloznacznych, aby nasłuchiwać wszystkich żądań:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="nx"&gt;chanChatParty&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="err"&gt;“&lt;/span&gt;&lt;span class="nx"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;party&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="err"&gt;”&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="err"&gt;“&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="err"&gt;”&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="nx"&gt;chanChatLobby&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="err"&gt;“&lt;/span&gt;&lt;span class="nx"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lobby&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="err"&gt;”&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="err"&gt;“&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="err"&gt;”&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Po utworzeniu lobby lub grupy, gracz zostaje wyznaczony jako lider lub właściciel grupy, niezależnie od tego, czy zainicjował grupę, czy też został określony na podstawie połączenia internetowego i regionu. Tego typu gracze nazywani są liderami lub gospodarzami. Następnie należy połączyć identyfikator użytkownika gracza-gospodarza z ciągiem bazowym, tworząc unikalny wzorzec kanału. Każdy nowy gracz, który zostanie zaproszony do dołączenia do imprezy lub lobby, będzie dynamicznie subskrybował te kanały, skutecznie dołączając do grupy. Kanał można następnie usunąć po zakończeniu lub rozwiązaniu imprezy lub lobby.&lt;/p&gt;

&lt;h2&gt;
  
  
  Łączenie wszystkiego w całość
&lt;/h2&gt;

&lt;p&gt;Po określeniu typów czatu, które chcesz zaimplementować w swojej grze w oparciu o wzorzec kanału, nadszedł czas, aby wysyłać i odbierać wiadomości w czasie rzeczywistym, publikując i subskrybując te kanały.&lt;/p&gt;

&lt;h3&gt;
  
  
  Publikowanie wiadomości
&lt;/h3&gt;

&lt;p&gt;Proces rozpoczyna się od stworzenia ładunku wiadomości. Może to być prosty czat tekstowy lub bardziej złożone struktury danych, w zależności od wymagań gry Unity. Gdy ładunek jest gotowy, nadszedł czas, aby opublikować wiadomość.&lt;/p&gt;

&lt;p&gt;Interfejs &lt;a href="https://www.pubnub.com/docs/sdks/unity/api-reference/publish-and-subscribe#publish?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;API Publish&lt;/a&gt; służy do wysyłania wiadomości do wszystkich subskrybentów określonego kanału czatu. Chociaż możesz publikować tylko na jednym kanale naraz, publikowanie odbywa się asynchronicznie, więc nie blokuje wykonywania reszty kodu (chociaż nadal możesz publikować synchronicznie, jeśli chcesz).&lt;/p&gt;

&lt;p&gt;Na przykład, jeśli chcesz wysłać wiadomość czatu do strony, wykonaj następujące wywołanie, aby nie tylko opublikować, ale także określić, czy połączenie PubNub zostało pomyślnie wykonane (i obsłużyć, gdy połączenie się nie powiodło):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;PNResult&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;PNPublishResult&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;publishResponse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Publish&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Message&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;“&lt;/span&gt;&lt;span class="nx"&gt;Ready&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="nx"&gt;go&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="err"&gt;”&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Channel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;chanChatParty&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ExecuteAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;PNPublishResult&lt;/span&gt; &lt;span class="nx"&gt;publishResult&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;publishResponse&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;PNStatus&lt;/span&gt; &lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;publishResponse&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Status&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;Debug&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pub timetoken: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;publishResult&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Timetoken&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ToString&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="nx"&gt;Debug&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pub status code : &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;StatusCode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ToString&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Subscribe to Messages
&lt;/h3&gt;

&lt;p&gt;Gdy wiadomości są publikowane, musimy &lt;a href="https://www.pubnub.com/docs/sdks/unity/api-reference/publish-and-subscribe#receive-messages?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;zasubskrybować&lt;/a&gt; odpowiednie kanały, aby otrzymywać wszelkie przychodzące wiadomości i zdarzenia. Możesz subskrybować wiele kanałów czatu i grup kanałów za pomocą jednego połączenia:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Subscribe&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Channels&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;chanChatAll&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;chanPrivateChat&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;chanChatParty&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;*&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;chanChatLobby&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;*&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;               
&lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ChannelGroups&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;chanFriendGroupChat&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;chanGuildGroupChat&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;chanAllianceGroupChat&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;userId&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Execute&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Odtwarzacz jest teraz podłączony do sieci PubNub, a &lt;a href="https://www.pubnub.com/docs/sdks/unity#add-event-listeners?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;nasłuchiwacze zdarzeń&lt;/a&gt; czekają na wystąpienie zdarzenia - w tym przypadku nadejście nowej wiadomości - a następnie wykonują kod powiązany z tym zdarzeniem.&lt;/p&gt;

&lt;p&gt;Gdy nadejdzie wiadomość, słuchacz uruchamia wywołanie zwrotne, wykonując kod napisany do obsługi wiadomości przychodzących. Może to być tak proste, jak wyświetlenie wiadomości w pokoju czatu, lub coś bardziej złożonego, jak wyzwalanie zdarzeń w grze na podstawie wiadomości czatu.&lt;/p&gt;

&lt;h2&gt;
  
  
  Zaawansowane funkcje sprawiające, że czat w grze jest angażujący
&lt;/h2&gt;

&lt;p&gt;Dobra robota - udało ci się zaimplementować czat w grze Unity, aby gracze mogli wysyłać i odbierać wiadomości w czasie rzeczywistym! Chociaż już teraz tworzy to przestrzeń dla graczy do wzajemnej interakcji, zaimplementowana funkcjonalność to tylko wierzchołek góry lodowej - istnieje wiele funkcji, które warto rozważyć, aby czat w grze był bardziej angażujący dla graczy.&lt;/p&gt;

&lt;h3&gt;
  
  
  Wczytywanie historii wiadomości: Trwałość wiadomości
&lt;/h3&gt;

&lt;p&gt;W grze gracze mogą potrzebować powrócić do poprzednich rozmów lub nadrobić zaległości w pominiętych czatach. W tym miejscu pojawia się Message &lt;a href="https://www.pubnub.com/docs/general/storage?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;Persistence&lt;/a&gt;, umożliwiając zapisywanie i pobieranie historii wiadomości czatu. Wdrożenie interfejsu API Message Persistence w grze Unity umożliwia przechowywanie i pobieranie wiadomości czatu, akcji wiadomości i plików w razie potrzeby:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;PNResult&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;PNFetchHistoryResult&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;fetchHistoryResponse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;FetchHistory&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Channels&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;chanPrivateChat&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;IncludeMeta&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;MaximumPerChannel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ExecuteAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Zapewniamy również elastyczność w kontrolowaniu czasu przechowywania wiadomości, umożliwiając zarządzanie pamięcią masową w oparciu o konkretne potrzeby i zasoby gry. Aby móc korzystać z Message Persistence, musisz włączyć tę funkcję w &lt;a href="https://admin.pubnub.com/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;portalu administracyjnym&lt;/a&gt; dla swoich kluczy. Możesz dowiedzieć się więcej o tej funkcji, a także o tym, jak ją włączyć, postępując zgodnie z naszym &lt;a href="https://www.pubnub.com/how-to/admin-portal-persistence/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;przewodnikiem&lt;/a&gt; dotyczącym trwałości wiadomości.&lt;/p&gt;

&lt;h3&gt;
  
  
  Powiadamianie graczy o nieodebranych wiadomościach: Mobilne powiadomienia push
&lt;/h3&gt;

&lt;p&gt;W przypadku gier mobilnych gracze mogą często wchodzić i wychodzić z aplikacji i mogą przegapić kluczowe wiadomości od swojej drużyny lub aktualizacje z gry. W tym miejscu do gry wkraczają mobilne &lt;a href="https://www.pubnub.com/docs/general/push/send?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;powiadomienia&lt;/a&gt; push. Zapewniają one sposób na informowanie graczy o nieodebranych wiadomościach na czacie, aktualizacjach gry lub innych ważnych powiadomieniach, nawet gdy nie są oni aktywnie w grze.&lt;/p&gt;

&lt;p&gt;Dzięki interfejsowi Mobile Push &lt;a href="https://www.pubnub.com/docs/sdks/unity/api-reference/mobile-push?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;Notifications API&lt;/a&gt; zapewniamy ujednolicony interfejs API do wysyłania powiadomień push na urządzenia z systemem iOS i Android. Upraszcza to proces i umożliwia wysyłanie pojedynczego wywołania API w celu powiadomienia wszystkich urządzeń, niezależnie od platformy. Powiadomienia push można również dostosować do własnych potrzeb, na przykład wysyłając spersonalizowane powiadomienia do poszczególnych graczy lub rozgłaszając wiadomość do wszystkich graczy. Ta elastyczność pozwala skutecznie komunikować się z graczami, utrzymując ich zaangażowanie i informacje.&lt;/p&gt;

&lt;p&gt;Aby móc korzystać z powiadomień Mobile Push w PubNub, należy je włączyć, postępując zgodnie z naszym &lt;a href="https://www.pubnub.com/how-to/push-notifications/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;przewodnikiem&lt;/a&gt; w &lt;a href="https://admin.pubnub.com/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;portalu administratora&lt;/a&gt;. Mamy również bardziej szczegółowe instrukcje dotyczące powiadomień mobilnych &lt;a href="https://www.pubnub.com/how-to/admin-portal-push-notifications-android/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;FCM&lt;/a&gt; i &lt;a href="https://www.pubnub.com/how-to/admin-portal-push-notifications-apns/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;APN&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Więcej niż tylko słowa: Emoji
&lt;/h3&gt;

&lt;p&gt;Emoji służą jako uniwersalny język emocji w komunikacji cyfrowej. Pozwalają graczom wyrazić swoje uczucia i reakcje w zabawny i kolorowy sposób, czyniąc czat bardziej interaktywnym i wciągającym.&lt;/p&gt;

&lt;p&gt;Dzięki PubNub możesz łatwo zaimplementować obsługę emoji w swojej grze Unity, pozwalając graczom publikować &lt;a href="https://www.pubnub.com/docs/general/messages/publish#send-signals?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;sygnały&lt;/a&gt;, a nie wiadomości. Sygnały są przeznaczone do wysyłania małych fragmentów danych, ponieważ ich wysyłanie jest znacznie szybsze i tańsze niż wiadomości. Ponieważ emoji są zazwyczaj bardzo małe pod względem rozmiaru danych, jest to doskonały sposób na szybkie wysyłanie danych.&lt;/p&gt;

&lt;p&gt;Możesz użyć &lt;a href="https://www.pubnub.com/docs/sdks/unity/api-reference/publish-and-subscribe#signal?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;interfejsu API PubNub Signals&lt;/a&gt;, aby opublikować emoji na określonym czacie. Na przykład, jeśli gracz chce wysłać machające emoji do globalnego czatu, po naciśnięciu przycisku Wyślij zostanie wykonany następujący kod:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;Dictionary&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;myMessage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Dictionary&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;myMessage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;emoji&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;:wave:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Signal&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Message&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;myMessage&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Channel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;global&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Execute&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;Debug&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ErrorData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Information&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;Debug&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Timetoken&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Zamierzeni odbiorcy otrzymają sygnał, jeśli są subskrybentami określonego kanału. W tym przypadku, ponieważ jest to kanał globalny, wszyscy otrzymają emoji. Aby móc nasłuchiwać sygnałów, należy zasubskrybować zdarzenie nasłuchiwania:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;listener&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onSignal&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;OnPnSignal&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kr"&gt;private&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nc"&gt;OnPnSignal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Pubnub&lt;/span&gt; &lt;span class="nx"&gt;pn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;PNSignalResult&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;object&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Handle the emoji by looking up the value and displaying the result.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Musisz upewnić się, że wartość emoji reprezentuje rzeczywiste emoji zdefiniowane w Unity. Te emoji mogą być przechowywane i pobierane w sieci PubNub za pośrednictwem App &lt;a href="https://www.pubnub.com/docs/sdks/unity/api-reference/objects?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;Context&lt;/a&gt; (wcześniej znanego jako Objects), dzięki czemu wszelkie emoji, do których gracz ma dostęp, mogą być pobierane z bezserwerowej pamięci masowej. Więcej informacji na temat implementacji App Context w grze Unity można znaleźć w naszym poradniku.&lt;/p&gt;

&lt;h3&gt;
  
  
  Odpowiadanie na wiadomości: Reakcje na wiadomości
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/docs/sdks/unity/api-reference/message-actions?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;Reakcje&lt;/a&gt; na wiadomości, takie jak polubienia, serduszka, kciuki w górę, naklejki lub niestandardowe reakcje specyficzne dla gry, zapewniają graczom szybki i łatwy sposób reagowania na wiadomości na czacie. Nie tylko dodają one interaktywności do czatu, ale także wzmacniają poczucie wspólnoty, umożliwiając graczom wzajemne potwierdzanie i angażowanie się w wiadomości.&lt;/p&gt;

&lt;p&gt;Interfejs &lt;a href="https://www.pubnub.com/docs/sdks/unity/api-reference/message-actions?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;API Message Actions&lt;/a&gt; aplikacji PubNub umożliwia tworzenie funkcji takich jak reakcje i potwierdzenia odczytu, a także powiązanie niestandardowych metadanych z wiadomościami. Podobnie jak aplikacje do czatowania, takie jak Discord, mają różne reakcje i emotikony dla różnych serwerów, tak samo może być w przypadku różnych typów czatu. Możesz pobrać dostępne reakcje na wiadomości dla określonego kanału czatu za pomocą następującego wywołania podczas ładowania czatu:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;GetMessageActions&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Channel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;chanChatLobby&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;PNGetMessageActionsResult&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; 
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;//result is of type PNGetMessageActionsResult.&lt;/span&gt;
  &lt;span class="p"&gt;}));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Gdy gracz ma odpowiedzieć na wiadomość za pomocą reakcji, można to zrobić, dodając reakcję wiadomości do opublikowanej wiadomości:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;AddMessageAction&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Channel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;chanChatLobby&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;MessageTimetoken&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5610547826969050&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;PNMessageAction&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Type&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;reaction&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;smiley_face&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;PNAddMessageActionResult&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;//result is of type PNAddMessageActionResult.&lt;/span&gt;
  &lt;span class="p"&gt;}));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;PubNub używa tokenów czasowych do dokładnego śledzenia, kiedy wiadomość została opublikowana w sieci. Kiedy otrzymujesz wiadomości, czas jest również zawarty w ładunku. Następnie można podać odpowiednią wartość tokena czasu w argumencie MessageTimetoken(), aby móc zareagować na wiadomość.&lt;/p&gt;

&lt;p&gt;Aby móc nasłuchiwać reakcji i powiadomić gracza, który wysłał oryginalną wiadomość, należy dodać słuchacza i obsłużyć reakcję w metodzie OnPNMessageAction:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;listener&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onMessageAction&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;OnPnMessageAction&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="err"&gt;…&lt;/span&gt;
&lt;span class="kr"&gt;private&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nc"&gt;OnPnMessageAction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Pubnub&lt;/span&gt; &lt;span class="nx"&gt;pn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;PNMessageActionEventResult&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="c1"&gt;//Handle Message Reaction&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Podobnie jak w przypadku emoji, można użyć &lt;a href="https://www.pubnub.com/docs/sdks/unity/api-reference/objects?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;App Context&lt;/a&gt;, aby pobrać i przechowywać sposób, w jaki te reakcje są wizualnie reprezentowane w grze. Aby móc korzystać z Message Reactions, musisz upewnić się, że &lt;a href="https://www.pubnub.com/how-to/admin-portal-persistence/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;Message Persistence&lt;/a&gt; jest włączone dla twoich kluczy w &lt;a href="https://admin.pubnub.com/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;Admin Portal&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  GIF-y i inne multimedia
&lt;/h3&gt;

&lt;p&gt;Kolejną ważną funkcją, która zwiększa komfort korzystania z czatu, jest udostępnianie plików multimedialnych. Niezależnie od tego, czy chodzi o udostępnianie GIF-ów, zrzutów ekranu z zabawnych momentów, czy nawet udostępnianie zasobów gry, udostępnianie plików wprowadza kolejny poziom interakcji do gry.&lt;/p&gt;

&lt;p&gt;Wdrażanie tego typu plików multimedialnych wykorzystuje &lt;a href="https://www.pubnub.com/docs/sdks/unity/api-reference/files?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;PubNub File Sharing API&lt;/a&gt;. Dzięki tej funkcjonalności gracze mogą przesyłać, pobierać i usuwać pliki, do których mają dostęp. Aby móc wysłać plik, należy wykonać następujące połączenie:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;PNResult&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;PNFileUploadResult&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;fileUploadResponse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;SendFile&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Channel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="nx"&gt;chanFriendChatSamantha&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;File&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;cat_picture.jpg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;//checks the bin folder if no path is provided&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Message&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Look at this photo!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ExecuteAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;PNFileUploadResult&lt;/span&gt; &lt;span class="nx"&gt;fileUploadResult&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;fileUploadResponse&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;PNStatus&lt;/span&gt; &lt;span class="nx"&gt;fileUploadStatus&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;fileUploadResponse&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Status&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;fileUploadStatus&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;Error&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;fileUploadResult&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;Debug&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;JsonPluggableLibrary&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;SerializeToJsonString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fileUploadResult&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Handle File Upload Error.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aby subskrybenci mogli nasłuchiwać pliku, należy dodać detektor zdarzeń i obsłużyć sposób wyświetlania pliku w metodzie OnPNFile:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;listener&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onFile&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;OnPnFile&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="err"&gt;…&lt;/span&gt;
&lt;span class="kr"&gt;private&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nc"&gt;OnPnFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Pubnub&lt;/span&gt; &lt;span class="nx"&gt;pn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;PNFileEventResult&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;//Handle how to display the file received&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Można również uzyskać, wyświetlić listę informacji i usunąć dowolny plik powiązany z różnymi kanałami czatu. Będziesz musiał upewnić się, że włączyłeś funkcję udostępniania plików w portalu administracyjnym, a także Message Persistence. Możesz dowiedzieć się więcej o tym, jak to zrobić w naszym &lt;a href="https://www.pubnub.com/how-to/admin-portal-enabling-files/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;przewodniku Włączanie plików&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Zabezpieczanie kanałów czatu: Menedżer dostępu
&lt;/h3&gt;

&lt;p&gt;W każdym środowisku gier zapewnienie bezpieczeństwa kanałów czatu jest sprawą najwyższej wagi. Niezależnie od tego, czy chodzi o ochronę graczy przed niechcianymi wiadomościami, czy o ochronę wrażliwych dyskusji strategicznych, system czatu w grze Unity musi być zaprojektowany z myślą o bezpieczeństwie.&lt;/p&gt;

&lt;p&gt;W tym miejscu pojawia się menedżer &lt;a href="https://www.pubnub.com/docs/sdks/unity/api-reference/access-manager?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;dostępu&lt;/a&gt; PubNub. Zapewnia on solidną i elastyczną strukturę do zabezpieczania kanałów czatu. Dzięki Access Manager możesz kontrolować, kto może publikować lub subskrybować każdy z twoich kanałów, dodając dodatkową warstwę zabezpieczeń do systemu czatu w twojej grze Unity.&lt;/p&gt;

&lt;p&gt;Access Manager umożliwia przyznawanie uprawnień na poziomie użytkownika, kanału, a nawet na poziomie poszczególnych kluczy. Możesz określić, czy użytkownik może odczytywać, zapisywać lub zarządzać kanałem, a uprawnienia te mogą być dynamicznie aktualizowane wraz ze zmianą potrzeb gry. Na przykład na prywatnym czacie między dwoma graczami możesz przyznać tylko tym dwóm graczom uprawnienia do odczytu i zapisu na ich prywatnym kanale. Podobnie, na czacie gildii można nadać uprawnienia do odczytu i zapisu wszystkim członkom gildii, a uprawnienia do zarządzania tylko liderowi gildii.&lt;/p&gt;

&lt;p&gt;Access Manager obsługuje również uwierzytelnianie oparte na tokenach, umożliwiając bezpieczne uwierzytelnianie użytkowników i przyznawanie im odpowiednich uprawnień. Zapewnia to, że tylko autoryzowani gracze mogą uzyskać dostęp do kanałów czatu w grze, chroniąc społeczność gry przed potencjalnymi zagrożeniami.&lt;/p&gt;

&lt;p&gt;Aby móc korzystać z tej funkcji, należy włączyć Menedżera dostępu w &lt;a href="https://admin.pubnub.com/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;Portalu administratora&lt;/a&gt;. Możesz dowiedzieć się więcej o tym, jak to zrobić, postępując zgodnie z tą &lt;a href="https://support.pubnub.com/hc/en-us/articles/360051974791-How-do-I-enable-add-on-features-for-my-keys-?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;stroną wsparcia&lt;/a&gt; dotyczącą włączania tej dodatkowej funkcji.&lt;/p&gt;

&lt;h2&gt;
  
  
  Co dalej
&lt;/h2&gt;

&lt;p&gt;W tym poradniku dowiedziałeś się, jak dodać solidny system czatu w czasie rzeczywistym do swojej gry Unity. Omówiliśmy wszystko, od inicjalizacji obiektu PubNub w środowisku, po konfigurację wzorca czatu, który reprezentuje różne typy czatu, a następnie wysyłanie i odbieranie wiadomości. Dowiedziałeś się nawet, jak zaimplementować zaawansowane funkcje, takie jak emotikony, reakcje na wiadomości i udostępnianie plików, a także ważne aspekty każdego dobrego systemu czatu z trwałością wiadomości, mobilnymi powiadomieniami push i bezpieczeństwem kanałów.&lt;/p&gt;

&lt;p&gt;Niezależnie od tego, czy jesteś niezależnym deweloperem pracującym nad swoją pierwszą grą, czy doświadczonym deweloperem, który chce ulepszyć swoją grę wieloosobową, funkcjonalność PubNub w czasie rzeczywistym może służyć jako infrastruktura do obsługi czatu w grze, dzięki czemu możesz skupić się na tym, co najważniejsze.&lt;/p&gt;

&lt;p&gt;Dowiedz się więcej, korzystając z poniższych zasobów:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Przeczytaj naszą &lt;a href="https://www.pubnub.com/docs/sdks/unity?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;dokumentację Unity&lt;/a&gt;, aby dowiedzieć się wszystkiego, co musisz wiedzieć o dodawaniu czatu w czasie rzeczywistym do swojej gry.&lt;/li&gt;
&lt;li&gt;  Dowiedz się, jak dodać &lt;a href="https://www.pubnub.com/how-to/add-friend-list-to-your-unity-game/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;listę&lt;/a&gt; znajomych, korzystając z naszego przewodnika Unity.&lt;/li&gt;
&lt;li&gt;  Dowiedz się, jak nasza gra &lt;a href="https://github.com/PubNubDevelopers/unity-multiplayer-shooter"&gt;pokazowa Un&lt;/a&gt; ity wykorzystuje wzorce czatu do zarządzania pokojami rozmów i nie tylko.&lt;/li&gt;
&lt;li&gt;  Zanurz się w &lt;a href="https://github.com/pubnub/unity"&gt;kodzie źródłowym Unity SDK&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;W razie jakichkolwiek pytań lub wątpliwości zachęcamy do kontaktu z zespołem ds. relacji z deweloperami pod adresem &lt;a href="//mailto:devrel@pubnub.com"&gt;devrel@pubnub.com&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Jak skonfigurować Illuminate dla swojej gry?</title>
      <dc:creator>PubNub Developer Relations</dc:creator>
      <pubDate>Wed, 15 May 2024 23:04:16 +0000</pubDate>
      <link>https://forem.com/pubnub-pl/jak-skonfigurowac-illuminate-dla-swojej-gry-1clk</link>
      <guid>https://forem.com/pubnub-pl/jak-skonfigurowac-illuminate-dla-swojej-gry-1clk</guid>
      <description>&lt;h2&gt;
  
  
  Czym jest Illuminate?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/products/illuminate/?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;PubNub&lt;/a&gt; Illuminate to rozwiązanie do podejmowania decyzji i działania w czasie rzeczywistym, oparte na analizie i śledzeniu danych gry na żywo. Illuminate daje ci możliwość mapowania kluczowych wskaźników wydajności, które są ważne dla twojej gry, uruchamiania decyzji w oparciu o zachowania użytkowników i natychmiastowego sprawdzania wyników - a wszystko to bez konieczności angażowania zespołu inżynierów. Dzięki Illuminate możesz natychmiast podejmować inteligentne decyzje oparte na danych, gdy w czasie rzeczywistym zachodzą interakcje i rozgrywka, aby napędzać wzrost i optymalizować wydajność swojej gry.&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dKyu6IFj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/TXpocUbj1UohYKUEK3Cp7/643f958d6cfa08df8e3ec0e0c6cfac8e/Illuminate_-_General_Infographic__Color___2_.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dKyu6IFj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/TXpocUbj1UohYKUEK3Cp7/643f958d6cfa08df8e3ec0e0c6cfac8e/Illuminate_-_General_Infographic__Color___2_.svg" alt="Illuminate allows you to experiment and iterate in real time" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;W tym samouczku dowiesz się więcej o Illuminate, dlaczego jest to ważne dla sukcesu twojej gry (i twojego studia) oraz jak skonfigurować Illuminate, aby podejmować decyzje w czasie rzeczywistym, które wyzwalają działania w oparciu o dane twojej gry.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dlaczego Illuminate dla gier?
&lt;/h2&gt;

&lt;p&gt;W przypadku większości tradycyjnych narzędzi analitycznych podejmowanie działań na podstawie danych w czasie rzeczywistym jest zazwyczaj reaktywne. Dostosowania, takie jak zmiany cen w oparciu o opinie graczy, są utrudnione przez długie cykle poprawek, które obejmują gromadzenie danych, testowanie i wdrażanie na różnych platformach, co dodatkowo odciąga zasoby od rozwoju i tworzenia przyszłych treści. Istnieje krytyczna potrzeba wglądu w czasie rzeczywistym w zaangażowanie graczy i monetyzację, aby umożliwić podejmowanie szybkich decyzji taktycznych, ponieważ przydatne informacje stają się nieskuteczne, jeśli są opóźnione nawet o kilka godzin po wystąpieniu zdarzenia.&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--t-HT4tTS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/5VONbyesGtOfH2IARy6zQi/6eab4f3544cdae45066a4b3869f045b4/illuminate-problems-game-companies-face.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--t-HT4tTS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/5VONbyesGtOfH2IARy6zQi/6eab4f3544cdae45066a4b3869f045b4/illuminate-problems-game-companies-face.png" alt="There are a lot of problems that game companies face when trying to experiment or deploy changes based on feedback. Illuminate can help solve these problems." width="800" height="259"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Illuminate to niskokodowy, konfigurowalny produkt, który umożliwia menedżerom gier i analitykom danych natychmiastowe zastosowanie i ocenę wpływu ich strategicznych decyzji. Illuminate umożliwia zespołom dokonywanie w locie korekt balansu gry, bardziej skutecznych i odpowiednich strategii monetyzacji poprzez eksperymenty w czasie rzeczywistym oraz spersonalizowane nagrody dla graczy w celu poprawy retencji i doświadczenia gracza, a wszystko to przy jednoczesnym wykrywaniu nieuczciwych działań bez obciążania twórców gier.&lt;/p&gt;

&lt;p&gt;Dzięki Illuminate możesz zarządzać swoją platformą i podejmować działania w czasie rzeczywistym:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Uruchamiać ukierunkowane eksperymenty monetyzacji w kanałach i widzieć natychmiastowe wyniki&lt;/li&gt;
&lt;li&gt; Natychmiastowe wysyłanie spersonalizowanych rekomendacji na podstawie działań graczy.&lt;/li&gt;
&lt;li&gt; Wyzwalaj działania w oparciu o zachowania użytkowników lub kohorty i obserwuj natychmiastowe wyniki.&lt;/li&gt;
&lt;li&gt; Lepsze wykrywanie oszustw oraz identyfikacja i reagowanie na podejrzane zachowania w czasie rzeczywistym.&lt;/li&gt;
&lt;li&gt; Dostosowywanie i eksperymentowanie z cenami przedmiotów w sklepie w grze. Dostosuj ceny, jeśli gracze kupują wiele takich samych przedmiotów i uruchamiaj wydarzenia w grze, aby wpłynąć na wszystkie ceny w sklepie.&lt;/li&gt;
&lt;li&gt; Nagradzaj graczy za ukończenie wyzwań/osiągnięć kodami rabatowymi na przedmioty w grze. Dostosuj miejsca, w których gracze spędzają najmniej czasu i rozważ nagradzanie graczy za spędzanie czasu w tym obszarze lub zmianę rodzaju nagród otrzymywanych przez graczy.&lt;/li&gt;
&lt;li&gt; Pojawianie się przydatnych przedmiotów i dostosowywanie podstawowych funkcji rozgrywki w locie, bez konieczności bugowania inżynierów.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Możesz dowiedzieć się więcej o tym, jak Illuminate zasila gry, oglądając nasz film &lt;a href="https://www.youtube.com/watch?v=2TXLPfAWNVI"&gt;Illuminate for Gaming&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Jak skonfigurować Illuminate dla swojej gry
&lt;/h2&gt;

&lt;p&gt;Zanim przejdziesz do konfiguracji Illuminate dla swojej gry, musisz zrozumieć kilka kluczowych terminów używanych podczas konfiguracji. Illuminate składa się z następujących trzech modułów:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Obiekt biznesowy&lt;/strong&gt;: Sposób pobierania danych do Illuminate. Możesz definiować, tworzyć i aktywować obiekty biznesowe, które są kontenerami do przechwytywania danych z wybranych aplikacji i zestawów kluczy. Za pomocą szeregu opcji (miar, wymiarów lub metryk) możesz zdecydować, które konkretne dane chcesz śledzić w czasie rzeczywistym i jak chcesz je agregować.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Decyzja&lt;/strong&gt;: Miejsce, w którym podejmowane są działania na podstawie utworzonych metryk. Można to zrobić, definiując reguły z warunkami, które muszą być spełnione, oraz akcje uruchamiane za każdym razem, gdy te reguły są spełnione.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Dashboard&lt;/strong&gt;: Miejsce wizualizacji metryk utworzonych w Business Objects i akcji wykonanych w Decisions za pomocą wykresów i dashboardów (zbiorów wykresów).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qtDNhv95--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/D1i0KNHkQFIYvVzVbwtDm/a05fdda93a0e7acd44cede7c202f9c40/illuminate-how-to-gaming-illuminate-workflow.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qtDNhv95--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/D1i0KNHkQFIYvVzVbwtDm/a05fdda93a0e7acd44cede7c202f9c40/illuminate-how-to-gaming-illuminate-workflow.png" alt="Illuminate is a constant cycle of experimentation and iteration once you have set up the associated Dashboard, Business Object, and Decisions." width="800" height="619"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Teraz, gdy zdefiniowaliśmy kluczową terminologię, integracja Illuminate z grą składa się z sześciu kroków:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Zrozumienie schematu wiadomości&lt;/li&gt;
&lt;li&gt; Wybierz, skąd pochodzą dane.&lt;/li&gt;
&lt;li&gt; Wybór danych&lt;/li&gt;
&lt;li&gt; Wizualizacja danych&lt;/li&gt;
&lt;li&gt; Wykorzystanie danych do pracy&lt;/li&gt;
&lt;li&gt; Wizualizacja i wprowadzanie zmian&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Zrozumienie schematu wiadomości
&lt;/h3&gt;

&lt;p&gt;Zrozumienie schematu danych w grze ma kluczowe znaczenie. Oznacza to identyfikację typów danych, które chcesz śledzić i analizować, takich jak działania graczy, transakcje w grze i zdarzenia systemowe. Dzięki zrozumieniu i udokumentowaniu tego, co dokładnie zawiera ładunek, programiści mogą zapewnić, że analitycy i inni członkowie zespołu mogą skutecznie mapować dane do odpowiednich źródeł za pomocą JSONPath. Zrozumiesz, dlaczego jest to ważne przy wyborze danych podczas tworzenia obiektów biznesowych.&lt;/p&gt;

&lt;h3&gt;
  
  
  Wybór źródła danych
&lt;/h3&gt;

&lt;p&gt;Illuminate może być używany z każdą grą, która łączy się online, niezależnie od tego, czy PubNub ją zasila, czy nie. Jeśli PubNub zasila infrastrukturę gry, wystarczy wybrać odpowiednią aplikację i zestaw kluczy używany w grze podczas tworzenia obiektu biznesowego (więcej na ten temat wkrótce) w &lt;a href="https://admin.pubnub.com/?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;portalu administracyjnym&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Jeśli twoja gra nie jest obsługiwana przez PubNub, dane mogą być przesyłane za pomocą interfejsu API Fire, za pośrednictwem &lt;a href="https://www.pubnub.com/docs/sdks/rest-api/send-fire-request?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;interfejsu API REST&lt;/a&gt; lub jednego z naszych &lt;a href="https://www.pubnub.com/docs/sdks?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;zestawów SDK&lt;/a&gt;. Punkt końcowy Fire umożliwia klientowi wysyłanie wiadomości do programów obsługi zdarzeń Functions. Wiadomości te trafią bezpośrednio do wszystkich programów obsługi zdarzeń zarejestrowanych na kanale, do którego wysyłasz wiadomość, i uruchomią ich wykonanie.&lt;/p&gt;

&lt;p&gt;Aby korzystać z PubNub Fire API, należy utworzyć konto PubNub i skonfigurować zestaw kluczy z funkcjami potrzebnymi w grze. Ten zestaw kluczy zawiera klucze publikowania i subskrypcji niezbędne dla Fire API. Możesz dowiedzieć się, jak to zrobić, postępując zgodnie z naszym &lt;a href="https://www.pubnub.com/how-to/admin-portal-create-keys/?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;przewodnikiem&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Wybierz swoje dane: Obiekty biznesowe
&lt;/h3&gt;

&lt;p&gt;Obiekty biznesowe mają fundamentalne znaczenie w Illuminate. Są to kontenery na dane, których chcesz używać do podejmowania decyzji i wizualizacji w programie Illuminate, i zasadniczo są sposobem pobierania danych do programu Illuminate.&lt;/p&gt;

&lt;p&gt;Obiekt biznesowy składa się z trzech elementów:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Wybór danych (miary i wymiary)&lt;/li&gt;
&lt;li&gt; Źródło danych (skąd pochodzą dane)&lt;/li&gt;
&lt;li&gt; Warunki (metryki)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Chociaż nie jest to związane z bazami danych, pomaga myśleć o strukturze obiektu biznesowego w kategoriach SQL SELECT (miary i wymiary), FROM (źródło danych), WHERE (metryki). Podczas tworzenia obiektów biznesowych należy postępować zgodnie z &lt;a href="https://www.pubnub.com/docs/illuminate/business-objects/basics?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;dokumentacją&lt;/a&gt; w celu uzyskania szczegółowych informacji lub obejść, o których należy pamiętać.&lt;/p&gt;

&lt;h4&gt;
  
  
  Wybór danych
&lt;/h4&gt;

&lt;p&gt;Istnieją dwa różne typy wartości, które można wybrać dla obiektu biznesowego: Miary i Wymiary.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/docs/illuminate/business-objects/basics#measures?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;Miary&lt;/a&gt; to wartości liczbowe, ilościowe. Przykłady miar obejmują czas trwania gry, liczbę monet, liczbę zabójstw, obrażenia broni lub wartość zamówienia.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/docs/illuminate/business-objects/basics#dimensions?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;Wymiary&lt;/a&gt; to wartości jakościowe, takie jak język gracza, wybrane kosmetyki, typ zadania, wybrany typ broni lub poziom gry.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LX_501on--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/2g5KUkmNBlZ9GXWe7ofZlJ/479b6478e62cb00ca07cd0cbd7b205c0/illuminate-how-to-gaming-business-object-edit.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LX_501on--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/2g5KUkmNBlZ9GXWe7ofZlJ/479b6478e62cb00ca07cd0cbd7b205c0/illuminate-how-to-gaming-business-object-edit.png" alt="With Illuminate, you can create and edit Business Objects which contain mapped quantitative and qualitative data to capture." width="800" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;W zależności od typu danych, które chcesz śledzić, musisz &lt;a href="https://www.pubnub.com/docs/illuminate/business-objects/basics#data-mapping?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;zmapować dane&lt;/a&gt; do swoich miar i wymiarów za pomocą JSONPath. Illuminate musi wiedzieć, gdzie szukać, aby rozpocząć przechwytywanie tych danych ze źródła danych (skonfigurowanego w poprzednim kroku). Aby zdefiniować źródło danych, wybierz przycisk Mapuj obok każdej miary i wymiaru i podaj odpowiednie ścieżki JSON.&lt;/p&gt;

&lt;p&gt;Jest to najtrudniejsza część konfiguracji Business Objects, ponieważ musisz zrozumieć schemat wiadomości. Ponieważ schemat komunikatów został udokumentowany lub zrozumiany wcześniej, należy zmapować go do sposobu, w jaki Iluminate szuka danych.&lt;/p&gt;

&lt;p&gt;Jeśli przechwytujesz komunikaty (w szczególności Publish Message API), Illuminate szuka następującej struktury. Jeśli Twoja infrastruktura nie jest obsługiwana przez PubNub, Twoje dane będą musiały zostać zmapowane w tej samej strukturze, co Publish Message API:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;message&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt; &lt;span class="c1"&gt;// data from the published message&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;body&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;message&lt;/span&gt; &lt;span class="nx"&gt;body&lt;/span&gt; &lt;span class="nx"&gt;payload&lt;/span&gt; &lt;span class="nx"&gt;defined&lt;/span&gt; &lt;span class="nx"&gt;by&lt;/span&gt; &lt;span class="nx"&gt;you&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;meta&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;meta&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt; &lt;span class="nx"&gt;params&lt;/span&gt; &lt;span class="nx"&gt;defined&lt;/span&gt; &lt;span class="nx"&gt;by&lt;/span&gt; &lt;span class="nx"&gt;you&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;userId&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="nx"&gt;ID&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="nx"&gt;UUID&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;sender&lt;/span&gt; &lt;span class="nx"&gt;ID&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;channel&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;channel&lt;/span&gt; &lt;span class="nx"&gt;on&lt;/span&gt; &lt;span class="nx"&gt;which&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;message&lt;/span&gt; &lt;span class="nx"&gt;is&lt;/span&gt; &lt;span class="nx"&gt;published&lt;/span&gt;
 &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aby poprawnie zmapować miarę lub wymiar, należy podać obiekt &lt;code&gt;komunikatu&lt;/code&gt;, a następnie inne pole. Będzie on zawsze miał następującą strukturę: &lt;code&gt;$.message.{obligatory-secondary-field}.{optional-further-fields}&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Sposób mapowania danych jest całkowicie oparty na strukturze wiadomości&lt;/em&gt;. Oto kilka przykładów mapowania danych dla wiadomości:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Śledź liczbę monet (wymiar) =&amp;gt; $.message.meta.coins&lt;/li&gt;
&lt;li&gt;  Wyposażony przedmiot kosmetyczny (wymiar) =&amp;gt; $.message.body&lt;/li&gt;
&lt;li&gt;  Nazwa kanału (wymiar) =&amp;gt; $message.channel&lt;/li&gt;
&lt;li&gt;  Zadane obrażenia (miara) =&amp;gt; $.message.body[6]&lt;/li&gt;
&lt;li&gt;  Uzyskanie określonych nazw użytkowników (wymiar) =&amp;gt; $.message.userId&lt;/li&gt;
&lt;li&gt;  Liczba znajomych (miara) =&amp;gt; $.message.body.user.friends_count&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xSMgYJkd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/1s2MtcR50cmcLk0s2EapsL/5aa0bb25a6fcb384f5e3f0b6932c99af/illuminate-how-to-gaming-map-coins-purchased.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xSMgYJkd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/1s2MtcR50cmcLk0s2EapsL/5aa0bb25a6fcb384f5e3f0b6932c99af/illuminate-how-to-gaming-map-coins-purchased.png" alt="In Illuminate, you can map different data to be captured via Business Objects." width="800" height="484"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Illuminate może również przechwytywać dane przy użyciu PubNub &lt;a href="https://www.pubnub.com/docs/general/metadata/channel-metadata?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;App Context&lt;/a&gt;, który umożliwia przechowywanie metadanych o kanałach, członkach kanałów, członkach kanałów i użytkownikach wysyłanych przez sieć PubNub. Dostęp do tych informacji można uzyskać, śledząc dokładnie, w jaki sposób Illuminate przechwytuje te dane.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;// data from the sending user metadata, can be null&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;externalId&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="err"&gt;’&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt; &lt;span class="nx"&gt;external&lt;/span&gt; &lt;span class="nx"&gt;ID&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;status&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="nx"&gt;status&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;custom&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="nx"&gt;metadata&lt;/span&gt; &lt;span class="nx"&gt;defined&lt;/span&gt; &lt;span class="nx"&gt;by&lt;/span&gt; &lt;span class="nx"&gt;you&lt;/span&gt;
 &lt;span class="p"&gt;},&lt;/span&gt;
 &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;channel&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt; &lt;span class="c1"&gt;// data from the channel the message is sent on, can be null&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;channel&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;channel&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;status&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;channel&lt;/span&gt; &lt;span class="nx"&gt;status&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;custom&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt; &lt;span class="nx"&gt;channel&lt;/span&gt; &lt;span class="nx"&gt;metadata&lt;/span&gt; &lt;span class="nx"&gt;defined&lt;/span&gt; &lt;span class="nx"&gt;by&lt;/span&gt; &lt;span class="nx"&gt;you&lt;/span&gt;
 &lt;span class="p"&gt;},&lt;/span&gt;
 &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;membership&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt; &lt;span class="c1"&gt;// data from the user's membership to the channel, can be null&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;status&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;membership&lt;/span&gt; &lt;span class="nx"&gt;status&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;custom&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt; &lt;span class="nx"&gt;membership&lt;/span&gt; &lt;span class="nx"&gt;metadata&lt;/span&gt; &lt;span class="nx"&gt;defined&lt;/span&gt; &lt;span class="nx"&gt;by&lt;/span&gt; &lt;span class="nx"&gt;you&lt;/span&gt;
 &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Podobnie jak w przypadku komunikatów, aby poprawnie zmapować miarę lub wymiar, należy podać obiekt &lt;code&gt;użytkownika&lt;/code&gt;, &lt;code&gt;kanału&lt;/code&gt; lub &lt;code&gt;członkostwa&lt;/code&gt;, a następnie co najmniej jeden klucz z pliku JSON. Będzie on zawsze miał następującą strukturę: &lt;code&gt;$.user.{obligatory-secondary-field}.{optional-further-fields}&lt;/code&gt;. Oto kilka przykładów mapowania danych dla App Context:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Shop Item Details (wymiar) =&amp;gt; $.channel.custom.details&lt;/li&gt;
&lt;li&gt;  Status listy znajomych (wymiar) =&amp;gt; $.membership.status&lt;/li&gt;
&lt;li&gt;  Język gracza (wymiar) =&amp;gt; $.user.custom.language&lt;/li&gt;
&lt;li&gt;  Średni wynik gracza (wymiar) =&amp;gt; $.user.custom.team_deathmatch_score&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Uwaga&lt;/strong&gt;: Aby utworzyć obiekt biznesowy, należy dodać co najmniej jeden wymiar lub jedną miarę.&lt;/p&gt;

&lt;h4&gt;
  
  
  Źródło danych
&lt;/h4&gt;

&lt;p&gt;Po zmapowaniu miar i wymiarów należy określić, skąd pochodzą dane. To jest to, co zostało określone wcześniej. Pamiętaj, aby wybrać odpowiednią aplikację i zestaw kluczy, które zdefiniowałeś wcześniej, aby upewnić się, że program Illuminate przechwytuje dane z właściwego źródła.&lt;/p&gt;

&lt;h4&gt;
  
  
  Warunki (metryki)
&lt;/h4&gt;

&lt;p&gt;Po wybraniu źródła danych można dodać warunki zwane &lt;a href="https://www.pubnub.com/docs/illuminate/business-objects/basics#metrics?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;metrykami&lt;/a&gt;. Analogicznie do instrukcji WHERE w SQL, metryki nie są wymagane do przechwytywania danych przez Business Objects, ale są niezwykle przydatne do filtrowania i stosowania obliczeń do miar i wymiarów. Należy pamiętać, że metryki są wymagane do tworzenia decyzji lub wizualizacji na pulpitach nawigacyjnych za pomocą wykresów (więcej na ten temat później).&lt;/p&gt;

&lt;p&gt;Podczas &lt;a href="https://www.pubnub.com/docs/illuminate/business-objects/create-business-object#create-metrics?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;tworzenia&lt;/a&gt; metryk należy przypisać i wybrać pola do filtrów. Jest kilka pól, na które należy zwrócić uwagę:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Nazwij swoją metrykę, która ma sens, ponieważ wykres do wizualizacji danych na pulpicie nawigacyjnym będzie miał taką samą nazwę.&lt;/li&gt;
&lt;li&gt;  Wybierając funkcję, miary można obecnie agregować za pomocą &lt;code&gt;SUM&lt;/code&gt;, &lt;code&gt;AVG&lt;/code&gt;, &lt;code&gt;MAX&lt;/code&gt; i &lt;code&gt;MIN&lt;/code&gt;. Wymiary mogą wykorzystywać tylko funkcję &lt;code&gt;COUNT&lt;/code&gt;. Wybór funkcji umożliwia wybranie miary lub wymiaru z listy rozwijanej.&lt;/li&gt;
&lt;li&gt;  W polu Okres należy wybrać okno agregacji lub okres dla funkcji.&lt;/li&gt;
&lt;li&gt;  Upewnij się, że wybrałeś wymiary, które mają być dostępne na wykresach i w decyzjach (ponieważ nie będziesz mógł segmentować na wykresach i stosować ich do reguł w decyzjach bez wybrania ich później).&lt;/li&gt;
&lt;li&gt;  Filtrowanie określonych wiadomości lub danych App Context na podstawie różnych wymiarów. Należy pamiętać, że do wizualizacji na Dashboardach i gromadzenia danych nie trzeba stosować filtrów do metryk.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Dla jednego obiektu biznesowego można utworzyć wiele metryk, które przechwytują różne dane. Poniżej znajduje się przykład metryki do przechwytywania obrażeń zadanych dla środka i typu broni, która zadała te obrażenia:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9tFdditq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/Sq6bSPz7hn0Gwy0VWUYqV/76f0278d0d5cc533d9c3d7a1b47d25d0/illuminate-how-to-gaming-business-object-edit-metric.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9tFdditq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/Sq6bSPz7hn0Gwy0VWUYqV/76f0278d0d5cc533d9c3d7a1b47d25d0/illuminate-how-to-gaming-business-object-edit-metric.png" alt="In Illuminate, you can edit a metric associated with a Business Object to capture specific data by using Filters." width="800" height="548"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Wizualizacja danych: Pulpity nawigacyjne i wykresy
&lt;/h3&gt;

&lt;p&gt;Illuminate pozwala &lt;a href="https://www.pubnub.com/docs/illuminate/dashboards/basics?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;wizualizować&lt;/a&gt; nie tylko metryki, które chcesz śledzić, ale także działania decyzyjne i ich wyniki za pomocą wykresów na pulpitach nawigacyjnych.&lt;/p&gt;

&lt;p&gt;W ten sposób możesz obserwować trendy w swoim produkcie w czasie rzeczywistym, reagować i udoskonalać swoje podejście za pomocą decyzji biznesowych opartych na danych. Jest to również świetny sposób na określenie, czy Illuminate prawidłowo przechwytuje dane w oparciu o skonfigurowane wcześniej obiekty biznesowe!&lt;/p&gt;

&lt;p&gt;Możesz utworzyć &lt;a href="https://www.pubnub.com/docs/illuminate/dashboards/basics#dashboards?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;pulpit&lt;/a&gt; nawigacyjny, który jest zbiorem wykresów, który pozwala zobaczyć wszystkie wskaźniki w jednym miejscu i dodać wykresy do pulpitu nawigacyjnego. &lt;a href="https://www.pubnub.com/docs/illuminate/dashboards/basics#charts?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;Wykres&lt;/a&gt; jest wizualną reprezentacją metryki zdefiniowanej dla danego obiektu biznesowego.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2NwoFfyK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/6PLWtomxwi4aQ6zQwXdPDo/a30d85ab378d640247158556624d8e35/illuminate-how-to-gaming-add-chart.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2NwoFfyK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/6PLWtomxwi4aQ6zQwXdPDo/a30d85ab378d640247158556624d8e35/illuminate-how-to-gaming-add-chart.png" alt="With Illuminate, you can add charts to Dashboards to visualize data." width="800" height="503"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;W dowolnym momencie można dostosować sposób wyświetlania danych metrycznych na wykresie, na przykład pokazując inny zakres czasu (np. 30 minut, 1 godzinę lub niestandardową datę) i wyświetlając dane metryczne za pomocą różnych typów wykresów, jako wykres słupkowy (widok domyślny) lub wykres liniowy.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DjSDXefD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/4B7KLgDDQWyZuTrTjxWF2Y/f602d35dc8da99a64dde0a9aa43d844e/illuminate-how-to-gaming-monetization-dashboard.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DjSDXefD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/4B7KLgDDQWyZuTrTjxWF2Y/f602d35dc8da99a64dde0a9aa43d844e/illuminate-how-to-gaming-monetization-dashboard.png" alt="In Illuminate, you can monitor data captured in real time by visualizing the charts in your Dashboard and see when any associated Decisions are triggered." width="740" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Możesz dodać wiele wykresów (metryk) do jednego pulpitu nawigacyjnego, a także mieć różne pulpity nawigacyjne do wizualizacji różnych obszarów gry (monetyzacja, rozgrywka, nagrody za zadania itp.). Po skonfigurowaniu decyzji będziesz mógł przeglądać uruchamiane działania decyzyjne i ich wyniki za pomocą wykresów na pulpitach nawigacyjnych.&lt;/p&gt;

&lt;h3&gt;
  
  
  Wykorzystaj swoje dane: Decyzje i działania
&lt;/h3&gt;

&lt;p&gt;Po utworzeniu metryki można rozpocząć ocenę tych danych, monitorowanie trendów i, co najważniejsze, podejmowanie działań.&lt;/p&gt;

&lt;p&gt;Illuminate zawiera moduł &lt;a href="https://www.pubnub.com/docs/illuminate/decisions/basics?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;Decisions&lt;/a&gt;, który pozwala zdefiniować metryki, na których chcesz działać, tworząc akcje różnych typów i reguły określające, kiedy te akcje mają być wykonywane.&lt;/p&gt;

&lt;p&gt;Podczas tworzenia decyzji należy:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Wybrać obiekt biznesowy i jedną z powiązanych z nim metryk.&lt;/li&gt;
&lt;li&gt;  Zdefiniuj &lt;a href="https://www.pubnub.com/docs/illuminate/decisions/basics#actions?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;działania&lt;/a&gt;, które chcesz podjąć.&lt;/li&gt;
&lt;li&gt;  Skonfigurować [rules}&lt;a href="https://www.pubnub.com/docs/illuminate/decisions/basics#rules?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;(https://www.pubnub.com/docs/illuminate/decisions/basics#rules)&lt;/a&gt; przy użyciu wybranych warunków i skonfigurowanych akcji. Reguły te będą wyzwalać działania.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Decyzje mają na celu pomóc menedżerom produktu eksperymentować ze strategiami zaangażowania i monetyzacji przed ich skodyfikowaniem i wdrożeniem. Dzięki Illuminate mogą oni podejmować decyzje w oparciu o rzeczywiste dane zamiast założeń, a następnie działać na podstawie tych danych za pomocą zautomatyzowanych warunków i działań.&lt;/p&gt;

&lt;p&gt;Decyzje składają się z dwóch części: Akcji i Reguł.&lt;/p&gt;

&lt;h4&gt;
  
  
  Akcje
&lt;/h4&gt;

&lt;p&gt;Akcje definiują, co się stanie, gdy zostaną spełnione warunki (omówione dalej).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SP1kLL6b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/2scdabnjHhwn2ygxEKaPcF/63e4c9b8988c3f64f08b9d61bbe712b2/illuminate-how-to-gaming-edit-configuration.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SP1kLL6b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/2scdabnjHhwn2ygxEKaPcF/63e4c9b8988c3f64f08b9d61bbe712b2/illuminate-how-to-gaming-edit-configuration.png" alt="In Illuminate, edit the configuration of your Decision to trigger on different conditions and execute various actions." width="800" height="632"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Istnieje pięć typów akcji, które można wybrać podczas konfigurowania akcji:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Wyślij wiadomość: Publikuje wiadomość do użytkownika lub kanału i wykorzystuje PubNub Publish API. Opcjonalnie można dodać zmienne (${variableThatChanges}), które można kontrolować i zmieniać dynamicznie podczas konfigurowania reguł decyzyjnych.&lt;/li&gt;
&lt;li&gt; Webhook: Wysyła wywołanie do określonego adresu URL, łącząc się z integracją usługi innej firmy. Opcjonalnie można dodać zmienne (${variableThatChanges}), które można kontrolować i dynamicznie zmieniać podczas konfigurowania reguł decyzyjnych.&lt;/li&gt;
&lt;li&gt; Update User: Ustawia dowolne predefiniowane lub niestandardowe metadane użytkownika, dostarczając żądane informacje jako pary klucz/wartość, wykorzystując interfejs API PubNub App Context dla użytkowników.&lt;/li&gt;
&lt;li&gt; Update Channel: Ustawia dowolne predefiniowane lub niestandardowe metadane kanału, podając żądane informacje jako pary klucz/wartość, wykorzystując interfejs API PubNub App Context dla kanałów.&lt;/li&gt;
&lt;li&gt; Update Membership: Ustawia dowolne predefiniowane lub niestandardowe metadane członkostwa, podając żądane informacje jako pary klucz/wartość, wykorzystując interfejs API PubNub App Context dla członkostwa.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Chociaż można skonfigurować tylko jedną metrykę na decyzję, można utworzyć wiele decyzji, aby uwzględnić przypadki użycia. Pamiętaj, aby postępować zgodnie z &lt;a href="https://www.pubnub.com/docs/illuminate/decisions/basics#actions?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;dokumentacją&lt;/a&gt; podczas tworzenia akcji dla decyzji.&lt;/p&gt;

&lt;p&gt;Po zakończeniu konfigurowania akcji należy skonfigurować reguły ich wyzwalania.&lt;/p&gt;

&lt;h4&gt;
  
  
  Reguły
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/docs/illuminate/decisions/basics#rules?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;Reguły&lt;/a&gt; składają się z &lt;a href="https://www.pubnub.com/docs/illuminate/decisions/basics#conditions?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;warunków&lt;/a&gt;, które są kryteriami, które muszą być spełnione, aby wyzwolić akcję, do oceny i akcji do wykonania, gdy warunki są spełnione. Pojedyncza reguła to definicja (wiersz w tabeli decyzyjnej) określająca, która akcja powinna zostać uruchomiona dla danego warunku.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--y8j6NLRN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/4r1hj3lXGlVwIM1zB2pUkG/808ad92653032c9bd901571a3ac000a1/illuminate-how-to-gaming-edit-rules.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--y8j6NLRN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/4r1hj3lXGlVwIM1zB2pUkG/808ad92653032c9bd901571a3ac000a1/illuminate-how-to-gaming-edit-rules.png" alt="In Illuminate, you can add and edit rules that when satisfied, trigger various Actions associated with your Decisions." width="800" height="705"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tabela decyzyjna składa się z czterech części:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Polityka trafień: Ustawienie określające, czy akcja(i) ma(ją) być wyzwalana(e) tylko dla pierwszej pasującej reguły (Pojedyncza), czy dla wszystkich (Wiele), jeśli ich warunki są spełnione.&lt;/li&gt;
&lt;li&gt; Okno agregacji: Jedyna wartość, której nie można edytować w oknie konfiguracji reguły. Automatycznie wypełnia się na podstawie wartości Okresu wybranej dla funkcji podczas tworzenia metryki. Określa, jak często metryka uruchamia daną funkcję (COUNT, AVG, MAX lub inną) dla miary lub wymiaru.&lt;/li&gt;
&lt;li&gt; Częstotliwość oceny: Okno podglądu reguły określające, jak często program Illuminate powinien uruchamiać reguły w tej decyzji.&lt;/li&gt;
&lt;li&gt; Warunki: Zestaw wymagań zdefiniowanych samodzielnie przy użyciu tabeli konfiguracji. W tym miejscu definiuje się, które warunki (i progi, które spełniają) powinny wyzwalać określone działania.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Należy pamiętać, że każdy wiersz w tabeli decyzji jest oddzielną regułą decyzyjną, która składa się z warunków i akcji. Kolejność &lt;strong&gt;reguł określa kolejność ich&lt;/strong&gt; wykonywania. Jeśli chcesz zmienić istniejącą kolejność, wybierz Edytuj reguły w decyzji i zmień kolejność, korzystając z opcji Przenieś w górę lub Przenieś w dół w menu "Akcje" obok każdej reguły.&lt;/p&gt;

&lt;h3&gt;
  
  
  Wizualizacja i wprowadzanie zmian
&lt;/h3&gt;

&lt;p&gt;Po skonfigurowaniu obiektów biznesowych, pulpitów nawigacyjnych i wykresów oraz decyzji można analizować i eksperymentować ze zmianami w czasie rzeczywistym. Nie musisz już czekać na poprawki balansu, aby sprawdzić, czy wprowadzone zmiany mają pozytywny wpływ na graczy lub grę.&lt;/p&gt;

&lt;p&gt;Większość czasu będziesz spędzać tutaj, gdzie będziesz podejmować decyzje dotyczące eksperymentów, aby wprowadzić poprawki, które pomogą zwiększyć zaangażowanie w grę.&lt;/p&gt;

&lt;h2&gt;
  
  
  Co dalej
&lt;/h2&gt;

&lt;p&gt;Illuminate oddaje moc eksperymentowania w czasie rzeczywistym w ręce zespołów bezpośrednio odpowiedzialnych za rozwój i wyniki finansowe firmy. Jest to cenna platforma do eksperymentowania i podejmowania inteligentnych decyzji opartych na danych w oparciu o rozgrywkę i zachowania użytkowników poprzez mapowanie wskaźników KPI, które są ważne dla twojej gry i wyzwalanie decyzji w oparciu o te zachowania.&lt;/p&gt;

&lt;p&gt;Zapoznaj się z naszymi &lt;a href="https://www.pubnub.com/products/Illuminate-gaming/?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=pl"&gt;zasobami Ill&lt;/a&gt; uminate, aby zobaczyć, jak Illuminate może pomóc Twojej grze i dowiedzieć się, jak samemu wypróbować Illuminate. Jak zawsze, jeśli masz jakiekolwiek pytania, skontaktuj się z zespołem ds. relacji z deweloperami pod adresem &lt;a href="//mailto:devrel@pubnub.com"&gt;devrel@pubnub.com&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
