Check out what’s new from Firebase at Google I/O 2022. Learn more

Richten Sie eine Firebase Cloud Messaging-Client-App auf Android ein

FCM-Clients erfordern Geräte mit Android 4.4 oder höher, auf denen auch die Google Play Store-App installiert ist, oder einen Emulator mit Android 4.4 mit Google-APIs. Beachten Sie, dass Sie nicht darauf beschränkt sind, Ihre Android-Apps über den Google Play Store bereitzustellen.

Richten Sie das SDK ein

Dieser Abschnitt behandelt Aufgaben, die Sie möglicherweise abgeschlossen haben, wenn Sie bereits andere Firebase-Funktionen für Ihre App aktiviert haben. Fügen Sie Ihrem Android-Projekt Firebase hinzu, falls Sie dies noch nicht getan haben

Bearbeiten Sie Ihr App-Manifest

Fügen Sie dem Manifest Ihrer App Folgendes hinzu:

  • Ein Dienst, der FirebaseMessagingService erweitert. Dies ist erforderlich, wenn Sie Nachrichten verarbeiten möchten, die über den Empfang von Benachrichtigungen zu Apps im Hintergrund hinausgehen. Um Benachrichtigungen in Apps im Vordergrund zu erhalten, Datennutzlast zu empfangen, Upstream-Nachrichten zu senden usw. müssen Sie diesen Dienst erweitern.
  • <service
        android:name=".java.MyFirebaseMessagingService"
        android:exported="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>
  • (Optional) Innerhalb der Anwendungskomponente Metadatenelemente zum Festlegen eines Standardbenachrichtigungssymbols und einer Standardfarbe. Android verwendet diese Werte, wenn eingehende Nachrichten das Symbol oder die Farbe nicht explizit festlegen.
  • <!-- 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" />
  • (Optional) Ab Android 8.0 (API-Level 26) und höher werden Benachrichtigungskanäle unterstützt und empfohlen. FCM bietet einen Standard-Benachrichtigungskanal mit grundlegenden Einstellungen. Wenn Sie es vorziehen, Ihren eigenen Standardkanal zu erstellen und zu verwenden, setzen default_notification_channel_id wie gezeigt auf die ID Ihres Benachrichtigungskanalobjekts; FCM verwendet diesen Wert immer dann, wenn eingehende Nachrichten keinen Benachrichtigungskanal explizit festlegen. Weitere Informationen finden Sie unter Benachrichtigungskanäle verwalten .
  • <meta-data
        android:name="com.google.firebase.messaging.default_notification_channel_id"
        android:value="@string/default_notification_channel_id" />

Greifen Sie auf das Geräteregistrierungstoken zu

Beim ersten Start Ihrer App generiert das FCM SDK ein Registrierungstoken für die Client-App-Instanz. Wenn Sie auf einzelne Geräte abzielen oder Gerätegruppen erstellen möchten, müssen Sie auf dieses Token zugreifen, indem Sie FirebaseMessagingService erweitern und onNewToken überschreiben.

In diesem Abschnitt wird beschrieben, wie Sie das Token abrufen und Änderungen am Token überwachen. Da das Token nach dem ersten Start rotiert werden kann, wird dringend empfohlen, das neueste aktualisierte Registrierungstoken abzurufen.

Das Registrierungstoken kann sich ändern, wenn:

  • Die App wird auf einem neuen Gerät wiederhergestellt
  • Der Benutzer deinstalliert/installiert die App neu
  • Der Benutzer löscht App-Daten.

Rufen Sie das aktuelle Registrierungstoken ab

Wenn Sie das aktuelle Token abrufen müssen, rufen Sie FirebaseMessaging.getInstance().getToken() :

Java

FirebaseMessaging.getInstance().getToken()
    .addOnCompleteListener(new OnCompleteListener<String>() {
        @Override
        public void onComplete(@NonNull Task<String> task) {
          if (!task.isSuccessful()) {
            Log.w(TAG, "Fetching FCM registration token failed", task.getException());
            return;
          }

          // Get new FCM registration token
          String token = task.getResult();

          // Log and toast
          String msg = getString(R.string.msg_token_fmt, token);
          Log.d(TAG, msg);
          Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
        }
    });

Kotlin+KTX

FirebaseMessaging.getInstance().token.addOnCompleteListener(OnCompleteListener { task ->
    if (!task.isSuccessful) {
        Log.w(TAG, "Fetching FCM registration token failed", task.exception)
        return@OnCompleteListener
    }

    // Get new FCM registration token
    val token = task.result

    // Log and toast
    val msg = getString(R.string.msg_token_fmt, token)
    Log.d(TAG, msg)
    Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show()
})

Überwachen Sie die Token-Generierung

Der onNewToken Callback wird immer dann ausgelöst, wenn ein neues Token generiert wird.

Java

/**
 * There are two scenarios when onNewToken is called:
 * 1) When a new token is generated on initial app startup
 * 2) Whenever an existing token is changed
 * Under #2, there are three scenarios when the existing token is changed:
 * A) App is restored to a new device
 * B) User uninstalls/reinstalls the app
 * C) User clears app data
 */
@Override
public void onNewToken(String token) {
    Log.d(TAG, "Refreshed token: " + token);

    // If you want to send messages to this application instance or
    // manage this apps subscriptions on the server side, send the
    // FCM registration token to your app server.
    sendRegistrationToServer(token);
}

Kotlin+KTX

/**
 * Called if the FCM registration token is updated. This may occur if the security of
 * the previous token had been compromised. Note that this is called when the
 * FCM registration token is initially generated so this is where you would retrieve the token.
 */
override fun onNewToken(token: String) {
    Log.d(TAG, "Refreshed token: $token")

    // If you want to send messages to this application instance or
    // manage this apps subscriptions on the server side, send the
    // FCM registration token to your app server.
    sendRegistrationToServer(token)
}

Nachdem Sie das Token erhalten haben, können Sie es an Ihren App-Server senden und mit Ihrer bevorzugten Methode speichern.

Suchen Sie nach Google Play-Diensten

Apps, die auf das Play Services SDK angewiesen sind, sollten das Gerät immer auf ein kompatibles APK für Google Play-Dienste überprüfen, bevor sie auf die Funktionen der Google Play-Dienste zugreifen. Es wird empfohlen, dies an zwei Stellen zu tun: in der onCreate() -Methode der Hauptaktivität und in ihrer onResume() Methode. Der Check in onCreate() stellt sicher, dass die App ohne erfolgreiche Prüfung nicht verwendet werden kann. Die Überprüfung in onResume() stellt sicher, dass die Überprüfung dennoch durchgeführt wird, wenn der Benutzer auf andere Weise zur laufenden App zurückkehrt, z. B. über die Zurück-Schaltfläche.

Wenn das Gerät nicht über eine kompatible Version der Google Play-Dienste verfügt, kann Ihre App GoogleApiAvailability.makeGooglePlayServicesAvailable() aufrufen, um Benutzern das Herunterladen von Google Play-Diensten aus dem Play Store zu ermöglichen.

Automatische Initialisierung verhindern

Wenn ein FCM-Registrierungstoken generiert wird, lädt die Bibliothek die Kennung und die Konfigurationsdaten in Firebase hoch. Wenn Sie die automatische Tokengenerierung lieber verhindern möchten, deaktivieren Sie die Analytics-Erfassung und die automatische FCM-Initialisierung (Sie müssen beide deaktivieren), indem Sie diese Metadatenwerte zu Ihrer AndroidManifest.xml :

<meta-data
    android:name="firebase_messaging_auto_init_enabled"
    android:value="false" />
<meta-data
    android:name="firebase_analytics_collection_enabled"
    android:value="false" />

Um die automatische FCM-Initialisierung wieder zu aktivieren, führen Sie einen Laufzeitaufruf durch:

Java

FirebaseMessaging.getInstance().setAutoInitEnabled(true);

Kotlin+KTX

Firebase.messaging.isAutoInitEnabled = true

Um die Analytics-Erfassung wieder zu aktivieren, rufen Sie die setAnalyticsCollectionEnabled() Methode der FirebaseAnalytics -Klasse auf. Zum Beispiel:

setAnalyticsCollectionEnabled(true);

Diese Werte bleiben nach dem Festlegen über App-Neustarts hinweg bestehen.

Nächste Schritte

Nachdem die Client-App eingerichtet wurde, können Sie mit dem Senden von Downstream-Nachrichten mit dem Benachrichtigungs-Composer beginnen. Diese Funktionalität wird im Quickstart-Beispiel demonstriert, das Sie herunterladen, ausführen und überprüfen können.

Um Ihrer App ein anderes, erweitertes Verhalten hinzuzufügen, können Sie einen Absichtsfilter deklarieren und eine Aktivität implementieren, um auf eingehende Nachrichten zu reagieren. Einzelheiten finden Sie in den Anleitungen zum Senden von Nachrichten von einem App-Server:

Beachten Sie, dass Sie zur Nutzung dieser Funktionen eine Serverimplementierung und die Serverprotokolle (HTTP oder XMPP) oder eine Implementierung des Admin SDK benötigen.