Twoja pierwsza wiadomość push typu multicast wykorzystująca tematy FCM

1. Wstęp

Cele

W tych ćwiczeniach z programowania dowiesz się, jak instrumentować aplikację wieloplatformową, aby móc multiemisować wiadomości push do różnych podgrup instancji aplikacji, korzystając z tematów FCM.

Po zakończeniu będziesz mógł wykorzystać infrastrukturę FCM do zarządzania tymi podgrupami, a także wiadomościami typu push multiemisji w podgrupach.

Przegląd tematów

Tematy to obsługiwany przez infrastrukturę FCM sposób docierania z wiadomościami do podgrup instancji aplikacji.

FCM udostępnia interfejsy API umożliwiające wysyłanie wiadomości i utrzymywanie subskrypcji tych tematów. Czynność kojarzenia i odłączania instancji aplikacji od tematu nazywa się odpowiednio subskrybowaniem i anulowaniem subskrypcji

Tematy powinny być wykorzystywane w treściach dostępnych publicznie. Na przykład wiadomości o aktualizacjach pogody. Jeśli chcesz wysyłać wiadomości wrażliwe na użytkownika, użyj pakietu Firebase Admin SDK do multiemisji wiadomości na wielu urządzeniach .

Rozsyłanie grupowe oparte na tematach jest zoptymalizowane pod kątem przepustowości.

Czego się dowiesz

  • Jak subskrybować (i anulować subskrypcję) użytkowników tematów z aplikacji mobilnej.
  • Jak wysyłać wiadomości push w trybie multiemisji za pomocą tematów.
  • Jak wysyłać wiadomości do kombinacji tematów przy użyciu warunków tematu.
  • Jak zarządzać subskrypcjami tematów po stronie serwera oraz wykonywać masowe subskrypcje i rezygnacje z subskrypcji.

Co zbudujesz

  • Aplikacja na Androida, która subskrybuje/rezygnuje z subskrypcji tematów i odbiera wiadomości po wysłaniu do tematów.
  • Integracja po stronie serwera przy użyciu pakietu Firebase Admin SDK, który będzie używany do wysyłania wiadomości tematycznych za pośrednictwem interfejsów API FCM.

Co będziesz potrzebował

  • Wybrana przeglądarka, np. Chrome.
  • IntelliJ IDEA IDE do tworzenia aplikacji Java.
    • Pamiętaj, aby podczas instalacji włączyć obsługę Gradle.
  • Android Studio IDE do tworzenia aplikacji na Androida.
  • Urządzenie umożliwiające uruchomienie aplikacji na system Android. Albo z:
    • Emulator Androida. (Wymaga konfiguracji w Android Studio ).
    • Fizyczne urządzenie z Androidem podłączone do komputera i ustawione w trybie programisty.
  • Konto Google do tworzenia projektu Firebase i zarządzania nim.

2. Przygotowanie do pracy

Zdobądź kod

Sklonuj repozytorium GitHub z wiersza poleceń:

git clone https://github.com/firebase/quickstart-android.git fcm-codelab

Przykładowy kod zostanie sklonowany do katalogu fcm-codelab .

cd fcm-codelab

Aplikacja startowa dla tego ćwiczenia z programowania znajduje się w katalogu messaging gałęzi fcm-topics-codelab . Wykonaj poniższe kroki, aby uzyskać kod startowy. Zawiera dwa katalogi StockNewsApp i StockNewsServer . Pierwsza zawiera startową aplikację na Androida, a druga zawiera kod po stronie serwera startowego.

git checkout fcm-topics-codelab
cd messaging/fcm-topics-codelab/starter

Ukończona wersja tego ćwiczenia z programowania znajduje się w katalogu messaging/fcm-topics-codelab/completed .

Utwórz projekt Firebase

  1. W konsoli Firebase kliknij Dodaj projekt , nazwij projekt Firebase StockNews i kliknij Kontynuuj. Uwaga: Zapamiętaj identyfikator projektu Firebase (lub kliknij ikonę Edytuj , aby ustawić preferowany identyfikator projektu).

fc08f9a7808e4553.png

  1. Możesz pominąć włączanie Google Analytics. Na potrzeby tego ćwiczenia z programowania nie jest to potrzebne. Kliknij Kontynuuj.
  2. Kliknij opcję Utwórz projekt .

Gratulacje! Właśnie utworzyłeś projekt Firebase. Teraz możesz kliknąć nazwę projektu, aby wejść do konsoli.

3. Konfiguracja aplikacji Firebase specyficzna dla platformy

Większość zmian w kodzie wymaganych do włączenia obsługi Firebase została już włączona do projektu, nad którym pracujesz. Aby jednak dodać obsługę platform mobilnych należy:

  • Zarejestruj żądaną platformę w projekcie Firebase
  • Pobierz plik konfiguracyjny specyficzny dla platformy i Dodaj go do kodu.

Na potrzeby tego ćwiczenia z programowania dodamy aplikację Firebase na Androida.

84e0b3199bef6d8a.png Skonfiguruj Androida

  1. W konsoli Firebase wybierz Ustawienia projektu w górnej części lewego paska nawigacyjnego w trybie Ustawienia i kliknij ikonę Androida w obszarze Twoje aplikacje na stronie Ogólne .

Powinieneś zobaczyć następujące okno dialogowe: 8254fc299e82f528.png

  1. Ważną wartością, którą należy podać, jest nazwa pakietu Androida . Ustaw go na com.ticker.stocknews .
    1. Podana tutaj nazwa pakietu musi być taka sama, jak nazwa podana w pliku AndroidManifest.xml początkowego kodu StockNewsApp . Jeśli chcesz go zlokalizować lub zmienić, wykonaj następujące kroki:
      1. W katalogu StockNewsApp otwórz plik app/src/main/AndroidManifest.xml .
      2. W elemencie manifest znajdź wartość ciągu atrybutu package . Ta wartość to nazwa pakietu Androida.
  1. W oknie dialogowym Firebase wklej skopiowaną nazwę pakietu w polu nazwy pakietu Android .
  2. Do tego ćwiczenia z programowania nie potrzebujesz certyfikatu podpisywania debugowania SHA-1 , ponieważ ta aplikacja nie zostanie wydana. Zostaw to puste.
  3. Kliknij opcję Zarejestruj aplikację .
  4. Kontynuując w konsoli Firebase, postępuj zgodnie z instrukcjami, aby pobrać plik konfiguracyjny google-services.json .
  5. Możesz pominąć pozostałe kroki konfiguracji, ponieważ wszystko inne jest już skonfigurowane w kodzie aplikacji startowej. Znajdziesz swoją aplikację na liście na stronie głównej konsoli Firebase.
  6. Skopiuj plik google-services.json (który właśnie pobrałeś) do katalogu messaging/fcm-topics-codelab/starter/StockNewsApp/app .

4. Zbuduj i uruchom swoją aplikację

Jesteś gotowy, aby faktycznie rozpocząć pracę nad swoją aplikacją! Najpierw skompiluj i uruchom aplikację.

Zaimportuj aplikację startową

Uruchom Android Studio i zaimportuj messaging/fcm-topics-codelab/starter/StockNewsApp z katalogu kodu startowego.

Po załadowaniu projektu możesz także zobaczyć alert, że Git nie śledzi wszystkich lokalnych zmian. Możesz kliknąć „ Ignoruj ” lub „ X ” w prawym górnym rogu. (Nie będziesz wypychać żadnych zmian z powrotem do repozytorium Git.)

Jeśli korzystasz z widoku Androida , w lewym górnym rogu okna projektu powinieneś zobaczyć coś takiego jak na obrazku poniżej. (Jeśli jesteś w widoku projektu , będziesz musiał rozwinąć projekt, aby zobaczyć to samo)

b574ea0089ee87c6.png

Należy pamiętać, że kompilacja projektu w tle po raz pierwszy w Android Studio może zająć kilka sekund. W tym czasie na pasku stanu u dołu Android Studio zobaczysz pokrętło:

4bc64eb3b99eb0ae.png

Zalecamy zaczekanie do zakończenia tej operacji przed wprowadzeniem zmian w kodzie. Umożliwi to Android Studio pobranie wszystkich niezbędnych komponentów.

Ponadto, jeśli zostanie wyświetlony monit „Załaduj ponownie, aby zmiany językowe zaczęły obowiązywać?” lub coś podobnego, wybierz „Tak”.

Konfiguracja emulatora

Jeśli potrzebujesz pomocy w skonfigurowaniu emulatora Androida, zapoznaj się z artykułem Uruchamianie aplikacji .

Zapoznaj się z kodem startowym aplikacji na Androida

f04ff8f48d186dff.png

  • W pliku AndroidManifest.xml dodano już procedurę obsługi wywołania zwrotnego MESSAGING_EVENT .
    • Ten moduł obsługi, StockNewsMessagingService.java , stanowi rozszerzenie klasy FirebaseMessagingService , która zapewnia różne funkcje związane z Firebase Cloud Messaging. Aby dowiedzieć się więcej, zobacz dokumentację FirebaseMessagingService . b843c4d33ee53166.png
    88fad1960f4a6ff5.png
    • Funkcja onNewToken jest wywoływana po utworzeniu lub odświeżeniu tokenu rejestracji FCM. Aby uzyskać więcej informacji, zobacz Monitorowanie generowania tokenów .
    • Funkcja onMessageReceived jest wywoływana po odebraniu wiadomości i aplikacji na pierwszym planie. Obecnie po prostu rejestruje otrzymaną wiadomość.
  • Ponadto w AndroidManifest.xml dostępna jest także klasa Application dla systemu Android o nazwie StockNewsApplication . a4982a8731492dfc.pngccde692f7f68dc5a.png
    • Ta klasa będzie pierwszą instancją, która zostanie utworzona podczas uruchamiania aplikacji.
    • W funkcji onCreate klasy StockNewsApplication dodano wywołanie tworzenia tokenu rejestracji FCM. Wygeneruje prawidłowy token rejestracyjny FCM i zarejestruje go.
  • Plik MainActivity.java dodaje RecyclerView , który wyświetla wybrane kategorie zapasów.
  • SubscriptionAdapter.java implementuje RecyclerView.Adapter , który rysuje ekran wyboru kategorii zapasów.
    • Obok każdej kategorii Stock znajduje się nazwa i przełącznik subskrypcji.
    • Zmiana przełącznika powinna spowodować wywołanie subskrypcji/rezygnacji z subskrypcji tematu FCM.
    • Zaimplementujesz te wezwania w nadchodzących sekcjach.
  • Klasa model/StockCategories.java zawiera listę wszystkich kategorii Stock i powiązanych z nimi nazw tematów.

b32663ec4e865a18.png

Uruchom aplikację startową

  1. Podłącz urządzenie z Androidem do komputera lub uruchom emulator.
  2. Na górnym pasku narzędzi wybierz docelowe urządzenie z Androidem lub emulator i naciśnij przycisk Uruchom.

5b27fc5b237e06b9.png

  1. Interfejs aplikacji będzie wyglądał następująco:

ff5b1a1c53231c54.png

  1. Aplikacja utworzy token rejestracyjny FCM i zarejestruje go. Jednak nic nie zmieni się w interfejsie aplikacji.
    1. Skopiuj i zapisz token rejestracyjny FCM, ponieważ będzie on używany w kolejnych krokach.

927eb66bc909f36b.png

5. Wyślij wiadomość testową

Teraz możesz wysłać wiadomość testową do instancji aplikacji skonfigurowanej w ostatnim kroku.

Zaimportuj kod serwera startowego

Uruchom IntelliJ IDEA i otwórz projekt messaging/fcm-topics-codelab/starter/StockNewsServer .

Widok projektu na lewym pasku nawigacyjnym powinien wyglądać mniej więcej tak:

da20711f6527dff6.png

Uwaga: zbudowanie projektu przez IntellIj IDEA, łącznie z pobraniem wymaganych zależności, może zająć kilka minut.

Zapoznaj się z kodem startowym serwera

  • Kod startowy serwera to projekt Java oparty na Gradle.
  • Plik build.gradle ma już dodaną zależność od pakietu SDK firebase-admin . Ten zestaw SDK zapewnia dostęp do różnych funkcji wysyłania komunikatów FCM.

650fc733298588f8.png

  • Wreszcie istnieją dwie klasy, a mianowicie:
    • FcmSender.java : Ta klasa zawiera następujące metody notowania:
      • initFirebaseSDK : Inicjuje zestaw SDK administratora Firebase.
      • sendMessageToFcmRegistrationToken : wyślij wiadomość do tokena rejestracji FCM.
      • sendMessageToFcmTopic : wyślij wiadomość do tematu FCM.
      • sendMessageToFcmTopicCondition : wysyła wiadomość do warunku tematu FCM.
    • FcmSubscriptionManager.java : Ta klasa zawiera metody umożliwiające zarządzanie subskrypcjami tematów ze strony serwera.
      • initFirebaseSDK : Inicjuje zestaw SDK administratora Firebase.
      • subscribeFcmRegistrationTokensToTopic : subskrybuj tokeny rejestracyjne FCM do tematu FCM.
      • unsubscribeFcmRegistrationTokensFromTopic : anuluj subskrypcję Tokenów rejestracyjnych FCM z tematu FCM.

Konfiguracja kodu serwera

  1. Najpierw musimy skonfigurować konto usługi Firebase, które umożliwi pakietowi SDK Firebase-admin autoryzację wywołań interfejsów API FCM.
    1. Przejdź do konsoli Firebase, kliknij ikonę koła zębatego obok Przeglądu projektu na lewym pasku nawigacyjnym i wybierz Ustawienia projektu . 8c2108d4d7c915e9.png
    2. Na stronie ustawień wybierz Konta usług i kliknij Utwórz konto usługi . 84b128cc5dac0a85.png
    3. Teraz kliknij przycisk Wygeneruj nowy klucz prywatny i rozpocznie się automatyczne pobieranie pliku klucza.
    4. Zmień nazwę pliku klucza na service-account.json i skopiuj go do folderu messaging/fcm-topics-codelab/starter/StockNewsServer/src/main/resources .
    5. Zarówno FcmSender.java jak i FcmSubscriptionManager.java ładują plik service-account.json ze ścieżki klasy, używając następującego kodu. 8dffbee658e0bdd.png
  2. W tym momencie kod serwera jest gotowy. Uruchom Build -> Build Project z górnego paska menu.

Wysyłanie wiadomości testowej

  1. W FcmSender.java zlokalizuj funkcję sendMessageToFcmRegistrationToken i wstaw token rejestracyjny FCM skopiowany z sekcji Uruchom aplikację startową w polu registrationToken .
  2. W funkcji main odkomentuj tylko funkcję sendMessageToFcmRegistrationToken i kliknij Uruchom, aby wykonać kod.
    1. Obserwuj, jak token rejestracyjny FCM jest ustawiony w polu Token obiektu message .
    2. Ponadto zwróć uwagę, jak wykorzystaliśmy API send interfejsu FirebaseMessaging .

52e4a3ec3f816473.png

  1. Powinno to wysłać wiadomość do instancji aplikacji skonfigurowanej w poprzednim kroku.
  2. Gdy instancja aplikacji znajduje się na pierwszym planie, powinna zostać wyświetlona zarejestrowana treść wiadomości.

d3540ec1089f97dd.png

  1. A gdy instancja aplikacji działa w tle, na pasku powiadomień pojawi się komunikat.

31203deca59c03fe.png

Świetnie, użyłeś pakietu Firebase Admin SDK do wysyłania wiadomości do instancji aplikacji. Przeczytaj więcej na temat używania pakietu Firebase Admin SDK na swoim serwerze .

6. Zaimplementuj subskrypcję / rezygnację z subskrypcji tematu

Na tym etapie zaimplementujesz akcje subskrypcji i anulowania subskrypcji tematu za pomocą przełącznika kategorii Stock w aplikacji na Androida.

Gdy użytkownik aplikacji przełączy przełącznik dla określonej kategorii akcji, zostanie wykonane połączenie tematyczne dotyczące subskrypcji lub rezygnacji z subskrypcji.

Przejrzyj kod

  • Przejdź do klasy SubscriptionAdapter.java w kodzie aplikacji dla systemu Android i znajdź klasę RecyclerViewViewHolder .

6c0614199e684f6.png

  • Konstruktor klasy konfiguruje odbiornik dla przełącznika subskrypcji za pomocą setOnCheckedChangeListener .
  • W zależności od przełącznika akcje subskrypcji i anulowania subskrypcji są wykonywane poprzez wywołanie odpowiednio metod subscribeToStockCategory i unsubscribeFromStockCategory .
  • Metoda setData jest wywoływana przez metodę onBindViewHolder adaptera RecyclerView w celu powiązania obiektu ViewHolder z odpowiednią kategorią zapasów.

Zaimplementuj subskrypcję tematów

  1. W metodzie subscribeToStockCategory zaimplementujesz wywołanie API subscribeToTopic obiektu FirebaseMessaging . Kod mógłby wyglądać mniej więcej tak:
   void subscribeToStockCategory() {
      // Making call to FCM for subscribing to the topic for stockCategory
     FirebaseMessaging.getInstance().subscribeToTopic(stockCategory.getTopicName()).addOnSuccessListener(
          unused -> {
            // Subscribing action successful
            Log.i(TAG, "Subscribed to topic: " + stockCategory.getTopicName());
            Toast.makeText(itemView.getContext(), "Subscribed to " + stockCategory.getCategoryName(),
                Toast.LENGTH_SHORT).show();
          });
    }

Zaimplementuj anulowanie subskrypcji tematu

  1. Podobnie w warunku else zaimplementujesz wywołanie API unsubscribeFromTopic . Coś w tym stylu:
void unsubscribeFromStockCategory() {
      // Making call to FCM for unsubscribing from the topic for stockCategory
      FirebaseMessaging.getInstance().unsubscribeFromTopic(stockCategory.getTopicName())
          .addOnSuccessListener(unused -> {
            // Unsubscribing action successful
            Log.i(TAG, "Unsubscribed from topic: " + stockCategory.getTopicName());
            Toast.makeText(itemView.getContext(), "Unsubscribed from " + stockCategory.getCategoryName(),
                Toast.LENGTH_SHORT).show();
          });
    }

Wypróbujmy to

  1. Uruchom aplikację i przełącz opcje kategorii zapasów, aby wykonać akcje Subskrybuj i Anuluj subskrypcję. Wyglądałoby to mniej więcej tak:

Subskrybuj

Zrezygnuj z subskrypcji

7. Wysyłanie pierwszej wiadomości tematycznej

W tym kroku zaimplementujesz kod po stronie serwera, aby wysłać wiadomość tematu FCM.

Zaimplementuj integrację po stronie serwera w celu wysyłania wiadomości tematycznych

  1. W kodzie serwera przejdź do FcmSender.java i znajdź metodę o nazwie sendMessageToFcmTopic .

56381dd1b40cde9c.png

  1. W pierwszej linii podaj Temat FCM, do którego chcesz wysłać wiadomość.
    • Jest to ciąg znaków w postaci: /topics/<Topic Name> . Na przykład /topics/Technology .
  2. W kolejnych wierszach utwórz nowy obiekt message (podobny do tego zdefiniowanego w funkcji sendMessageToFcmRegistrationToken ).
    • Różnica polega na tym, że zamiast ustawiać pole Token obiektu message , ustawisz pole Topic .
Message message = Message.builder()
        .putData("FOOTECH", "$1000")
        .setNotification(
            Notification.builder()
                .setTitle("Investor confidence in Tech Stocks growing")
                .setBody("Foo Tech leading the way in stock growth for Tech sector.")
                .build())
        .setTopic(topicName)
        .build();
  1. Teraz dodaj wywołanie do instancji FirebaseMessaging , aby wysłać wiadomość (identyczne z wywołaniem send wykonanym w funkcji sendMessageToFcmRegistrationToken ).
FirebaseMessaging.getInstance().send(message);
  1. Na koniec zaktualizuj funkcję main i włącz wywołanie tylko funkcji sendMessageToFcmTopic .

9a6aa08dd7c28898.png

Wyślij wiadomość i potwierdź odbiór

  1. Przed wysłaniem wiadomości dotyczącej tematu upewnij się, że instancja aplikacji subskrybuje temat, do którego chcesz wysłać wiadomość.
    1. Można to zrobić za pomocą odpowiedniego przełącznika. Na przykład:
    4668247408377712.png
  2. Możesz teraz wysłać wiadomość tematyczną, wykonując main funkcję FcmSender.java .
  3. Podobnie jak poprzednio, powinieneś móc obserwować otrzymanie wiadomości w instancji aplikacji.
    1. Instancja aplikacji na pierwszym planie
    c144721399f610fe.png
    1. Instancja aplikacji w tle
    44efc7dfd57e8e9a.png
  4. Bonus: Spróbuj anulować subskrypcję tematu, do którego wysłałeś, i wyślij wiadomość ponownie. Można zauważyć, że wiadomość nie jest dostarczana do instancji aplikacji.

8. Wysyłanie pierwszej wiadomości o stanie tematu

Funkcja warunku tematu umożliwia wysyłanie wiadomości do kombinacji tematów, co pozwala na bardziej wyraziste zdefiniowanie odbiorców.

Na przykład w naszej aplikacji StockNews rozważ możliwość wysyłania wiadomości do grupy aplikacji, które subskrybują tematy dotyczące technologii lub motoryzacji. Taki przypadek może mieć miejsce na przykład w przypadku godnego uwagi wydarzenia z udziałem Waymo.

Tematy umożliwiają wyrażenie kombinacji w formie wyrażenia logicznego za pomocą następujących operatorów

  • && : Logiczne AND. Na przykład 'Technology' in topics && 'Automotive' in topics — kieruje reklamy tylko na instancje aplikacji, które subskrybują zarówno tematy dotyczące technologii, jak i motoryzacji.
  • || : Logiczne LUB. Na przykład 'Technology' in topics || 'Automotive' in topics — dotyczy instancji aplikacji, które subskrybują tematy Technologia lub Motoryzacja.
  • (): Nawiasy do grupowania. Na przykład 'Technology' in topics && ('Automotive' in topics || 'Energy' in topics) — kieruje reklamy tylko na instancje aplikacji, które subskrybują tematy Technologia oraz Motoryzacja lub Energia.

Przeczytaj więcej o tym, jak tworzyć żądania wysłania umożliwiające korzystanie z tej funkcjonalności.

Zaimplementuj integrację po stronie serwera w celu wysyłania wiadomości o stanie tematu

  1. Wróć do kodu serwera, przejdź do FcmSender.java i znajdź metodę o nazwie sendMessageToFcmTopicCondition .

3719a86c274522cf.png

  1. W pierwszym wierszu zmiennej topicCondition podaj warunek tematu, do którego chcesz wysłać wiadomość. Możesz ustawić na: 'Technology' in topics && 'Automotive' in topics .
  2. W kolejnych wierszach utwórz nowy obiekt message (podobny do tego zdefiniowanego w funkcji sendMessageToFcmTopic ).
    1. Różnica polega na tym, że zamiast ustawiać pole Topic obiektu, ustawisz pole Condition .
    Message message = Message.builder()
        .putData("FOOCAR", "$500")
        .setNotification(
            Notification.builder()
                .setTitle("Foo Car shows strong Q2 results")
                .setBody("Foo Car crosses 1B miles. Stocks rally.")
                .build())
        .setCondition(topicCondition)
        .build();
  1. Teraz dodaj wywołanie do instancji FirebaseMessaging , aby wysłać wiadomość (identycznie z wywołaniem send wykonanym w funkcji sendMessageToFcmTopic ).
FirebaseMessaging.getInstance().send(message);
  1. Na koniec zaktualizuj funkcję main i włącz wywołanie tylko funkcji sendMessageToFcmTopicCondition .

db9588d40d2a0da6.png

Wyślij wiadomość i potwierdź otrzymanie

  1. Przed wysłaniem wiadomości tematu najpierw upewnij się, że instancja aplikacji spełnia określony warunek tematu, subskrybując instancję aplikacji zarówno w temacie Technologia, jak i Motoryzacja.
  2. Możesz teraz wysłać wiadomość tematyczną, wykonując main funkcję FcmSender.java .
  3. Podobnie jak poprzednio, powinieneś być w stanie obserwować otrzymanie wiadomości w instancji aplikacji.
    1. Instancja aplikacji na pierwszym planie
    6f612ace15aa6515.png
    1. Instancja aplikacji w tle
    78044a56ac2359cb.png
  4. Bonus: Możesz teraz zrezygnować z subskrypcji tematu Technologia i ponownie wysłać wiadomość o stanie tematu. Należy zauważyć, że instancja aplikacji nie odebrała wiadomości.

9. Podsumowanie

Zróbmy krótkie podsumowanie tego, czego nauczyłeś się do tego momentu.

  • Jak zainicjować subskrypcję/rezygnację z subskrypcji tematu z instancji aplikacji.
  • Wysłanie wiadomości do tematu i weryfikacja odbioru na subskrybowanych instancjach aplikacji.
  • Wysyłanie wiadomości do tematu Warunek i weryfikacja odbioru w instancji aplikacji, która spełnia warunek.

W następnej sekcji dowiesz się, jak subskrybować/wypisywać instancje aplikacji do tematów bez konieczności tworzenia instancji połączeń po stronie klienta.

c0dc20655d392690.gif

10. Zarządzaj subskrypcjami tematów ze strony serwera

Do tej pory w tych ćwiczeniach z programowania wszystkie wywołania dotyczące subskrypcji i anulowania subskrypcji są inicjowane z instancji aplikacji.

Jednak w niektórych przypadkach możesz chcieć zarządzać subskrypcjami tematów po stronie serwera. Na przykład możesz chcieć subskrybować podgrupę istniejącej bazy użytkowników do nowego tematu, nie czekając na wdrożenie aplikacji.

W tej sekcji dowiesz się, jak używać pakietu Firebase Admin SDK do subskrybowania i wypisywania partii tokenów rejestracji FCM do tematu, wykonując wywołania po stronie serwera.

Zaimplementuj subskrypcję po stronie serwera tokenów rejestracyjnych FCM w temacie FCM

  1. W kodzie serwera przejdź do klasy FcmSubscriptionManager.java . Znajdź metodę o nazwie subscribeFcmRegistrationTokensToTopic . Tutaj zaimplementujesz wywołanie API subscribeToTopic .

5d5709e7b3cbcb04.png

  1. Subskrybujmy instancję aplikacji do tematu Energia. W tym celu należy najpierw podać dane w dwóch polach:
    1. registrationTokens : rozdzielona przecinkami lista ciągów znaków reprezentujących tokeny rejestracyjne FCM, dla których chcesz utworzyć subskrypcje tematyczne.
    2. topicName : nazwa tematu Energia, np. /topics/Energy .
  2. W kolejnych kilku wierszach zaimplementuj wywołanie w następujący sposób:
TopicManagementResponse response = FirebaseMessaging.getInstance().subscribeToTopic(
        registrationTokens, topicName);
  1. Możesz sprawdzić odpowiedź TopicManagementResponse pod kątem niektórych statystyk wyników wysokiego poziomu. Na przykład wydrukowanie liczby pomyślnie utworzonych subskrypcji tematów za pomocą metody getSuccessCount .
System.out.printf("Num tokens successfully subscribed %d", response.getSuccessCount());
  1. Na koniec w funkcji main włącz wywołania tylko funkcji subscribeFcmRegistrationTokensToTopic .

Utwórz subskrypcję i wyślij wiadomość tematyczną

  1. W tym momencie możesz już utworzyć subskrypcję tematu i wysłać do niego wiadomość.
  2. Wykonaj main funkcję klasy FcmSubscriptionManager.java . Spowoduje to utworzenie subskrypcji tematu.
  3. Teraz skonfiguruj kod, aby wysłać wiadomość. Podobnie jak poprzednio,
    1. W pliku FcmSender.java znajdź funkcję sendMessageToFcmTopic .
    2. Ustaw topicName na temat Energia, np. /topics/Energy .
    3. Utwórz obiekt Message i skieruj go na temat za pomocą setTopic .
    4. Na koniec zaktualizuj metodę main , aby włączyć tylko funkcję sendMessageToFcmTopic .
  4. Wykonaj main funkcję FcmSender.java . Spowoduje to wysłanie wiadomości do instancji Twojej aplikacji i możesz ją obserwować w swojej aplikacji w następujący sposób.
    1. Instancja aplikacji na pierwszym planie
    40ab6cf71e0e4116.png
    1. Instancja aplikacji w tle
    8fba81037198209e.png

Zaimplementuj rezygnację z subskrypcji tokenów rejestracyjnych FCM po stronie serwera do tematu FCM

  1. W przypadku anulowania subskrypcji tematów po stronie serwera użyj tego interfejsu API unsubscribeFromTopic . Dodasz odpowiedni kod do funkcji unsubscribeFcmRegistrationTokensFromTopic klasy FcmSubscriptionManager.java .

8d9e8ea9d34016bd.png

  1. Zaimplementowanie kodu rezygnacji z subskrypcji po stronie serwera i sprawdzenie jego efektu poprzez wysłanie wiadomości tematycznej pozostawiamy jako ćwiczenie dla Ciebie.

11. Gratulacje

Gratulacje, pomyślnie wykorzystałeś tematy FCM do wysyłania wiadomości multiemisji do podgrup instancji aplikacji. Dzięki temu łatwiej będzie Ci docierać do użytkowników z odpowiednią treścią.

947def3eb33b1e4a.gif

Co dalej?

Po ukończeniu ćwiczeń z kodowania rozważ wypróbowanie tematów dla innych platform, korzystając z następujących przewodników:

Dokumenty referencyjne