Nachrichten an mehrere Geräte senden

Wenn Sie eine Nachricht an mehrere Geräte senden möchten, verwenden Sie Themen-Messaging. Mit dieser Funktion können Sie eine Nachricht an mehrere Geräte senden, die ein bestimmtes Thema aktiviert haben.

In dieser Anleitung geht es darum, Nachrichten zu Themen über den Admin SDK oder die REST API für FCM von Ihrem App-Server zu senden und in einer Android-App zu empfangen und zu verarbeiten. Wir behandeln die Nachrichtenverarbeitung sowohl für Apps im Hintergrund als auch im Vordergrund. Alle erforderlichen Schritte werden abgedeckt, von der Einrichtung bis zur Bestätigung.

SDK einrichten

Dieser Abschnitt enthält möglicherweise Schritte, die Sie bereits ausgeführt haben, wenn Sie eine Android-Client-App für FCM eingerichtet oder die Schritte zum Senden Ihrer ersten Nachricht ausgeführt haben.

Hinweis

  • Installieren Sie Android Studio oder aktualisieren Sie es auf die neueste Version.

  • Ihr Projekt muss die folgenden Anforderungen erfüllen. Beachten Sie, dass für einige Produkte strengere Anforderungen gelten können:

    • Auf API-Level 21 (Lollipop) oder höher ausgerichtet
    • Android 5.0 oder höher verwendet
    • Sie verwenden Jetpack (AndroidX) und erfüllen dabei die folgenden Versionsanforderungen:
      • com.android.tools.build:gradle v7.3.0 oder höher
      • compileSdkVersion 28 oder höher
  • Richten Sie ein physisches Gerät ein oder verwenden Sie einen Emulator, um Ihre App auszuführen.
    Für Firebase SDKs mit Abhängigkeit von Google Play-Diensten müssen auf dem Gerät oder Emulator Google Play-Dienste installiert sein.

  • Melden Sie sich mit Ihrem Google-Konto in Firebase an.

Wenn Sie noch kein Android-Projekt haben und nur ein Firebase-Produkt ausprobieren möchten, können Sie eines unserer Beispiele für den Schnellstart herunterladen.

Firebase-Projekt erstellen

Bevor Sie Firebase zu Ihrer Android-App hinzufügen können, müssen Sie ein Firebase-Projekt erstellen, um eine Verbindung zu Ihrer Android-App herzustellen. Weitere Informationen zu Firebase-Projekten finden Sie unter Firebase-Projekte.

  1. Klicken Sie in der Firebase Console auf Projekt hinzufügen.

    • Wenn Sie einem vorhandenen Google Cloud-Projekt Firebase-Ressourcen hinzufügen möchten, geben Sie den Projektnamen ein oder wählen Sie ihn aus dem Drop-down-Menü aus.

    • Geben Sie den gewünschten Projektnamen ein, um ein neues Projekt zu erstellen. Optional können Sie auch die Projekt-ID bearbeiten, die unter dem Projektnamen angezeigt wird.

  2. Lesen Sie sich die Firebase-Nutzungsbedingungen durch und akzeptieren Sie sie.

  3. Klicken Sie auf Weiter.

  4. Optional: Richten Sie Google Analytics für Ihr Projekt ein, um die folgenden Firebase-Produkte optimal nutzen zu können:

    Wählen Sie entweder ein vorhandenes Google Analytics-Konto aus oder erstellen Sie ein neues Konto.

    Wenn Sie ein neues Konto erstellen, wählen Sie Ihren AnalyticsSpeicherort für Berichte aus und akzeptieren Sie die Datenfreigabeeinstellungen und Google Analytics-Nutzungsbedingungen für Ihr Projekt.

  5. Klicken Sie auf Projekt erstellen (oder auf Firebase hinzufügen, wenn Sie ein vorhandenes Google Cloud-Projekt verwenden).

Firebase stellt automatisch Ressourcen für Ihr Firebase-Projekt bereit. Nach Abschluss des Vorgangs werden Sie zur Übersichtsseite für Ihr Firebase-Projekt in der Firebase Console weitergeleitet.

App bei Firebase registrieren

Wenn Sie Firebase in Ihrer Android-App verwenden möchten, müssen Sie Ihre App in Ihrem Firebase-Projekt registrieren. Die Registrierung Ihrer App wird oft als „Hinzufügen“ der App zu Ihrem Projekt bezeichnet.

  1. Rufen Sie die Firebase Console auf.

  2. Klicken Sie in der Mitte der Projektübersicht auf das Symbol Android () oder App hinzufügen, um den Einrichtungsworkflow zu starten.

  3. Geben Sie den Paketnamen Ihrer App in das Feld Android-Paketname ein.

    • Anhand des Paketnamens wird Ihre App auf dem Gerät und im Google Play Store eindeutig identifiziert.

    • Ein Paketname wird oft als Anwendungs-ID bezeichnet.

    • Suchen Sie in der Gradle-Datei des Moduls (auf App-Ebene, in der Regel app/build.gradle) nach dem Paketnamen Ihrer App. Beispiel für einen Paketnamen: com.yourcompany.yourproject.

    • Beachten Sie, dass der Paketname bei Groß- und Kleinschreibung unterscheidet und für diese Firebase-Android-App nicht mehr geändert werden kann, nachdem sie in Ihrem Firebase-Projekt registriert wurde.

  4. Optional: Geben Sie weitere App-Informationen ein: App-Alias und SHA-1-Wert des Signaturzertifikats für die Fehlerbehebung.

  5. Klicken Sie auf App registrieren.

Firebase-Konfigurationsdatei hinzufügen

  1. Laden Sie die Firebase-Android-Konfigurationsdatei (google-services.json) herunter und fügen Sie sie Ihrer App hinzu:

    1. Klicken Sie auf google-services.json herunterladen, um die Firebase-Android-Konfigurationsdatei abzurufen.

    2. Verschieben Sie die Konfigurationsdatei in das Stammverzeichnis des Moduls (auf App-Ebene) Ihrer App.

    • Die Firebase-Konfigurationsdatei enthält eindeutige, aber nicht verborgene Kennungen für Ihr Projekt. Weitere Informationen zu dieser Konfigurationsdatei finden Sie unter Firebase-Projekte.

    • Sie können Ihre Firebase-Konfigurationsdatei jederzeit wieder herunterladen.

    • Achten Sie darauf, dass der Name der Konfigurationsdatei keine zusätzlichen Zeichen wie z. B. (2) enthält.

  2. Wenn Sie die Werte in Ihrer google-services.json-Konfigurationsdatei für Firebase SDKs verfügbar machen möchten, benötigen Sie das Gradle-Plug-in für Google-Dienste (google-services).

    1. Fügen Sie das Google-Dienste-Plug-in als Abhängigkeit in die Gradle-Datei auf Stammebene (Projektebene) (<project>/build.gradle.kts oder <project>/build.gradle) ein:

      plugins {
        id("com.android.application") version "7.3.0" apply false
        // ...
      
        // Add the dependency for the Google services Gradle plugin
        id("com.google.gms.google-services") version "4.4.2" apply false
      }
      plugins {
        id 'com.android.application' version '7.3.0' apply false
        // ...
      
        // Add the dependency for the Google services Gradle plugin
        id 'com.google.gms.google-services' version '4.4.2' apply false
      }
    2. Fügen Sie in der Gradle-Datei des Moduls (auf App-Ebene) (in der Regel <project>/<app-module>/build.gradle.kts oder <project>/<app-module>/build.gradle) das Google-Dienste-Plug-in hinzu:

      plugins {
        id("com.android.application")
      
        // Add the Google services Gradle plugin
        id("com.google.gms.google-services")
        // ...
      }
      plugins {
        id 'com.android.application'
      
        // Add the Google services Gradle plugin
        id 'com.google.gms.google-services'
        // ...
      }

Firebase SDKs zu Ihrer App hinzufügen

  1. Fügen Sie in der Gradle-Datei des Moduls (auf Anwendungsebene) (in der Regel <project>/<app-module>/build.gradle.kts oder <project>/<app-module>/build.gradle) die Abhängigkeit für die Firebase Cloud Messaging-Bibliothek für Android hinzu. Wir empfehlen, Firebase Android BoM zu verwenden, um die Versionierung der Bibliothek zu steuern.

    Für eine optimale Nutzung von Firebase Cloud Messaging empfehlen wir, Google Analytics in Ihrem Firebase-Projekt zu aktivieren und Ihrer App das Firebase SDK für Google Analytics hinzuzufügen.

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:33.9.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")
    }

    Mit der Firebase Android BoM haben Sie immer eine kompatible Version der Firebase Android-Bibliotheken in Ihrer App.

    Wenn Sie die Firebase BoM nicht verwenden, müssen Sie jede Firebase-Bibliotheksversion in der entsprechenden Abhängigkeitszeile angeben.

    Wenn Sie mehrere Firebase-Bibliotheken in Ihrer App verwenden, empfehlen wir Ihnen dringend, die Bibliotheksversionen mithilfe der BoM zu verwalten. So wird sichergestellt, dass alle Versionen kompatibel sind.

    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:24.1.0")
        implementation("com.google.firebase:firebase-analytics:22.2.0")
    }
    Sie suchen nach einem Kotlin-spezifischen Bibliotheksmodul? Ab Oktober 2023 (Firebase BoM 32.5.0) können sowohl Kotlin- als auch Java-Entwickler das Hauptbibliotheksmodul verwenden. Weitere Informationen finden Sie in den häufig gestellten Fragen zu dieser Initiative.

  2. Synchronisieren Sie Ihr Android-Projekt mit Gradle-Dateien.

    Für Gradle-Builds, bei denen das Android Gradle-Plug-in (AGP) 4.2 oder niedriger verwendet wird, muss die Java 8-Unterstützung aktiviert werden. Andernfalls kommt es bei diesen Android-Projekten beim Hinzufügen eines Firebase SDK zu einem Build-Fehler.

    Sie haben zwei Möglichkeiten, diesen Buildfehler zu beheben:

    • Fügen Sie die aufgeführte compileOptions aus der Fehlermeldung der build.gradle.kts- oder build.gradle-Datei auf App-Ebene hinzu.
    • Erhöhen Sie die minSdk für Ihr Android-Projekt auf mindestens 26.

    Weitere Informationen zu diesem Buildfehler finden Sie in diesen FAQs.

Clientanwendung für ein Thema abonnieren

Client-Apps können jedes vorhandene Thema abonnieren oder ein neues Thema erstellen. Wenn eine Client-App einen neuen Themennamen abonniert, der für Ihr Firebase-Projekt noch nicht vorhanden ist, wird in FCM ein neues Thema mit diesem Namen erstellt. Dieses kann dann von allen Clients abonniert werden.

Um ein Thema zu abonnieren, ruft die Clientanwendung Firebase Cloud Messaging subscribeToTopic() mit dem Namen des Themas FCM auf. Diese Methode gibt eine Task zurück, mit der ein Abschluss-Listener feststellen kann, ob das Abo erfolgreich war:

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()
    }
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();
            }
        });

Zum Abbestellen ruft die Clientanwendung Firebase Cloud Messaging unsubscribeFromTopic() mit dem Namen des Themas auf.

Nachrichten zu Themen empfangen und bearbeiten

FCM liefert Themennachrichten auf die gleiche Weise wie andere Downstream-Nachrichten.

Verwenden Sie zum Empfangen von Nachrichten einen Dienst, der FirebaseMessagingService erweitert. Dein Dienst sollte die onMessageReceived- und onDeletedMessages-Callbacks überschreiben.

Das Zeitfenster für die Verarbeitung einer Nachricht kann kürzer als 20 Sekunden sein, je nach Verzögerungen vor dem Aufruf von onMessageReceived. Dazu gehören Betriebssystemverzögerungen, die App-Startzeit, das Blockieren des Hauptthreads durch andere Vorgänge oder zu lange vorherige onMessageReceived-Aufrufe. Danach können verschiedene Betriebssystemfunktionen wie das Beenden von Prozessen unter Android oder die Einschränkungen für die Ausführung im Hintergrund unter Android O Ihre Arbeit beeinträchtigen.

onMessageReceived wird für die meisten Nachrichtentypen bereitgestellt, mit folgenden Ausnahmen:

  • Benachrichtigungen, die gesendet werden, wenn Ihre App im Hintergrund ausgeführt wird In diesem Fall wird die Benachrichtigung in der Taskleiste des Geräts angezeigt. Wenn ein Nutzer auf eine Benachrichtigung tippt, wird standardmäßig der App Launcher geöffnet.

  • Nachrichten mit Benachrichtigungs- und Datennutzlast, die im Hintergrund empfangen werden In diesem Fall wird die Benachrichtigung an das Info-Symbol des Geräts gesendet und die Datennutzlast wird in den Extras der Intent-Aktivität Ihrer Launcher-Aktivität gesendet.

Zusammenfassung:

App-Status Benachrichtigung Daten Beides
Vordergrund onMessageReceived onMessageReceived onMessageReceived
Hintergrund Infobereich onMessageReceived Benachrichtigung: Infobereich
Daten: in den Extras der Intent-Datei.
Weitere Informationen zu Nachrichtentypen finden Sie unter Benachrichtigungen und Datennachrichten.

App-Manifest bearbeiten

Wenn Sie FirebaseMessagingService verwenden möchten, müssen Sie Ihrem App-Manifest Folgendes hinzufügen:

<service
    android:name=".java.MyFirebaseMessagingService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

Außerdem empfehlen wir Ihnen, Standardwerte festzulegen, um das Aussehen von Benachrichtigungen anzupassen. Sie können ein benutzerdefiniertes Standardsymbol und eine benutzerdefinierte Standardfarbe angeben, die angewendet werden, wenn in der Benachrichtigungsnutzlast keine entsprechenden Werte festgelegt sind.

Fügen Sie diese Zeilen in das application-Tag ein, um das benutzerdefinierte Standardsymbol und die benutzerdefinierte Farbe festzulegen:

<!-- 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 zeigt das benutzerdefinierte Standardsymbol für

  • Alle Benachrichtigungsnachrichten, die über den Benachrichtigungs-Editor gesendet wurden.
  • Alle Benachrichtigungsnachrichten, in denen das Symbol nicht explizit in der Benachrichtigungsnutzlast festgelegt ist.

Android verwendet die benutzerdefinierte Standardfarbe für:

  • Alle Benachrichtigungsnachrichten, die über den Benachrichtigungs-Editor gesendet wurden.
  • Alle Benachrichtigungsnachrichten, in denen die Farbe nicht explizit in der Benachrichtigungsnutzlast festgelegt ist.

Wenn kein benutzerdefiniertes Standardsymbol festgelegt ist und auch in der Benachrichtigungsnutzlast kein Symbol festgelegt ist, wird auf Android-Geräten das App-Symbol in weiß angezeigt.

onMessageReceived überschreiben

Wenn du die Methode FirebaseMessagingService.onMessageReceived überschreibst, kannst du Aktionen basierend auf dem empfangenen RemoteMessage-Objekt ausführen und die Nachrichtendaten abrufen:

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.
}
@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.
}

onDeletedMessages überschreiben

In einigen Fällen wird eine Nachricht von FCM möglicherweise nicht zugestellt. Das passiert, wenn zum Zeitpunkt der Verbindung zu viele Nachrichten (mehr als 100) für Ihre App auf einem bestimmten Gerät ausstehen oder wenn sich das Gerät seit mehr als einem Monat nicht mit FCM verbunden hat. In diesen Fällen erhalten Sie möglicherweise einen Callback an FirebaseMessagingService.onDeletedMessages(). Wenn die App-Instanz diesen Callback erhält, sollte eine vollständige Synchronisierung mit Ihrem App-Server erfolgen. Wenn Sie in den letzten vier Wochen keine Nachricht an die App auf diesem Gerät gesendet haben, ruft FCM onDeletedMessages() nicht an.

Benachrichtigungsnachrichten in einer App im Hintergrund verarbeiten

Wenn sich Ihre App im Hintergrund befindet, leitet Android Benachrichtigungsnachrichten an die Taskleiste weiter. Wenn ein Nutzer auf die Benachrichtigung tippt, wird standardmäßig der App Launcher geöffnet.

Dazu gehören Nachrichten, die sowohl Benachrichtigungs- als auch Datennutzlast enthalten, sowie alle Nachrichten, die über die Benachrichtigungskonsole gesendet wurden. In diesen Fällen wird die Benachrichtigung an das Info-Symbol des Geräts gesendet und die Datennutzlast wird in den Extras der Intent-Aktivität Ihres Launchers gesendet.

Informationen zur Zustellung von Nachrichten an Ihre App finden Sie im FCMBerichtsdashboard. Dort werden die Anzahl der auf Apple- und Android-Geräten gesendeten und geöffneten Nachrichten sowie Daten zu „Impressionen“ (von Nutzern gesehene Benachrichtigungen) für Android-Apps erfasst.

Sendeanfragen erstellen

Nachdem Sie ein Thema erstellt haben, indem Sie Client-App-Instanzen entweder clientseitig für das Thema abonniert oder die Server API verwendet haben, können Sie Nachrichten an das Thema senden. Wenn Sie zum ersten Mal Sendeanfragen für FCM erstellen, finden Sie im Leitfaden zu Ihrer Serverumgebung und FCM wichtige Hintergrundinformationen und Einrichtungsanleitungen.

Geben Sie in Ihrer Versandlogik im Backend den gewünschten Themennamen wie unten gezeigt an:

// 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);
  });
// 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);
# 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)
// 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)
// 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);
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"
      }
   }
}

cURL-Befehl:

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

Wenn Sie eine Nachricht an eine Kombination von Themen senden möchten, geben Sie eine Bedingung an. Das ist ein boolescher Ausdruck, der die Zielthemen angibt. Mit der folgenden Bedingung werden beispielsweise Nachrichten an Geräte gesendet, die TopicA und entweder TopicB oder TopicC abonniert haben:

"'TopicA' in topics && ('TopicB' in topics || 'TopicC' in topics)"

Bei FCM werden zuerst alle Bedingungen in Klammern und dann der Ausdruck von links nach rechts ausgewertet. In der obigen Ausdrucksform erhält ein Nutzer, der ein einzelnes Thema abonniert hat, die Nachricht nicht. Ein Nutzer, der TopicA nicht abonniert hat, erhält die Nachricht ebenfalls nicht. In folgenden Fällen erhalten Sie sie:

  • TopicA und TopicB
  • TopicA und TopicC

Sie können bis zu fünf Themen in den bedingten Ausdruck aufnehmen.

So senden Sie eine Anfrage an eine Bedingung:

// 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);
  });
// 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);
# 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)
// 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)
// 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);
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",
    }
  }
}

cURL-Befehl:

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

Nächste Schritte

  • Sie können Ihren Server verwenden, um Clientanwendungsinstanzen zu Themen zu abonnieren und andere Verwaltungsaufgaben auszuführen. Weitere Informationen finden Sie unter Themenabos auf dem Server verwalten.