Usługa Firebase Cloud Messaging zapewnia dwa sposoby kierowania wiadomości do wielu urządzeń:
- Wiadomości tematyczne , które umożliwiają wysyłanie wiadomości do wielu urządzeń, które wybrały określony temat.
- Wiadomości grupowe urządzeń , które umożliwiają wysyłanie wiadomości do wielu urządzeń należących do zdefiniowanej przez Ciebie grupy.
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
) dodaj wtyczkę usług Google jako zależność buildscript:buildscript { repositories { // Make sure that you have the following two repositories google() // Google's Maven repository mavenCentral() // Maven Central repository } dependencies { ... // Add the dependency for the Google services Gradle plugin classpath 'com.google.gms:google-services:4.3.15' } } allprojects { ... repositories { // Make sure that you have the following two repositories google() // Google's Maven repository mavenCentral() // Maven Central repository } }
W pliku Gradle modułu (na poziomie aplikacji) (zwykle
<project>/<app-module>/build.gradle
) dodaj wtyczkę usług Google: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
) dodaj zależność dla biblioteki Firebase Cloud Messaging Android. 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.
Java
dependencies { // Import the BoM for the Firebase platform implementation platform('com.google.firebase:firebase-bom:32.1.0') // 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.1.2' implementation 'com.google.firebase:firebase-analytics:21.3.0' }
Kotlin+KTX
dependencies { // Import the BoM for the Firebase platform implementation platform('com.google.firebase:firebase-bom:32.1.0') // 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.1.2' implementation 'com.google.firebase:firebase-analytics-ktx: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
na poziomie aplikacji . - Zwiększ
minSdkVersion
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
. Powinien obsłużyć każdą wiadomość w ciągu 20 sekund od otrzymania (10 sekund na Androidzie Marshmallow). Okno czasowe może być krótsze w zależności od opóźnień systemu operacyjnego przed wywołaniem onMessageReceived
. Po tym czasie różne zachowania systemu operacyjnego, takie jak limity wykonywania w tle Androida O, mogą przeszkadzać w ukończeniu pracy. Aby uzyskać więcej informacji, zapoznaj się z naszym przeglądem priorytetów wiadomości .
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.
Wgląd w dostarczanie 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 .
- Dowiedz się więcej o innym sposobie wysyłania do wielu urządzeń — Wiadomości grupowe urządzeń