Pierwsza wiadomość push multiemisji wykorzystująca tematy FCM

1. Wprowadzenie

Cele

Z tego ćwiczenia w Codelabs dowiesz się, jak przygotować wieloplatformową aplikację, aby wysyłać wiadomości push do różnych podgrup instancji aplikacji za pomocą tematów FCM.

Po zakończeniu możesz wykorzystać infrastrukturę FCM do zarządzania tymi podgrupami, a także grupowych komunikatów push w podgrupach.

Omówienie tematów

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

FCM udostępnia interfejsy API umożliwiające wysyłanie wiadomości i utrzymywanie subskrypcji tych tematów. Powiązanie i usunięcie powiązania instancji aplikacji z tematem jest nazywane odpowiednio subskrybowaniem i anulowaniem subskrypcji

Tematy powinny być używane w przypadku treści dostępnych publicznie. Dotyczy to na przykład wiadomości o pogodzie. Jeśli chcesz wysyłać wiadomości poufne do użytkowników, użyj pakietu Firebase Admin SDK do grupowania wiadomości na wielu urządzeniach.

Multicasting oparty na tematach jest zoptymalizowany pod kątem przepustowości.

Czego się nauczysz

  • Jak subskrybować tematy (i anulować ich subskrypcję) w aplikacji mobilnej.
  • Jak wysyłać wiadomości push w trybie multicast za pomocą tematów.
  • Jak wysyłać wiadomości do kombinacji tematów przy użyciu warunków dotyczących tematów.
  • Jak zarządzać subskrypcjami tematów po stronie serwera oraz zbiorczo dokonywać i anulować subskrypcje.

Co utworzysz

  • Aplikacja na Androida, która subskrybuje tematy lub anuluje ich subskrypcję i odbiera wiadomości wysłane do tych tematów.
  • integrację po stronie serwera przy użyciu pakietu SDK Firebase Admin, która będzie używana do wysyłania wiadomości tematycznych przez interfejsy FCM API;

Czego potrzebujesz

  • wybraną przeglądarkę, na przykład Chrome;
  • IntelliJ IDEA IDE do tworzenia aplikacji w Javie.
    • Podczas instalacji pamiętaj, aby włączyć obsługę Gradle.
  • IDE Android Studio do tworzenia aplikacji na Androida.
  • Urządzenie, na którym chcesz uruchomić aplikację na Androida. Jeden z następujących:
    • 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

Pobierz kod

Sklonuj repozytorium GitHub, używając wiersza poleceń:

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

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

cd fcm-codelab

Aplikacja startowa tego ćwiczenia w programie znajduje się w katalogu messaging gałęzi fcm-topics-codelab. Aby uzyskać kod startowy, wykonaj te czynności. Zawiera 2 katalogi: StockNewsApp i StockNewsServer. Pierwszy z nich zawiera początkową aplikację na Androida, a drugi zawiera kod startowy po stronie serwera.

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

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

Tworzenie projektu Firebase

  1. W konsoli Firebase kliknij Dodaj projekt, nadaj projektowi Firebase nazwę StockNews i kliknij Dalej. Uwaga: zapamiętaj identyfikator swojego 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 ono potrzebne. Kliknij Dalej.
  2. Kliknij Utwórz projekt.

Gratulacje! Twój projekt Firebase został właśnie utworzony. Teraz możesz kliknąć nazwę projektu, aby otworzyć konsolę.

3. Konfiguracja aplikacji Firebase na poziomie platformy

Większość zmian w kodzie wymaganych do włączenia obsługi Firebase jest już wprowadzanych w projekcie, nad którym pracujesz. Aby jednak dodać obsługę platform mobilnych, musisz:

  • Zarejestruj odpowiednią platformę w projekcie Firebase
  • Pobierz plik konfiguracji określonej platformy i dodaj go do kodu.

Na potrzeby tego ćwiczenia w programie dodamy aplikację Firebase na Androida.

84e0b3199bef6d8a.pngSkonfiguruj Androida

  1. W konsoli Firebase u góry lewego paska nawigacyjnego po lewej stronie kliknij Ustawienia, a potem na stronie Ogólne kliknij ikonę Android w sekcji Twoje aplikacje.

Zobaczysz następujące okno : 8254fc299e82f528.png

  1. Najważniejszą wartością jest nazwa pakietu na Androida. Ustaw na com.ticker.stocknews.
    1. Podana tutaj nazwa pakietu musi być taka sama jak podana w polu AndroidManifest.xml kodu startowego StockNewsApp. Jeśli chcesz zlokalizować urządzenie lub je zmienić, wykonaj te czynności:
      1. W katalogu StockNewsApp otwórz plik app/src/main/AndroidManifest.xml.
      2. W elemencie manifest znajdź wartość ciągu znaków atrybutu package. Ta wartość to nazwa pakietu na Androida.
  1. W oknie Firebase wklej nazwę skopiowanego pakietu w polu Nazwa pakietu na Androida.
  2. Na potrzeby tego ćwiczenia w Codelabs nie potrzebujesz certyfikatu podpisywania debugowania SHA-1, ponieważ ta aplikacja nie zostanie opublikowana. Pozostaw to pole puste.
  3. Kliknij Zarejestruj aplikację.
  4. Następnie w konsoli Firebase postępuj zgodnie z instrukcjami, aby pobrać plik konfiguracji google-services.json.
  5. Pozostałe kroki konfiguracji możesz pominąć, ponieważ wszystkie pozostałe elementy są już skonfigurowane w kodzie aplikacji startowej. Swoją aplikację zobaczysz na stronie głównej konsoli Firebase.
  6. Skopiuj pobrany przed chwilą plik google-services.json do katalogu messaging/fcm-topics-codelab/starter/StockNewsApp/app.

4. Tworzenie i uruchamianie aplikacji

Możesz już zacząć pracę nad aplikacją. Najpierw skompiluj i uruchom aplikację.

Importowanie aplikacji startowej

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

Po wczytaniu projektu możesz zobaczyć alert informujący o tym, że Git nie śledzi wszystkich lokalnych zmian. Kliknij „Ignoruj”. lub „X” w prawym górnym rogu. Nie przekażesz żadnych zmian z powrotem do repozytorium Git.

Jeśli jesteś w widoku Androida, w lewym górnym rogu okna projektu powinien być widoczny obraz podobny do tego poniżej. Jeśli jesteś w widoku Projekt, musisz rozwinąć projekt, aby zobaczyć to samo.

b574ea0089ee87c6.png

Pamiętaj, że Android Studio może potrzebować kilku sekund na skompilowanie projektu w tle po raz pierwszy. W tym czasie na pasku stanu u dołu Android Studio będzie widoczny wskaźnik postępu:

4bc64eb3b99eb0ae.png

Zalecamy zaczekać, aż ten proces się zakończy, zanim wprowadzisz zmiany w kodzie. Dzięki temu Android Studio pobierze wszystkie niezbędne komponenty.

Dodatkowo, jeśli zobaczysz pytanie „Załaduj ponownie, aby zmiany języka zostały wprowadzone?”. lub podobną, wybierz opcję „Tak”.

Konfiguracja emulatora

Jeśli potrzebujesz pomocy przy konfigurowaniu emulatora Androida, przeczytaj artykuł Uruchamianie aplikacji.

Kod startowy aplikacji na Androida

  • Kod startowy to prosta aplikacja na Androida o minimalnej funkcjonalności i interfejsie.
  • Zależność z pakietem SDK Firebase-messaging została już dodana do pliku app/build.gradle.

f04ff8f48d186dff.png

  • W AndroidManifest.xml dodano już moduł obsługi wywołania zwrotnego MESSAGING_EVENT.
    • Ten moduł obsługi (StockNewsMessagingService.java) rozszerza klasę FirebaseMessagingService, która udostępnia różne funkcje związane z Komunikacją w chmurze Firebase (FCM). Więcej informacji znajdziesz w dokumentacji usługi FirebaseMessagingService. b843c4d33ee53166.png
    88fad1960f4a6ff5.png
    • Funkcja onNewToken jest wywoływana po utworzeniu lub odświeżeniu tokena rejestracji FCM. Więcej informacji znajdziesz w artykule Monitorowanie generowania tokenów.
    • Funkcja onMessageReceived jest wywoływana po otrzymaniu wiadomości, gdy aplikacja działa na pierwszym planie. Obecnie rejestruje tylko otrzymaną wiadomość.
  • W systemie AndroidManifest.xml dostępna jest też klasa Androida Application o nazwie StockNewsApplication. A4982a8731492dfc.pngccde692f7f68dc5a.png
    • Ta klasa będzie pierwszą klasą, która zostanie utworzona przy uruchamianiu aplikacji.
    • W funkcji onCreate klasy StockNewsApplication dodawane jest wywołanie tworzenia tokena rejestracji FCM. Wygeneruje on prawidłowy token rejestracji FCM i zapisze go.
  • MainActivity.java dodaje element RecyclerView, który wyświetla opcje kategorii akcji.
  • SubscriptionAdapter.java stosuje zasadę RecyclerView.Adapter, co powoduje wyświetlenie ekranu wyboru kategorii akcji.
    • Obok każdej kategorii akcji znajduje się nazwa oraz przełącznik subskrypcji.
    • Zmiana przełącznika powinna spowodować wywołanie subskrypcji tematu FCM lub anulowanie subskrypcji.
    • Wywołanie te wdrożysz w kolejnych sekcjach.
  • Klasa model/StockCategories.java zawiera listę wszystkich kategorii notowań giełdowych i powiązanych z nimi nazw tematów.

b32663ec4e865a18.png

Uruchamianie aplikacji startowej

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

5b27fc5b237e06b9.png

  1. Interfejs aplikacji będzie wyglądać tak:

FF5b1a1c53231c54.png

  1. Aplikacja utworzy token rejestracji FCM i zapisze go. Interfejs aplikacji nie ulegnie jednak zmianie.
    1. Skopiuj i zapisz token rejestracji FCM, ponieważ będzie potrzebny w następnych krokach.

927eb66bc909f36b.png

5. Wyślij wiadomość testową

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

Importowanie kodu 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: kompilowanie projektu z uwzględnieniem wymaganych zależności może zająć IntellIj IDEA kilka minut.

Zapoznaj się z kodem startowym serwera

  • Kod startowy serwera to projekt Java oparty na Gradle.
  • Plik build.gradle zawiera już zależność z dodanym do niego firebase-admin SDK. Zapewnia on dostęp do różnych funkcji wysyłania wiadomości w FCM.

650fc733298588f8.png

  • Dostępne są jeszcze dwie klasy, np.:
    • FcmSender.java: ta klasa zawiera następujące metody uwagi:
      • initFirebaseSDK: inicjuje pakiet SDK firebase-admin.
      • sendMessageToFcmRegistrationToken: wyślij wiadomość do tokena rejestracji FCM.
      • sendMessageToFcmTopic: wyślij wiadomość w temacie FCM.
      • sendMessageToFcmTopicCondition: wyślij wiadomość do warunku tematu FCM.
    • FcmSubscriptionManager.java: ta klasa zawiera metody, które umożliwiają zarządzanie subskrypcjami tematów po stronie serwera.
      • initFirebaseSDK: inicjuje pakiet SDK firebase-admin.
      • subscribeFcmRegistrationTokensToTopic: zasubskrybuj tokeny rejestracji FCM w temacie FCM.
      • unsubscribeFcmRegistrationTokensFromTopic: anuluj subskrypcję tokenów rejestracji FCM w temacie FCM.

Konfigurowanie kodu serwera

  1. Najpierw musimy skonfigurować konto usługi Firebase, które umożliwia pakietowi SDK firebase-admin autoryzowanie wywołań interfejsów API FCM.
    1. Otwórz konsolę Firebase, kliknij ikonę koła zębatego obok opcji Przegląd projektu na lewym pasku nawigacyjnym i wybierz Ustawienia projektu. 8c2108d4d7c915e9.png
    2. Na stronie ustawień wybierz Konta usługi i kliknij Utwórz konto usługi. 84b128cc5dac0a85.png
    3. Teraz kliknij przycisk Wygeneruj nowy klucz prywatny. 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 wczytują plik service-account.json ze ścieżki klasy przy użyciu poniższego kodu. 8dffbee658e0bdd.png
  2. Na tym etapie kod serwera jest gotowy. Uruchom kompilację -> Utwórz projekt na górnym pasku menu.

Wysyłanie wiadomości testowej

  1. W FcmSender.java znajdź funkcję sendMessageToFcmRegistrationToken i w polu registrationToken wstaw token rejestracji FCM skopiowany z sekcji Uruchom aplikację startową.
  2. W funkcji main usuń znacznik komentarza tylko z funkcji sendMessageToFcmRegistrationToken i kliknij Uruchom, aby wykonać kod.
    1. Zwróć uwagę, jak token rejestracji FCM jest ustawiony w polu Token obiektu message.
    2. Zobacz też, w jaki sposób korzystamy z interfejsu API send interfejsu FirebaseMessaging.

52e4a3ec3f816473.png

  1. Spowoduje to wysłanie komunikatu do instancji aplikacji skonfigurowanej w poprzednim kroku.
  2. Gdy instancja aplikacji działa na pierwszym planie, powinna być widoczna treść wiadomości.

D3540ec1089f97dd.png

  1. Gdy instancja aplikacji działa w tle, komunikat pojawia się na pasku powiadomień.

31203deca59c03fe.png

Super! Udało Ci się użyć pakietu Firebase Admin SDK do wysyłania wiadomości do instancji aplikacji. Dowiedz się więcej o korzystaniu z pakietu SDK Firebase Admin na serwerze.

6. Wdrażanie subskrypcji tematów lub anulowania subskrypcji

W tym kroku wdrożysz działania związane z subskrypcją tematów i ich anulowaniem za pomocą przełącznika Kategoria Notowania giełdowego w aplikacji na Androida.

Gdy użytkownik aplikacji przełączy przełącznik przy określonej kategorii akcji, zostanie wykonane wywołanie dotyczące subskrypcji tematu lub anulowania subskrypcji.

Sprawdź kod

  • Przejdź do zajęć SubscriptionAdapter.java w kodzie aplikacji na Androida i znajdź klasę RecyclerViewViewHolder.

6c0614199e684f6.png

  • Konstruktor klas konfiguruje detektor przełącznika subskrypcji za pomocą metody setOnCheckedChangeListener.
  • W zależności od przełącznika działania związane z subskrypcją i anulowaniem subskrypcji są wykonywane przez wywoływanie metod subscribeToStockCategory i unsubscribeFromStockCategory.
  • Metoda setData jest wywoływana przez onBindViewHolder adaptera RecyclerView, aby powiązać obiekt ViewHolder z odpowiednią kategorią akcji.

Wdróż subskrypcję tematów

  1. W metodzie subscribeToStockCategory wdrożysz wywołanie interfejsu API subscribeToTopic obiektu FirebaseMessaging. Kod może wyglądać np. 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();
          });
    }

Implementowanie anulowania subskrypcji tematów

  1. I podobnie, w warunku innym, wdrożysz wywołanie interfejsu API unsubscribeFromTopic. Oto przykłady:
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óbuj

  1. Uruchom aplikację i przełącz opcje Kategoria akcji, aby wykonać działania Subskrybuj i Anuluj subskrypcję. Wygląda to mniej więcej tak:

Subskrybuj

Anuluj subskrypcję

7. Wysyłanie pierwszej wiadomości w temacie

W tym kroku wdrożysz kod po stronie serwera, aby wysyłać wiadomości w temacie FCM.

Wdróż integrację po stronie serwera w celu wysyłania wiadomości z tematu

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

56381dd1b40cde9c.png

  1. W pierwszym wierszu wpisz temat FCM, do którego chcesz wysłać wiadomość.
    • Jest to ciąg znaków w formacie: /topics/<Topic Name>. Na przykład: /topics/Technology.
  2. W następnych wierszach utwórz nowy obiekt message (podobny do obiektu zdefiniowanego w funkcji sendMessageToFcmRegistrationToken).
    • Różnica będzie 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” używanym w funkcji sendMessageToFcmRegistrationToken).
FirebaseMessaging.getInstance().send(message);
  1. Na koniec zaktualizuj funkcję main i włącz wywołanie tylko funkcji sendMessageToFcmTopic.

9a6aa08dd7c28898.png

Wysyłanie wiadomości i potwierdzanie odbioru

  1. Przed wysłaniem wiadomości tematu upewnij się, że wystąpienie aplikacji subskrybuje temat, do którego chcesz ją wysłać.
    1. Można to zrobić, przesuwając odpowiedni przełącznik. Przykład:
    4668247408377712.png
  2. Możesz teraz wysłać wiadomość związaną z tematem, wykonując funkcję main funkcji FcmSender.java.
  3. Podobnie jak wcześniej, powinno być widoczne potwierdzenie wiadomości w instancji aplikacji.
    1. Instancja aplikacji na pierwszym planie
    C144721399f610fe.png
    1. Instancja aplikacji w tle
    44efc7dfd57e8e9a.png
  4. Dodatkowe informacje: spróbuj anulować subskrypcję tematu, do którego wysłałeś wiadomość, i ponownie wyślij wiadomość. Możesz zauważyć, że wiadomość nie jest dostarczana do instancji aplikacji.

8. Wysyłam pierwszą wiadomość dotyczącą warunku tematu

Funkcja warunków dotyczących tematów umożliwia wysyłanie wiadomości do kombinacji tematów, co pozwala na bardziej wyraziste definicje odbiorców.

Na przykład w aplikacji StockNews możesz rozważyć możliwość wysyłania wiadomości do grupy instancji aplikacji, które subskrybują tematy związane z technologią lub motoryzacją. Może się tak zdarzyć na przykład wtedy, gdy zdarzy się coś interesującego z udziałem Waymo.

Funkcja Topics API umożliwia wyrażenie kombinacji w postaci wyrażenia logicznego z zastosowaniem następujących operatorów

  • & : logiczne ORAZ. Na przykład 'Technology' in topics && 'Automotive' in topics – kieruje reklamy tylko na wystąpienia aplikacji, które subskrybują zarówno tematy związane z technologią, jak i tematami motoryzacyjnymi.
  • || : logiczne LUB. Na przykład 'Technology' in topics || 'Automotive' in topics – kieruje reklamy na wystąpienia aplikacji, które subskrybują tematy związane z technologią lub motoryzacją.
  • () : nawiasy służące do grupowania. Na przykład 'Technology' in topics && ('Automotive' in topics || 'Energy' in topics) – kieruje reklamy tylko na wystąpienia aplikacji, które subskrybują tematy związane z technologią i energią.

Dowiedz się więcej o tworzeniu żądań wysyłania w celu korzystania z tej funkcji.

Wdróż integrację po stronie serwera w celu wysyłania wiadomości z warunkami dotyczącymi tematu

  1. Po powrocie 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 ma zostać wysłana wiadomość. Możesz ustawić tę wartość: 'Technology' in topics && 'Automotive' in topics.
  2. W następnych wierszach utwórz nowy obiekt message (podobny do obiektu zdefiniowanego w funkcji sendMessageToFcmTopic).
    1. Różnica będzie polegać na tym, że zamiast ustawiać pole Topic obiektu, skonfigurujesz 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ść (identyczne z wywołaniem „send” używanym w funkcji sendMessageToFcmTopic).
FirebaseMessaging.getInstance().send(message);
  1. Na koniec zaktualizuj funkcję main i włącz wywołanie tylko funkcji sendMessageToFcmTopicCondition.

db9588d40d2a0da6.png

Wysyłanie wiadomości i potwierdzanie odbioru

  1. Przed wysłaniem wiadomości tematu upewnij się, że wystąpienie aplikacji spełnia określony warunek tematu, subskrybując instancję aplikacji zarówno na tematy Technologia, jak i Motoryzacja.
  2. Możesz teraz wysłać wiadomość związaną z tematem, wykonując funkcję main funkcji FcmSender.java.
  3. Podobnie jak wcześniej, powinno być widoczne potwierdzenie wiadomości w instancji aplikacji.
    1. Instancja aplikacji na pierwszym planie
    6f612ace15aa6515.png
    1. Instancja aplikacji w tle
    78044a56ac2359cb.png
  4. Dodatkowo: możesz teraz anulować subskrypcję w temacie Technologia i ponownie wysłać wiadomość dotyczącą warunku tematu. Zwróć uwagę, że komunikat nie jest odebrany przez instancję aplikacji.

9. Skrót

Podsumujmy w skrócie zdobytą przez Ciebie wiedzę.

  • Jak rozpocząć lub anulować subskrypcję tematu w instancji aplikacji.
  • Wysyłanie wiadomości w temacie i weryfikowanie potwierdzenia w zasubskrybowanych instancjach aplikacji.
  • Wysyłanie wiadomości do tematu i weryfikacja potwierdzenia w instancji aplikacji, która spełnia ten warunek.

W następnej sekcji dowiesz się, jak możesz subskrybować instancje aplikacji dotyczące tematów lub anulować ich subskrypcję bez konieczności tworzenia instancji połączeń po stronie klienta.

c0dc20655d392690.gif

10. Zarządzaj subskrypcjami tematów po stronie serwera

Do tej pory w ramach tego ćwiczenia w Codelabs wszystkie wywołania dotyczące subskrypcji tematów i anulowania subskrypcji są inicjowane z poziomu instancji aplikacji.

W niektórych przypadkach może jednak być potrzebne zarządzanie subskrypcjami tematów po stronie serwera. Możesz na przykład zasubskrybować podgrupę istniejących użytkowników w nowym temacie, nie czekając na wdrożenie aplikacji.

Z tej sekcji dowiesz się, jak używać pakietu SDK Firebase Admin do subskrybowania i anulowania subskrypcji grupy tokenów rejestracji FCM w temacie przez wykonywanie wywołań po stronie serwera.

Implementowanie subskrypcji tokenów rejestracji FCM po stronie serwera w temacie FCM

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

5d5709e7b3cbcb04.png

  1. Zasubskrybujmy instancję aplikacji w temacie Energia. W tym celu najpierw podaj dane w następujących dwóch polach:
    1. registrationTokens: rozdzielona przecinkami lista ciągów reprezentujących tokeny rejestracji FCM, dla których chcesz utworzyć subskrypcje tematów.
    2. topicName: nazwa tematu dotyczącego tematu Energia, np. /topics/Energy.
  2. Wdrożenie wywołania w kilku kolejnych wierszach:
TopicManagementResponse response = FirebaseMessaging.getInstance().subscribeToTopic(
        registrationTokens, topicName);
  1. Możesz sprawdzić TopicManagementResponse, aby zobaczyć ogólne statystyki wyników. Może to być na przykład wydrukowanie liczby subskrypcji tematów, które udało się utworzyć, przy użyciu getSuccessCount.
System.out.printf("Num tokens successfully subscribed %d", response.getSuccessCount());
  1. Pamiętaj też, że funkcja main włącza wywołania tylko funkcji subscribeFcmRegistrationTokensToTopic.

Tworzenie subskrypcji i wysyłanie wiadomości tematu

  1. Na tym etapie możesz utworzyć subskrypcję tematu i wysłać do niej wiadomość.
  2. Wykonaj funkcję main klasy FcmSubscriptionManager.java. Spowoduje to utworzenie subskrypcji tematu.
  3. Teraz skonfiguruj kod, aby wysłać wiadomość. Podobnie jak wcześniej,
    1. W FcmSender.java znajdź funkcję sendMessageToFcmTopic.
    2. W polu topicName ustaw temat Energia, tzn. /topics/Energy.
    3. Utwórz obiekt Message i ustaw kierowanie na temat za pomocą metody setTopic.
    4. Na koniec zaktualizuj metodę main, aby włączyć tylko funkcję sendMessageToFcmTopic.
  4. Wykonaj funkcję main funkcji FcmSender.java. Spowoduje to wysłanie wiadomości do instancji aplikacji.Możesz ją obserwować w ten sposób:
    1. Instancja aplikacji na pierwszym planie
    40ab6cf71e0e4116.png
    1. Instancja aplikacji w tle
    8fba81037198209e.png

Implementowanie anulowania subskrypcji tokenów rejestracji FCM w temacie FCM

  1. Do anulowania subskrypcji tematów po stronie serwera możesz użyć tego interfejsu API unsubscribeFromTopic. Do funkcji unsubscribeFcmRegistrationTokensFromTopic klasy FcmSubscriptionManager.java dodasz odpowiedni kod.

8d9e8ea9d34016bd.png

  1. Jedynym zadaniem jest wdrożenie kodu anulowania subskrypcji po stronie serwera i sprawdzenie jego skuteczności przez wysłanie wiadomości tematycznej.

11. Gratulacje

Gratulacje, udało Ci się wykorzystać tematy FCM do wysyłania wiadomości w trybie multicast do podgrup instancji aplikacji. Ułatwi Ci to szybkie docieranie do użytkowników z trafną treścią.

947def3eb33b1e4a.gif

Co dalej?

Po ukończeniu ćwiczeń w Codelabs możesz wypróbować tematy na innych platformach, korzystając z tych przewodników:

Dokumenty referencyjne