[JAVA] Implementieren von Firebase Cloud Messaging in Android-Apps (2) - Empfangen von Nachrichten in Apps

Ich habe darüber geschrieben, wie man Firebase Cloud Messaging verwendet, um Push-Benachrichtigungen für Android-Apps einzuführen. In diesem Eintrag schreibe ich den Code, der erforderlich ist, um die Benachrichtigung tatsächlich zu erhalten, und fasse den Vorgang bis zum Erhalt der Benachrichtigung zusammen.

FCM-Nachrichtentyp

Es gibt zwei Arten von FCM-Nachrichten: Weitere Informationen finden Sie unter hier.

Nachrichtentyp Überblick
Benachrichtigungsnachricht Nachrichten, die von FCM im Auftrag der App verarbeitet werden. Da es mit einem vordefinierten Schlüssel gesendet wird, ist es nicht möglich, andere als die angegebenen Informationen zu senden.
Datennachricht Nachrichten, die die App direkt verarbeitet. Der Absender kann das Format der Nachricht frei bestimmen, z. B. den Schlüssel der Nachricht.

Es gibt zwei Hauptunterschiede zwischen den beiden.

Das Verhalten der App beim Empfang einer Nachricht ist wie folgt. In dem Fall, in dem "onMessageReceived" geschrieben ist, onMessageReceived-Dienstmethode, die die FirebaseMessagingService-Klasse erbt #onMessageReceived (com.google.firebase.messaging.RemoteMessage)) wird aufgerufen.

Nachrichtentyp Die App steht im Vordergrund App ist im Hintergrund
Benachrichtigungsnachricht Betreten Sie die Taskleiste onMessageReceived
Datennachricht onMessageReceived onMessageReceived

Benachrichtigungsnachrichten können auch Daten enthalten. Informationen zur Verwendung beider zusammen finden Sie unter hier.

Voraussetzungen

Firebase wurde dem Android-Projekt hinzugefügt. Informationen zum Hinzufügen finden Sie im vorherigen Eintrag (https://qiita.com/outerlet/items/e3fe96a3d1e15ed42573).

Umgebung

Es wird in der folgenden Umgebung ausgeführt.

Implementierung

Service-Definition

Erstellen Sie einen Dienst, der von [FirebaseMessagingService] erbt (https://firebase.google.com/docs/reference/android/com/google/firebase/messaging/FirebaseMessagingService). Dieser Dienst implementiert die folgenden zwei Methoden (es gibt andere Methoden, die implementiert werden können, die hier jedoch weggelassen werden).

Methode Timing aufgerufen werden
onNewToken Das Token (Zeichenfolge zur eindeutigen Identifizierung der Kombination aus Terminal + Anwendung) wurde aktualisiert
onMessageReceived Erhielt eine Benachrichtigung

Ich habe versucht, jede Methode zu implementieren. Wenn das Token aktualisiert wird, ist normalerweise eine Verarbeitung wie das Speichern auf dem Server erforderlich, aber hier wird es nur protokolliert.

MyFirebaseMessagingService.java


public class MyFirebaseMessagingService extends FirebaseMessagingService {
    @Override
    public void onNewToken(String token) {
        //Holen Sie sich ein Token, um das Gerät + die App eindeutig zu identifizieren
        Log.i("FIREBASE", "[SERVICE] Token = " + token);
    }

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        if (remoteMessage != null) {
            //Benachrichtigungsnachricht
            RemoteMessage.Notification notification = remoteMessage.getNotification();
            if (notification != null) {
                //Behandeln Sie Benachrichtigungsnachrichten
            }

            //Datennachricht
            Map<String, String> data = remoteMessage.getData();
            if (data != null) {
                //Datenmeldungen verarbeiten
            }
        }
    }
}

MyFirebaseMessagingService.kt


class MyFirebaseMessagingService : FirebaseMessagingService() {
    override fun onNewToken(token: String?) {
        //Holen Sie sich ein Token, um das Gerät + die App eindeutig zu identifizieren
        Log.i("FIREBASE", "[SERVICE] Token = ${token ?: "Empty"}")
    }

    override fun onMessageReceived(remoteMessage: RemoteMessage?) {
        remoteMessage?.let { message ->
            //Benachrichtigungsnachricht
            message.notification?.let {
                //Behandeln Sie Benachrichtigungsnachrichten
            }

            //Datennachricht
            message.data?.let {
                //Datenmeldungen verarbeiten
            }
        }
    }
}

Registrieren Sie den erstellten Dienst in AndroidManifest.xml.

AndroidManifest.xml


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

Überprüfen Sie das neueste Token

"Terminalregistrierungstoken" (im Folgenden "Token") ist eine Zeichenfolge zur eindeutigen Identifizierung der Kombination von Terminal + Anwendung. Verwenden Sie diese Option, um eine Nachricht an die App zu senden. Das Token kann ** aufgrund von Benutzer- oder serverseitigen Umständen ** aktualisiert werden. Es wird empfohlen, immer das neueste Token zu erhalten. Ich halte es daher für angebracht, es so zu implementieren, dass es beim Start der Anwendung bestätigt wird. Der Code zum Abrufen des Tokens ist unten.

Holen Sie sich Token(Java)


FirebaseInstanceId.getInstance().getInstanceId().addOnCompleteListener((task) -> {
    if (!task.isSuccessful()) {
        Log.w("FIREBASE", "getInstanceId failed.", task.getException());
        return;
    }

    String token = (task.getResult() == null) ? "empty" : task.getResult().getToken();
    Log.i("FIREBASE", "[CALLBACK] Token = " + token);
});

Holen Sie sich Token(Kotlin)


FirebaseInstanceId.getInstance().instanceId.addOnCompleteListener { task ->
    if (!task.isSuccessful) {
        Log.w("FIREBASE", "getInstanceId failed", task.exception)
        return@addOnCompleteListener
    }

    Log.i("FIREBASE", "[CALLBACK] Token = ${task.result?.token}")
}

FCM-Nachricht empfangen

Wenn eine Nachricht empfangen wird, wird onMessageReceived (RemoteMessage) aufgerufen, das in einer Unterklasse von FirebaseMessagingService implementiert ist. Darin definieren Sie die Logik zum Parsen und Behandeln der Nachricht. Der Beispielcode im Abschnitt "Service Definition" entspricht jeder Benachrichtigungsnachricht und Datennachricht. bitte bestätigen.

FCM-Nachricht senden

An diesem Punkt sind Sie bereit, die Nachricht zu empfangen. Sie können eine Nachricht mit der Firebase-Konsole oder einer HTTP-Anfrage senden. Probieren Sie es aus.

a. Von der Konsole senden

Um eine Benachrichtigung zu senden, melden Sie sich bei der Firebase-Konsole an, öffnen Sie das gewünschte Projekt und gehen Sie zu "Cloud Messaging". Klicken Sie auf "Erste Nachricht senden". fcm1.png

Wenn es das zweite Mal oder später ist, werden die bisher gesendeten Nachrichten aufgelistet. Klicken Sie oben links auf dem Bildschirm auf "Neue Benachrichtigung", um eine neue Nachricht zu senden. Sie können auch eine vorhandene Nachricht duplizieren. fcm2.png

b. Senden mit cURL

Verwenden Sie dann cURL, um sowohl die Benachrichtigungsnachricht als auch die Datennachricht zu senden. Ich werde die Einführung und Verwendung von cURL weglassen.

Überprüfen Sie den Serverschlüssel. Klicken Sie in der Firebase-Konsole auf das zahnradförmige Einstellungssymbol ①, um den Bildschirm zu öffnen. Klicken Sie im Einstellungsbildschirm auf die Registerkarte "Cloud Messaging" ②. "Serverschlüssel" ③ wird angezeigt, machen Sie also eine Kopie davon. fcm27.png

Das Folgende ist ein Beispiel für einen Befehl zum Senden einer Datennachricht.

SERVER_KEY=(Serverschlüssel)
TARGET_TOKEN=(Zeichen)

curl -X POST -H "Content-Type:application/json" \
     -H "Authorization:key=$SERVER_KEY" \
     -d "{\"data\":{\"name\" : \"Taro Nihon\",\"age\" : \"20\",\"address\" : \"Tokyo\"},\"to\" : \"$TARGET_TOKEN\"}" \
     https://fcm.googleapis.com/fcm/send

Zusammenfassung

Ich habe vom Schreiben des Codes bis zum Empfang der Nachricht geschrieben. Obwohl die FCM-Nachricht hier mit dem Mindestinhalt erstellt wird, kann sie verschiedene andere Informationen wie Ablaufdatum und Priorität enthalten. Bitte beachten Sie Folgendes und probieren Sie verschiedene Implementierungen aus.

Versionsgeschichte

Recommended Posts

Implementieren von Firebase Cloud Messaging in Android-Apps (2) - Empfangen von Nachrichten in Apps
Holen Sie sich Ihre Versionsnummer in der Android-App
Machen Sie PUSH-Benachrichtigungen mit Bildern mit Firebase Cloud Messaging
[Android] Implementieren Sie Adblock in WebView