Aby skierować wiadomość do wielu urządzeń, użyj wiadomości tematycznych . Ta funkcja umożliwia wysłanie wiadomości do wielu urządzeń, które wybrały określony temat.
Ten samouczek koncentruje się na wysyłaniu komunikatów tematycznych z serwera aplikacji przy użyciu pakietu Admin SDK lub interfejsu API REST dla FCM oraz odbieraniu i obsłudze ich w aplikacji dla systemu Android. Omówimy obsługę wiadomości zarówno w aplikacjach działających w tle, jak i na pierwszym planie. Omówiono wszystkie kroki, które należy wykonać, aby to osiągnąć, od konfiguracji po weryfikację.
Skonfiguruj zestaw SDK
Ta sekcja może obejmować kroki, które już wykonałeś, jeśli skonfigurowałeś aplikację kliencką na Androida dla FCM lub wykonałeś kroki, aby wysłać pierwszą wiadomość .
Zanim zaczniesz
Zainstaluj lub zaktualizuj Android Studio do najnowszej wersji.
Upewnij się, że Twój projekt spełnia te wymagania:
- Celuje w interfejs API poziomu 19 (KitKat) lub wyższy
- Używa Androida 4.4 lub nowszego
- Używa Jetpack (AndroidX) , co obejmuje spełnienie następujących wymagań dotyczących wersji:
-
com.android.tools.build:gradle
w wersji 3.2.1 lub nowszej -
compileSdkVersion
28 lub nowszy
-
Skonfiguruj urządzenie fizyczne lub użyj emulatora , aby uruchomić aplikację.
Pamiętaj, że zestawy SDK Firebase zależne od usług Google Play wymagają, aby urządzenie lub emulator miały zainstalowane usługi Google Play.Zaloguj się do Firebase przy użyciu swojego konta Google.
Jeśli nie masz jeszcze projektu na Androida i chcesz tylko wypróbować produkt Firebase, możesz pobrać jedną z naszych szybkich próbek .
Utwórz projekt Firebase
Zanim dodasz Firebase do swojej aplikacji na Androida, musisz utworzyć projekt Firebase, aby połączyć się z aplikacją na Androida. Odwiedź stronę Projekty Firebase, aby dowiedzieć się więcej o projektach Firebase.
Zarejestruj swoją aplikację w Firebase
Aby korzystać z Firebase w aplikacji na Androida, musisz zarejestrować swoją aplikację w projekcie Firebase. Rejestracja aplikacji jest często nazywana „dodawaniem” aplikacji do projektu.
Przejdź do konsoli Firebase .
Na środku strony przeglądu projektu kliknij ikonę Androida (
) lub Dodaj aplikację , aby uruchomić proces konfiguracji.Wpisz nazwę pakietu swojej aplikacji w polu Nazwa pakietu Androida .
Nazwa pakietu jednoznacznie identyfikuje Twoją aplikację na urządzeniu i w Sklepie Google Play.
Nazwa pakietu jest często określana jako identyfikator aplikacji .
Znajdź nazwę pakietu swojej aplikacji w pliku Gradle modułu (na poziomie aplikacji), zwykle
app/build.gradle
(przykładowa nazwa pakietu:com.yourcompany.yourproject
).Pamiętaj, że w nazwie pakietu rozróżniana jest wielkość liter i nie można jej zmienić w tej aplikacji Firebase na Androida po jej zarejestrowaniu w projekcie Firebase.
(Opcjonalnie) Wprowadź inne informacje o aplikacji: pseudonim aplikacji i certyfikat podpisywania debugowania SHA-1 .
Pseudonim aplikacji : wewnętrzny, wygodny identyfikator widoczny tylko dla Ciebie w konsoli Firebase
Certyfikat podpisywania debugowania SHA-1 : hash SHA-1 jest wymagany przez uwierzytelnianie Firebase (podczas korzystania z logowania przez Google lub logowania za pomocą numeru telefonu ) i łączy dynamicznych Firebase .
Kliknij Zarejestruj aplikację .
Dodaj plik konfiguracyjny Firebase
Pobierz, a następnie dodaj plik konfiguracyjny Firebase Android (
) do swojej aplikacji:google-services.json Kliknij Pobierz google-services.json, aby uzyskać plik konfiguracyjny Firebase Android.
Przenieś plik konfiguracyjny do katalogu głównego modułu (na poziomie aplikacji) swojej aplikacji.
Plik konfiguracyjny Firebase zawiera unikalne, ale nietajne identyfikatory Twojego projektu. Aby dowiedzieć się więcej o tym pliku konfiguracyjnym, odwiedź stronę Zrozumienie projektów Firebase .
W dowolnym momencie możesz ponownie pobrać plik konfiguracyjny Firebase .
Upewnij się, że nazwa pliku konfiguracyjnego nie zawiera dodatkowych znaków, takich jak
(2)
.
Aby wartości w pliku konfiguracyjnym
były dostępne dla zestawów SDK Firebase, potrzebujesz wtyczki Google Services Gradle (google-services.json google-services
).W pliku Gradle na poziomie głównym (na poziomie projektu) (
<project>/build.gradle.kts
lub<project>/build.gradle
) dodaj wtyczkę usług Google jako zależność:Kotlin
plugins { id("com.android.application") version "7.2.0" apply false // ... // Add the dependency for the Google services Gradle plugin id("com.google.gms.google-services") version "4.3.15" apply false }
Groovy
plugins { id 'com.android.application' version '7.2.0' apply false // ... // Add the dependency for the Google services Gradle plugin id 'com.google.gms.google-services' version '4.3.15' apply false }
W pliku Gradle modułu (na poziomie aplikacji) (zwykle
<project>/<app-module>/build.gradle.kts
lub<project>/<app-module>/build.gradle
) dodaj wtyczkę usług Google:Kotlin
plugins { id("com.android.application") // Add the Google services Gradle plugin id("com.google.gms.google-services") // ... }
Groovy
plugins { id 'com.android.application' // Add the Google services Gradle plugin id 'com.google.gms.google-services' // ... }
Dodaj pakiety SDK Firebase do swojej aplikacji
W pliku Gradle modułu (na poziomie aplikacji) (zwykle
<project>/<app-module>/build.gradle.kts
lub<project>/<app-module>/build.gradle
) dodaj zależność dla Firebase Cloud Biblioteka Androida do przesyłania wiadomości. Zalecamy używanie Firebase Android BoM do kontrolowania wersji bibliotek.Aby optymalnie korzystać z usługi Firebase Cloud Messaging, zalecamy włączenie Google Analytics w projekcie Firebase i dodanie pakietu Firebase SDK dla Google Analytics do swojej aplikacji.
Kotlin+KTX
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:32.3.1")) // Add the dependencies for the Firebase Cloud Messaging and Analytics libraries // When using the BoM, you don't specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-messaging-ktx") implementation("com.google.firebase:firebase-analytics-ktx") }
Korzystając z Firebase Android BoM , Twoja aplikacja będzie zawsze korzystać ze zgodnych wersji bibliotek Firebase Android.
(Alternatywnie) Dodaj zależności biblioteki Firebase bez korzystania z BoM
Jeśli zdecydujesz się nie używać BoM Firebase, musisz określić każdą wersję biblioteki Firebase w jej wierszu zależności.
Pamiętaj, że jeśli używasz w swojej aplikacji wielu bibliotek Firebase, zdecydowanie zalecamy korzystanie z BoM do zarządzania wersjami bibliotek, co zapewnia zgodność wszystkich wersji.
dependencies { // Add the dependencies for the Firebase Cloud Messaging and Analytics libraries // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-messaging-ktx:23.2.1") implementation("com.google.firebase:firebase-analytics-ktx:21.3.0") }
Java
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:32.3.1")) // Add the dependencies for the Firebase Cloud Messaging and Analytics libraries // When using the BoM, you don't specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-messaging") implementation("com.google.firebase:firebase-analytics") }
Korzystając z Firebase Android BoM , Twoja aplikacja będzie zawsze korzystać ze zgodnych wersji bibliotek Firebase Android.
(Alternatywnie) Dodaj zależności biblioteki Firebase bez korzystania z BoM
Jeśli zdecydujesz się nie używać BoM Firebase, musisz określić każdą wersję biblioteki Firebase w jej wierszu zależności.
Pamiętaj, że jeśli używasz w swojej aplikacji wielu bibliotek Firebase, zdecydowanie zalecamy korzystanie z BoM do zarządzania wersjami bibliotek, co zapewnia zgodność wszystkich wersji.
dependencies { // Add the dependencies for the Firebase Cloud Messaging and Analytics libraries // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-messaging:23.2.1") implementation("com.google.firebase:firebase-analytics:21.3.0") }
Synchronizuj swój projekt na Androida z plikami Gradle.
Kompilacje Gradle korzystające z wtyczki Android Gradle (AGP) w wersji 4.2 lub starszej muszą włączyć obsługę języka Java 8. W przeciwnym razie te projekty na Androida dostaną błąd kompilacji podczas dodawania pakietu Firebase SDK.
Aby naprawić ten błąd kompilacji, możesz skorzystać z jednej z dwóch opcji:
- Dodaj wymienione
compileOptions
z komunikatu o błędzie do plikubuild.gradle.kts
lubbuild.gradle
na poziomie aplikacji . - Zwiększ
minSdk
dla swojego projektu Android do 26 lub więcej.
Dowiedz się więcej o tym niepowodzeniu kompilacji w tym FAQ .
- Dodaj wymienione
Subskrybuj aplikację kliencką do tematu
Aplikacje klienckie mogą subskrybować dowolny istniejący temat lub tworzyć nowy temat. Gdy aplikacja kliencka subskrybuje nową nazwę tematu (taką, która jeszcze nie istnieje dla Twojego projektu Firebase), w FCM tworzony jest nowy temat o tej nazwie, a następnie każdy klient może go subskrybować.
Aby zasubskrybować temat, aplikacja kliencka wywołuje usługę Firebase Cloud Messaging subscribeToTopic()
z nazwą tematu FCM. Ta metoda zwraca Task
, którego może użyć odbiornik zakończenia, aby określić, czy subskrypcja powiodła się:
Kotlin+KTX
Firebase.messaging.subscribeToTopic("weather") .addOnCompleteListener { task -> var msg = "Subscribed" if (!task.isSuccessful) { msg = "Subscribe failed" } Log.d(TAG, msg) Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show() }
Java
FirebaseMessaging.getInstance().subscribeToTopic("weather") .addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { String msg = "Subscribed"; if (!task.isSuccessful()) { msg = "Subscribe failed"; } Log.d(TAG, msg); Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show(); } });
Aby anulować subskrypcję, aplikacja kliencka wywołuje Firebase Cloud Messaging unsubscribeFromTopic()
z nazwą tematu.
Odbieraj i obsługuj wiadomości tematyczne
FCM dostarcza komunikaty tematyczne w taki sam sposób, jak inne komunikaty podrzędne.
Aby odbierać wiadomości, użyj usługi, która rozszerza FirebaseMessagingService
. Twoja usługa powinna zastąpić wywołania zwrotne onMessageReceived
i onDeletedMessages
.
Okno czasowe obsługi komunikatu może być krótsze niż 20 sekund w zależności od opóźnień powstałych przed wywołaniem onMessageReceived
, w tym opóźnień systemu operacyjnego, czasu uruchamiania aplikacji, zablokowania głównego wątku przez inne operacje lub wcześniejszych wywołań onMessageReceived
trwających zbyt długo. Po tym czasie różne zachowania systemu operacyjnego, takie jak zabijanie procesów Androida lub limity wykonywania w tle Androida O, mogą przeszkadzać w ukończeniu pracy.
onMessageReceived
jest dostępny dla większości typów wiadomości, z następującymi wyjątkami:
Powiadomienia dostarczane, gdy aplikacja działa w tle . W takim przypadku powiadomienie jest dostarczane do zasobnika systemowego urządzenia. Dotknięcie powiadomienia przez użytkownika domyślnie otwiera program uruchamiający aplikacje.
Wiadomości z powiadomieniem i ładunkiem danych, gdy są odbierane w tle . W takim przypadku powiadomienie jest dostarczane do zasobnika systemowego urządzenia, a ładunek danych jest dostarczany w dodatkach intencji działania programu uruchamiającego.
W podsumowaniu:
Stan aplikacji | Powiadomienie | Dane | Obydwa |
---|---|---|---|
Pierwszoplanowy | onMessageReceived | onMessageReceived | onMessageReceived |
Tło | Taca systemowa | onMessageReceived | Powiadomienie: zasobnik systemowy Dane: w dodatkach intencji. |
Edytuj manifest aplikacji
Aby korzystać z FirebaseMessagingService
, w manifeście aplikacji musisz dodać:
<service android:name=".java.MyFirebaseMessagingService" android:exported="false"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service>
Zaleca się również ustawienie wartości domyślnych w celu dostosowania wyglądu powiadomień. Możesz określić niestandardową domyślną ikonę i niestandardowy domyślny kolor, które są stosowane, gdy w ładunku powiadomienia nie są ustawione równoważne wartości.
Dodaj te linie wewnątrz tagu application
, aby ustawić niestandardową domyślną ikonę i niestandardowy kolor:
<!-- Set custom default icon. This is used when no icon is set for incoming notification messages. See README(https://goo.gl/l4GJaQ) for more. --> <meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="@drawable/ic_stat_ic_notification" /> <!-- Set color used with incoming notification messages. This is used when no color is set for the incoming notification message. See README(https://goo.gl/6BKBk7) for more. --> <meta-data android:name="com.google.firebase.messaging.default_notification_color" android:resource="@color/colorAccent" />
Android wyświetla niestandardową domyślną ikonę dla
- Wszystkie powiadomienia wysłane z kompozytora powiadomień .
- Dowolny komunikat powiadomienia, który nie ustawia jawnie ikony w ładunku powiadomienia.
Android używa niestandardowego domyślnego koloru dla
- Wszystkie powiadomienia wysłane z kompozytora powiadomień .
- Dowolny komunikat powiadomienia, który nie ustawia jawnie koloru w ładunku powiadomienia.
Jeśli nie jest ustawiona niestandardowa ikona domyślna i żadna ikona nie jest ustawiona w ładunku powiadomienia, system Android wyświetla ikonę aplikacji w kolorze białym.
Zastąp onMessageReceived
Nadpisując metodę FirebaseMessagingService.onMessageReceived
możesz wykonać akcje na podstawie odebranego obiektu RemoteMessage i uzyskać dane komunikatu:
Kotlin+KTX
override fun onMessageReceived(remoteMessage: RemoteMessage) { // TODO(developer): Handle FCM messages here. // Not getting messages here? See why this may be: https://goo.gl/39bRNJ Log.d(TAG, "From: ${remoteMessage.from}") // Check if message contains a data payload. if (remoteMessage.data.isNotEmpty()) { Log.d(TAG, "Message data payload: ${remoteMessage.data}") // Check if data needs to be processed by long running job if (needsToBeScheduled()) { // For long-running tasks (10 seconds or more) use WorkManager. scheduleJob() } else { // Handle message within 10 seconds handleNow() } } // Check if message contains a notification payload. remoteMessage.notification?.let { Log.d(TAG, "Message Notification Body: ${it.body}") } // Also if you intend on generating your own notifications as a result of a received FCM // message, here is where that should be initiated. See sendNotification method below. }
Java
@Override public void onMessageReceived(RemoteMessage remoteMessage) { // TODO(developer): Handle FCM messages here. // Not getting messages here? See why this may be: https://goo.gl/39bRNJ Log.d(TAG, "From: " + remoteMessage.getFrom()); // Check if message contains a data payload. if (remoteMessage.getData().size() > 0) { Log.d(TAG, "Message data payload: " + remoteMessage.getData()); if (/* Check if data needs to be processed by long running job */ true) { // For long-running tasks (10 seconds or more) use WorkManager. scheduleJob(); } else { // Handle message within 10 seconds handleNow(); } } // Check if message contains a notification payload. if (remoteMessage.getNotification() != null) { Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody()); } // Also if you intend on generating your own notifications as a result of a received FCM // message, here is where that should be initiated. See sendNotification method below. }
Zastąp onDeletedMessages
W niektórych sytuacjach FCM może nie dostarczyć wiadomości. Dzieje się tak, gdy dla Twojej aplikacji jest zbyt wiele oczekujących wiadomości (>100) w momencie łączenia lub gdy urządzenie nie łączy się z FCM od ponad miesiąca. W takich przypadkach możesz otrzymać wywołanie zwrotne do FirebaseMessagingService.onDeletedMessages()
Gdy instancja aplikacji odbierze to wywołanie zwrotne, powinna przeprowadzić pełną synchronizację z serwerem aplikacji. Jeśli nie wysłałeś wiadomości do aplikacji na tym urządzeniu w ciągu ostatnich 4 tygodni, FCM nie wywoła onDeletedMessages()
.Obsługuj powiadomienia w aplikacji działającej w tle
Gdy Twoja aplikacja działa w tle, Android kieruje powiadomienia do zasobnika systemowego. Dotknięcie powiadomienia przez użytkownika domyślnie otwiera program uruchamiający aplikacje.
Dotyczy to wiadomości, które zawierają zarówno powiadomienie, jak i ładunek danych (oraz wszystkie wiadomości wysłane z konsoli powiadomień). W takich przypadkach powiadomienie jest dostarczane do zasobnika systemowego urządzenia, a ładunek danych jest dostarczany w dodatkach związanych z intencją działania programu uruchamiającego.
Informacje na temat dostarczania wiadomości do Twojej aplikacji znajdziesz w panelu raportowania FCM , który rejestruje liczbę wiadomości wysłanych i otwartych na urządzeniach Apple i Android, a także dane dotyczące „wyświetleń” (powiadomień widzianych przez użytkowników) dla aplikacji na Androida.
Twórz żądania wysyłania
Po utworzeniu tematu przez zasubskrybowanie instancji aplikacji klienckiej do tematu po stronie klienta lub za pośrednictwem interfejsu API serwera można wysyłać wiadomości do tematu. Jeśli tworzysz żądania wysyłania dla FCM po raz pierwszy, zapoznaj się z przewodnikiem po środowisku serwera i FCM , aby uzyskać ważne informacje ogólne i konfiguracyjne.
W logice wysyłania na zapleczu podaj żądaną nazwę tematu, jak pokazano:
Node.js
// The topic name can be optionally prefixed with "/topics/".
const topic = 'highScores';
const message = {
data: {
score: '850',
time: '2:45'
},
topic: topic
};
// Send a message to devices subscribed to the provided topic.
getMessaging().send(message)
.then((response) => {
// Response is a message ID string.
console.log('Successfully sent message:', response);
})
.catch((error) => {
console.log('Error sending message:', error);
});
Jawa
// The topic name can be optionally prefixed with "/topics/".
String topic = "highScores";
// See documentation on defining a message payload.
Message message = Message.builder()
.putData("score", "850")
.putData("time", "2:45")
.setTopic(topic)
.build();
// Send a message to the devices subscribed to the provided topic.
String response = FirebaseMessaging.getInstance().send(message);
// Response is a message ID string.
System.out.println("Successfully sent message: " + response);
Pyton
# The topic name can be optionally prefixed with "/topics/".
topic = 'highScores'
# See documentation on defining a message payload.
message = messaging.Message(
data={
'score': '850',
'time': '2:45',
},
topic=topic,
)
# Send a message to the devices subscribed to the provided topic.
response = messaging.send(message)
# Response is a message ID string.
print('Successfully sent message:', response)
Iść
// The topic name can be optionally prefixed with "/topics/".
topic := "highScores"
// See documentation on defining a message payload.
message := &messaging.Message{
Data: map[string]string{
"score": "850",
"time": "2:45",
},
Topic: topic,
}
// Send a message to the devices subscribed to the provided topic.
response, err := client.Send(ctx, message)
if err != nil {
log.Fatalln(err)
}
// Response is a message ID string.
fmt.Println("Successfully sent message:", response)
C#
// The topic name can be optionally prefixed with "/topics/".
var topic = "highScores";
// See documentation on defining a message payload.
var message = new Message()
{
Data = new Dictionary<string, string>()
{
{ "score", "850" },
{ "time", "2:45" },
},
Topic = topic,
};
// Send a message to the devices subscribed to the provided topic.
string response = await FirebaseMessaging.DefaultInstance.SendAsync(message);
// Response is a message ID string.
Console.WriteLine("Successfully sent message: " + response);
ODPOCZYNEK
POST https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send HTTP/1.1
Content-Type: application/json
Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA
{
"message":{
"topic" : "foo-bar",
"notification" : {
"body" : "This is a Firebase Cloud Messaging Topic Message!",
"title" : "FCM Message"
}
}
}
polecenie cURL:
curl -X POST -H "Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA" -H "Content-Type: application/json" -d '{
"message": {
"topic" : "foo-bar",
"notification": {
"body": "This is a Firebase Cloud Messaging Topic Message!",
"title": "FCM Message"
}
}
}' https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send HTTP/1.1
Aby wysłać wiadomość do kombinacji tematów, określ warunek , który jest wyrażeniem boolowskim określającym tematy docelowe. Na przykład następujący warunek spowoduje wysłanie wiadomości do urządzeń, które subskrybują TopicA
i TopicB
lub TopicC
:
"'TopicA' in topics && ('TopicB' in topics || 'TopicC' in topics)"
FCM najpierw ocenia wszystkie warunki w nawiasach, a następnie ocenia wyrażenie od lewej do prawej. W powyższym wyrażeniu użytkownik zasubskrybowany do dowolnego pojedynczego tematu nie otrzymuje wiadomości. Podobnie użytkownik, który nie subskrybuje TopicA
nie otrzymuje wiadomości. Te kombinacje go otrzymują:
-
TopicA
iTopicB
-
TopicA
iTopicC
W wyrażeniu warunkowym można uwzględnić maksymalnie pięć tematów.
Aby wysłać do warunku:
Node.js
// Define a condition which will send to devices which are subscribed
// to either the Google stock or the tech industry topics.
const condition = '\'stock-GOOG\' in topics || \'industry-tech\' in topics';
// See documentation on defining a message payload.
const message = {
notification: {
title: '$FooCorp up 1.43% on the day',
body: '$FooCorp gained 11.80 points to close at 835.67, up 1.43% on the day.'
},
condition: condition
};
// Send a message to devices subscribed to the combination of topics
// specified by the provided condition.
getMessaging().send(message)
.then((response) => {
// Response is a message ID string.
console.log('Successfully sent message:', response);
})
.catch((error) => {
console.log('Error sending message:', error);
});
Jawa
// Define a condition which will send to devices which are subscribed
// to either the Google stock or the tech industry topics.
String condition = "'stock-GOOG' in topics || 'industry-tech' in topics";
// See documentation on defining a message payload.
Message message = Message.builder()
.setNotification(Notification.builder()
.setTitle("$GOOG up 1.43% on the day")
.setBody("$GOOG gained 11.80 points to close at 835.67, up 1.43% on the day.")
.build())
.setCondition(condition)
.build();
// Send a message to devices subscribed to the combination of topics
// specified by the provided condition.
String response = FirebaseMessaging.getInstance().send(message);
// Response is a message ID string.
System.out.println("Successfully sent message: " + response);
Pyton
# Define a condition which will send to devices which are subscribed
# to either the Google stock or the tech industry topics.
condition = "'stock-GOOG' in topics || 'industry-tech' in topics"
# See documentation on defining a message payload.
message = messaging.Message(
notification=messaging.Notification(
title='$GOOG up 1.43% on the day',
body='$GOOG gained 11.80 points to close at 835.67, up 1.43% on the day.',
),
condition=condition,
)
# Send a message to devices subscribed to the combination of topics
# specified by the provided condition.
response = messaging.send(message)
# Response is a message ID string.
print('Successfully sent message:', response)
Iść
// Define a condition which will send to devices which are subscribed
// to either the Google stock or the tech industry topics.
condition := "'stock-GOOG' in topics || 'industry-tech' in topics"
// See documentation on defining a message payload.
message := &messaging.Message{
Data: map[string]string{
"score": "850",
"time": "2:45",
},
Condition: condition,
}
// Send a message to devices subscribed to the combination of topics
// specified by the provided condition.
response, err := client.Send(ctx, message)
if err != nil {
log.Fatalln(err)
}
// Response is a message ID string.
fmt.Println("Successfully sent message:", response)
C#
// Define a condition which will send to devices which are subscribed
// to either the Google stock or the tech industry topics.
var condition = "'stock-GOOG' in topics || 'industry-tech' in topics";
// See documentation on defining a message payload.
var message = new Message()
{
Notification = new Notification()
{
Title = "$GOOG up 1.43% on the day",
Body = "$GOOG gained 11.80 points to close at 835.67, up 1.43% on the day.",
},
Condition = condition,
};
// Send a message to devices subscribed to the combination of topics
// specified by the provided condition.
string response = await FirebaseMessaging.DefaultInstance.SendAsync(message);
// Response is a message ID string.
Console.WriteLine("Successfully sent message: " + response);
ODPOCZYNEK
POST https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send HTTP/1.1
Content-Type: application/json
Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA
{
"message":{
"condition": "'dogs' in topics || 'cats' in topics",
"notification" : {
"body" : "This is a Firebase Cloud Messaging Topic Message!",
"title" : "FCM Message",
}
}
}
polecenie cURL:
curl -X POST -H "Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA" -H "Content-Type: application/json" -d '{
"notification": {
"title": "FCM Message",
"body": "This is a Firebase Cloud Messaging Topic Message!",
},
"condition": "'dogs' in topics || 'cats' in topics"
}' https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send HTTP/1.1
Następne kroki
- Możesz użyć swojego serwera do subskrybowania instancji aplikacji klienckich do tematów i wykonywania innych zadań związanych z zarządzaniem. Zobacz Zarządzanie subskrypcjami tematów na serwerze .