Jak wysyłać powiadomienia Firebase Push na Androida?
Published: 2024-03-12 22:06:00

Podczas tworzenia aplikacji mobilnych trudno jest wymyślić przypadek użycia, w którym **nie** trzeba powiadamiać użytkowników za pomocą alertów lub powiadomień push.

Przed dalszą lekturą mamy również dedykowane [demo](https://www.pubnub.com/demos/push/) i [samouczek](https://www.pubnub.com/tutorials/mobile-push-notifications/) dotyczący powiadomień push zarówno na Andorid, jak i iOS

Rozważmy na przykład następujący scenariusz: Tworzysz aplikację sportową działającą w czasie rzeczywistym, która przekazuje swoim [użytkownikom krytyczne wiadomości podczas](https://www.pubnub.com/solutions/live-audience-engagement/) meczu. Kluczową funkcją aplikacji byłoby wysyłanie niezawodnych mobilnych powiadomień push do użytkowników, gdy tylko ich ulubiona drużyna zdobędzie bramkę.

Każdy mobilny system operacyjny zapewnia własne rozwiązanie dla natywnych powiadomień push, więc ich integracja z aplikacją może być trudna. W systemie Android mechanizmem używanym przez natywne aplikacje do powiadomień push są powiadomienia [Firebase Cloud Messaging](https://firebase.google.com/docs/cloud-messaging/) (FCM). [PubNub poszedł o krok dalej](https://pubnub.com/docs/messages/push/send) i zintegrował wykorzystanie powiadomień Firebase Cloud Messaging z platformą komunikacji w czasie rzeczywistym PubNub.

Gdy aplikacja jest na pierwszym planie, kanały PubNub wykonają świetną robotę, dostarczając strumienie danych w czasie rzeczywistym. Trudny przypadek ma miejsce, gdy aplikacja działa w tle, gdy użytkownik ma zablokowany telefon, a zwłaszcza gdy użytkownik ma przerywany dostęp do połączenia internetowego przez WiFi lub LTE. Aby poradzić sobie z tymi trudnymi przypadkami, najłatwiejszym rozwiązaniem jest wdrożenie powiadomień push Firebase.

Przegląd sposobu wysyłania powiadomień Firebase Push do systemu Android przy użyciu FCM
---------------------------------------------------------------------------------------

FCM to bezpłatna usługa Google, która pozwala użytkownikom niezawodnie dostarczać powiadomienia push Firebase bez żadnych kosztów.

Za pomocą FCM można wysyłać[dwa rodzaje wiadomości do aplikacji](https://support.pubnub.com/hc/en-us/articles/360051495472-Why-are-my-FCM-push-notifications-not-working-):

-   **Wiadomości powiadomień**, czasami nazywane "wiadomościami wyświetlanymi". Są one obsługiwane automatycznie przez FCM SDK.
-   Komunikaty**danych**, które są obsługiwane przez aplikację kliencką.
-   Komunikaty powiadomień zawierają wstępnie zdefiniowany zestaw kluczy widocznych dla użytkownika i mogą zawierać opcjonalny ładunek danych.
-   Komunikaty danych zawierają tylko niestandardowe pary klucz-wartość zdefiniowane przez użytkownika.
-   Maksymalny ładunek dla obu typów wiadomości wynosi 4 KB.

Możesz wysłać wiadomość z danymi, wiadomość z powiadomieniem lub obie, ale ma to znaczenie, jeśli wysyłasz tylko wiadomość z danymi, ponieważ Twój kod jest wyraźnie odpowiedzialny za wyświetlenie powiadomienia push. Wiadomość z powiadomieniem zostanie automatycznie obsłużona przez FCM w celu wyświetlenia ładunku powiadomienia.

Powinieneś używać komunikatów powiadomień, gdy chcesz, aby Firebase obsługiwał wyświetlanie powiadomień w imieniu aplikacji klienckiej i powinieneś używać komunikatów danych, gdy chcesz przetwarzać wiadomości w aplikacji klienckiej. Możesz wysłać powiadomienie zawierające opcjonalny ładunek danych, a FCM zajmie się wyświetlaniem ładunku powiadomienia, podczas gdy aplikacja kliencka zajmie się ładunkiem danych.

System FCM uwzględnia 3 strony:

-   Aplikację kliencką.
-   Serwery FCM Google (backend)
-   Serwer push innej firmy.

Gdy użytkownik instaluje aplikację, musi się ona zarejestrować, aby włączyć FCM. Oto przepływ pracy FCM dla wysyłania powiadomień:

-   Serwer push innej firmy wysyła powiadomienie push do serwerów FCM Google. **Jest to część, którą PubNub może zastąpić i uprościć.**
-   Serwery te przekazują wiadomość do wszystkich zarejestrowanych aplikacji mobilnych.
-   Wiadomości są przechowywane dla urządzeń, które są offline.
-   Gdy tylko urządzenie powróci do trybu online, serwery FCM przekazują wiadomość oczekującą w kolejce.
-   Wiadomości są odbierane na urządzeniu użytkownika i prezentowane zgodnie z implementacją specyficzną dla platformy.

Jak wysłać powiadomienie Firebase Push na Androida za pomocą PubNub
-------------------------------------------------------------------

Jeśli korzystasz z PubNub Real-time Messaging, już komunikujesz się w czasie rzeczywistym ze wszystkimi swoimi urządzeniami - ale jeśli chcesz wysyłać powiadomienia push dla natywnego systemu Android, FCM jest świetnym sprzymierzeńcem.[![Mobile Push Notification Powered By PubNub](https://images.ctfassets.net/3prze68gbwl1/asset-17suaysk1qa1jf1/eceb4bfec526edd82b8c9324bfd21c81/poweredbypubnub_325.gif "Mobile Push Notification Powered By PubNub")](https://pubnub.com/products/mobile-push-notifications/)

Jeśli twoja aplikacja jest przeznaczona na wiele platform, PubNub ułatwia ci życie, obsługując Apple Push Notification Service (APN) i Firebase po wyjęciu z pudełka. Nawet jeśli nie obsługujesz **jeszcze** wielu platform, korzystanie z obsługi PubNub dla FCM usprawni Twój kod dzięki wykorzystaniu jednego zestawu bibliotek dla PubNub Data Streams oraz powiadomień Firebase.

PubNub ma łatwą integrację z FCM. Kanał PubNub zastępuje serwery innych firm, które wysyłają powiadomienia do serwerów FCM Google. Każdy zarejestrowany punkt końcowy może wysyłać powiadomienia push do podłączonych urządzeń.

Pozwala to aplikacji na błyskawiczne wysyłanie powiadomień push do urządzeń zarejestrowanych na określonych kanałach. Łączy w sobie natywny interfejs Android Notification API firmy Google z siecią strumieni danych w czasie rzeczywistym PubNub. Powiadomienia push w czasie rzeczywistym będą natywnie rozumiane przez każde urządzenie z systemem Android. Jeśli masz już FCM w swojej aplikacji i rozważasz użycie PubNub, nie będziesz musiał prawie nic zmieniać w swojej aplikacji, najprawdopodobniej usuwając kod!

Wracając do scenariusza aplikacji z wiadomościami sportowymi, krytyk sportowy może wysłać wynik w czasie rzeczywistym ze swojego telefonu i uruchomić powiadomienie push na pozostałych urządzeniach odbiorców. PubNub sprawia, że jest to proste - dodatkowe serwery, które trzeba obsługiwać, można wykluczyć z równania i dzięki automatycznemu skalowaniu zarządzanemu przez PubNub!

Firebase Cloud Messaging (FCM) to rebranding Google Cloud Messaging (GCM) i nie ma żadnej funkcjonalnej różnicy w jego obsłudze w PubNub. FCM powinien być używany zamiast tego, jeśli widzisz odniesienia do GCM.

Pierwsze kroki z Firebase Push Notifications z PubNub
-----------------------------------------------------

Chcesz pobrać ukończony projekt powiadomień push Firebase? [https://github.com/PubNubDevelopers/Android-Push-Notifications](https://github.com/PubNubDevelopers/Android-Push-Notifications)

W tym samouczku utworzymy nową aplikację na Androida, skonfigurujemy powiadomienia push Firebase, włączymy mobilne powiadomienia push PubNub i skonfigurujemy [PubNub Android SDK](https://pubnub.com/docs/sdks/java/android/) do odbierania mobilnych powiadomień push. Najpierw musisz założyćzawsze darmowe [konto Pub](https://admin.pubnub.com/signup/?devrel_gh=android-push-notifications)Nub. Po zarejestrowaniu się utwórz nową aplikację, a następnie uzyskaj unikalne klucze PubNub z [panelu administracyjnego PubNub](https://pubnub.com//admin.pubnub.com/signup). Zapisz **klucz publikowania** i **klucz subskrypcji**, aby móc ich użyć później.

Utwórz nową aplikację na Androida
---------------------------------

Pomiń tę sekcję, jeśli masz już aplikację, której chcesz używać z FCM i PubNub.

Zainstaluj [Java SE Development Kit (JDK 8 lub nigdy)](https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html).

[Pobierz i zainstaluj Android](https://developer.android.com/studio/index.html) Studio.

W oknie Welcome to Android Studio kliknij "Start a new Android Studio project".

Ustaw nazwę aplikacji, domenę firmy i możesz zmienić lokalizację projektu. Jeśli chcesz napisać aplikację w Kotlin lub Flutter, zaznacz odpowiednie pole wyboru. Zanotuj nazwę pakietu, będziesz jej potrzebować później. Pozostałe opcje pozostaw bez zmian. Kliknij "Dalej".

[![Create New Android App](https://images.ctfassets.net/3prze68gbwl1/asset-17suaysk1qa1jf2/39e6d4ccae36799d6775028e5532dd8e/newapp-1024x749.png "Create New Android App")](https://developer.android.com/studio/index.html)

Ustaw minimalne SDK na "API23: Android 6.0 (Mashmallow)". Kliknij "Dalej".

Wybierz opcję "Empty Activity". Kliknij "Dalej". Zachowaj wartości domyślne i kliknij "Zakończ".

Dodawanie Firebase Cloud Messaging do tworzenia powiadomień w czasie rzeczywistym
---------------------------------------------------------------------------------

Utwórz lub zaloguj się do konta [Firebase](https://firebase.google.com/).

Kliknij "Dodaj projekt" w [konsoli Firebase](https://console.firebase.google.com/), aby utworzyć projekt Firebase.

[![Add Project to Firebase](https://images.ctfassets.net/3prze68gbwl1/asset-17suaysk1qa1jf3/b51dd4a3613381c59feacb5e4d70911e/addproject.png "Add Project to Firebase")](https://console.firebase.google.com/)

Ustaw nazwę projektu i lokalizacje.

[![Add a project to firebase ](https://images.ctfassets.net/3prze68gbwl1/asset-17suaysk1qa1jf4/9cb74ae2fc49d8e5626e2412f709aa3b/addaproject-907x1024.png "Add a project to firebase ")](https://console.firebase.google.com/)

Następnie dodaj firebase do aplikacji na Androida.

[![Add Firebase to App](https://images.ctfassets.net/3prze68gbwl1/asset-17suaysk1qa1jf5/45a880cdef449d6da23a28731da50105/addfirebasetoapp.png "Add Firebase to App")](https://console.firebase.google.com/)

Wprowadź nazwę pakietu i pseudonim dla swojej aplikacji. Nazwę pakietu aplikacji można znaleźć na górze pliku "android/app/src/main/java/com/\[YourAppName\]/MainApplication.java". Pomiń SHA-1 (nie jest potrzebny w tym samouczku). Kliknij "Zarejestruj aplikację".

Pobierz plik google-services.json do katalogu głównego modułu aplikacji na Androida. Nie dodawaj Firebase SDK. Przejdź do [konsoli Firebase](https://console.firebase.google.com/) i kontynuuj kroki w tym samouczku, aby dodać Firebase SDK i PubNub SDK do swojej aplikacji.

[![Download Config File For Android App](https://images.ctfassets.net/3prze68gbwl1/asset-17suaysk1qa1jf6/0f473a41a0b842d0a5c2f6c99788a495/download-config-file-for-android-app.png "Download Config File For Android App")](https://console.firebase.google.com/)

Przejdź do [panelu administracyjnego PubNub](https://pubnub.com//admin.pubnub.com/signup?devrel_gh=android-push-notifications), wybierz aplikację, a następnie wybierz zestaw kluczy.

Przewiń w dół do "Mobile Push Notifications", [włącz dodatek Push Notifications](https://support.pubnub.com/hc/en-us/articles/360051974791-How-do-I-enable-add-on-features-for-my-keys-) (jeśli nie został jeszcze włączony) i wprowadź klucz API dla właśnie utworzonej aplikacji w [konsoli](https://console.firebase.google.com/) Firebase. Możesz znaleźć swój klucz API (wymieniony jako klucz serwera w konsoli Firebase), przechodząc do "Przeglądu projektu" na lewym pasku bocznym, klikając przycisk menu kebob (**"⋮")**znajdujący się w prawym górnym rogu metryk aplikacji, klikając "Ustawienia" i wybierając kartę "Wiadomości w chmurze".

Konfiguracja FCM i PubNub dla mobilnych powiadomień push Firebase
-----------------------------------------------------------------

Edytuj plik build.gradle (<project>/build.gradle) na poziomie projektu i dodaj następujący wiersz:

```js
buildscript {
  dependencies {
    // Add this line
    classpath 'com.google.gms:google-services:4.0.1'
  }
}
```

Po jej dodaniu pojawi się żółty komunikat z prośbą o zsynchronizowanie projektu. Zignoruj go w tej chwili.

Edytuj plik build.gradle na poziomie aplikacji (<project>/<app-module>/build.gradle) i dodaj następujące elementy:

```js
dependencies {
  // Add this line.
  implementation 'com.google.firebase:firebase-core:16.0.1'
  // Firebase Messaging library for sending push notifications. Add this line.
  implementation 'com.google.firebase:firebase-messaging:17.3.3'
  // PubNub Android SDK. Add this line.
  implementation group: 'com.pubnub', name: 'pubnub-gson', version: '4.20.0'
}
...
// Add to the bottom of the file
apply plugin: 'com.google.gms.google-services'
```

Kliknij "Synchronizuj teraz" na pasku, który pojawi się w Android Studio.

[![Android Studio Sync Message](https://images.ctfassets.net/3prze68gbwl1/asset-17suaysk1qa1jf7/66be78ce887d2c92161fa5fbb11f2554/android_studio_sync.png "Android Studio Sync Message")](https://console.firebase.google.com/)

Edytuj plik MainActivity.java, aby zainicjować PubNub Android SDK. Musisz także utworzyć kanały powiadomień dla Android API poziomu 26+, aby wyświetlać powiadomienia push.

```js
package com.pubnub.hellopush;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.Context;
import android.graphics.Color;
import android.os.Build;
import com.pubnub.api.PNConfiguration;
import com.pubnub.api.PubNub;
public class MainActivity extends AppCompatActivity {
    public static PubNub pubnub; // PubNub instance
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initPubnub();
        createChannel();
    }
    // Creates PubNub instance with your PubNub credentials. https://admin.pubnub.com/signup
    // This instance will be used when we need to create connection to PubNub.
    private void initPubnub() {
        PNConfiguration pnConfiguration = new PNConfiguration();
        pnConfiguration.setPublishKey("YOUR_PUB_KEY_HERE");
        pnConfiguration.setSubscribeKey("YOUR_SUB_KEY_HERE");
        pnConfiguration.setSecure(true);
        pubnub = new PubNub(pnConfiguration);
    }
    // Creates notification channel.
    private void createChannel() {
        // Notification channel should only be created for devices running Android API level 26+. 
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
            NotificationChannel chan1 = new NotificationChannel(
                    "default",
                    "default",
                    NotificationManager.IMPORTANCE_NONE);
            chan1.setLightColor(Color.TRANSPARENT);
            chan1.setLockscreenVisibility(Notification.VISIBILITY_SECRET);
            notificationManager.createNotificationChannel(chan1);
        }
    }
}
```

Pobierz unikalne klucze PubNub z panelu administracyjnego [PubNub](https://pubnub.com//admin.pubnub.com/signup). Zastąp "YOUR\_PUB\_KEY\_HERE" i "YOUR\_SUB\_KEY\_HERE" kluczami z [panelu administracyjnego PubNub](https://admin.pubnub.com/login).

Musisz dodać usługę, aby uzyskać token urządzenia i metodę wysyłania tokena do serwera rejestracji (PubNub). Korzystając z PubNub Android SDK, należy powiązać kanał z tokenem rejestracyjnym. Aby móc przetwarzać komunikaty danych lub obsługiwać wyświetlanie komunikatów powiadomień na pierwszym planie, należy również dodać usługę, która rozszerza FirebaseMessagingService.

W eksploratorze projektu rozwiń katalogi "app > java > \[nazwa pakietu\]". Następnie kliknij prawym przyciskiem myszy i wybierz "New > Java Class". Nazwij klasę "MyFirebaseMessageService.Java".

```js
package com.pubnub.hellopush;
import android.util.Log;
import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;
import com.pubnub.api.callbacks.PNCallback;
import com.pubnub.api.enums.PNPushType;
import com.pubnub.api.models.consumer.PNStatus;
import com.pubnub.api.models.consumer.push.PNPushAddChannelResult;
import java.util.Arrays;
public class MyFirebaseMessagingService extends FirebaseMessagingService {
    private static final String TAG = "FirebaseService";
    @Override
    public void onNewToken(String token) {
        super.onNewToken(token);
        Log.d(TAG,"NEW_TOKEN: "+token);
        sendRegistrationToPubNub(token);
    }
    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        // If the application is in the foreground handle or display both data and notification FCM messages here.
        // Here is where you can display your own notifications built from a received FCM message.
        super.onMessageReceived(remoteMessage);
        Log.d(TAG, "From: " + remoteMessage.getFrom());
        if (remoteMessage.getData().size() > 0) {
            Log.d(TAG, "Message data payload: " + remoteMessage.getData());
        }
        if (remoteMessage.getNotification() != null) {
            Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
        }
        // displayNotification(remoteMessage.getNotification().getBody());
    }
    private void sendRegistrationToPubNub(String token) {
        // Configure PubNub mobile push notifications.
        MainActivity.pubnub.addPushNotificationsOnChannels()
            .pushType(PNPushType.GCM)
            .channels(Arrays.asList("HelloPush", "TestPushChannel"))
            .deviceId(token)
            .async(new PNCallback<PNPushAddChannelResult>() {
                @Override
                public void onResponse(PNPushAddChannelResult result, PNStatus status) {
                    Log.d("PUBNUB", "-->PNStatus.getStatusCode = " + status.getStatusCode());
                }
            });
    }
}
```

Dodaj klasę do pliku AndroidManifest.xml.

```js
<service android:name=".MyFirebaseMessagingService">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT"/>
    </intent-filter>
</service>
```

Dodaj te uprawnienia w pliku AndroidManifest.xml przed tagiem `<application>`.

```js
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
```

### Wysyłanie mobilnych powiadomień push z PubNub

Zbuduj i uruchom swoją aplikację na urządzeniu z systemem Android lub za pomocą emulatora Androida.

Możesz wysyłać mobilne powiadomienia push za pomocą PubNub, publikując wiadomość na kanale lub kanałach, do których dodano urządzenia. Ważne jest, aby pamiętać, że urządzenia nie muszą **subskrybować kanału, aby otrzymywać powiadomienia dla tego kanału**. Urządzenia muszą jedynie zarejestrować się w kanale dla powiadomień push, a następnie będą otrzymywać powiadomienia push dla wszystkich wiadomości, które mają klucze powiadomień push dla tego typu urządzenia.

[![PubNub Debug Client](https://images.ctfassets.net/3prze68gbwl1/asset-17suaysk1qa1jf8/a8b147f50bf2dd0d6ae393f422a17e4d/debugclient.png "PubNub Debug Client")](https://pubnub.com//admin.pubnub.com/signup)

-   Powiązane urządzenia FCM będą otrzymywać tylko dane w ramach klucza `pn_gcm`.
-   Natywni subskrybenci PubNub otrzymają cały dosłowny obiekt, w tym klucze powiadomień.

W tym samouczku urządzenie zostało zarejestrowane w kanale "Notifications". Wszelkie wiadomości wysyłane do tego kanału z kluczami `pn_gcm` będą wysyłane jako mobilne powiadomienia push do zarejestrowanych urządzeń.

Najprostszym sposobem na przetestowanie mobilnych powiadomień push jest wysłanie ich z PubNub Debug Console z poziomu [panelu administracyjnego PubNub](https://pubnub.com//admin.pubnub.com/signup?devrel_gh=android-push-notifications).

Przejdź do [pulpitu administr](https://pubnub.com//admin.pubnub.com/signup?devrel_gh=android-push-notifications)atora PubNub, wybierz aplikację, a następnie wybierz zestaw kluczy.

Kliknij "Debug Console" i utwórz klienta z "Default Channel" ustawionym na `Notifications`.

Za pomocą właśnie utworzonego klienta możesz wysłać powiadomienie na swoje urządzenie, wysyłając wiadomość zawierającą klucze `pn_gcm`.

Wyślij powiadomienie Android push za pomocą klucza `powiadomienia`:

```js
{"pn_gcm":{"notification":{"body":"Hello World."}}}
```

![Hello World Android Push Notification](https://images.ctfassets.net/3prze68gbwl1/asset-17suaysk1qa1jf0/2c03580d2163ac7ca6c86e1b85104d00/helloworld_short.gif "Hello World Android Push Notification")Zapoznaj się z [przewodnikiem rozwiązywania problemów](https://support.pubnub.com/hc/en-us/articles/360051495432-How-can-I-troubleshoot-my-push-notification-issues-), jeśli masz problemy z wysyłaniem mobilnych powiadomień push.

#### Spis treści

[Omówienie sposobu wysyłania powiadomień Firebase Push na Androida za pomocą FCMJak](#h-0)[wysłać powiadomienie Firebase Push na Androida za pomocą Pub](#h-1)NubPoczątek[korzystania z powiadomień Firebase Push za pomocą PubNubUtwórz](#h-2)[nową aplikację na AndroidaDodanie](#h-3)[Firebase Cloud Messaging do tworzenia powiadomień w czasie rzeczywistymKonfiguracja](#h-4)[FCM i PubNub dla mobilnych powiadomień Firebase PushWysyłanie](#h-5) mobilnych[powiadomień Push z PubNub](#h-6)

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

Ten artykuł został pierwotnie opublikowany na [PubNub.com](https://www.pubnub.com/blog/sending-android-mobile-push-notifications-firebase-cloud-messaging-pubnub/)

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

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

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

Sprawdź [Live Tour](https://www.pubnub.com/tour/introduction/), aby zrozumieć podstawowe koncepcje każdej aplikacji opartej na PubNub w mniej niż 5 minut.

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

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

Rozpocznij
----------

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