[JAVA] Mettre en œuvre Firebase Cloud Messaging dans les applications Android (2) -Recevoir des messages dans les applications

J'ai écrit sur la façon d'utiliser Firebase Cloud Messaging pour introduire des notifications push dans les applications Android. Dans cette entrée, j'écris le code nécessaire pour recevoir réellement la notification et je résume le processus jusqu'à la réception de la notification.

Type de message FCM

Il existe deux types de messages FCM: Pour plus d'informations, veuillez consulter ici.

Type de message Aperçu
Message de notification Messages traités par FCM au nom de l'application. Puisqu'il est envoyé à l'aide d'une clé prédéfinie, il n'est pas possible d'envoyer des informations autres que les informations spécifiées.
Message de données Messages que l'application traite directement. L'expéditeur peut décider librement du format du message, tel que la clé du message.

Il existe deux différences principales entre les deux.

Le comportement de l'application lors de la réception d'un message est le suivant. Dans le cas où "onMessageReceived" est écrit, [méthode de service onMessageReceived héritant de la classe FirebaseMessagingService](https://firebase.google.com/docs/reference/android/com/google/firebase/messaging/FirebaseMessagingService.html #onMessageReceived (com.google.firebase.messaging.RemoteMessage)) est appelé.

Type de message L'application est au premier plan L'application est en arrière-plan
Message de notification Entrez dans la barre des tâches onMessageReceived
Message de données onMessageReceived onMessageReceived

Les messages de notification peuvent également inclure des données. Veuillez consulter ici pour le cas d'utilisation des deux ensemble.

Conditions préalables

Firebase a été ajouté au projet Android. Voir l'entrée précédente (https://qiita.com/outerlet/items/e3fe96a3d1e15ed42573) pour savoir comment l'ajouter.

environnement

Il est réalisé dans l'environnement suivant.

la mise en oeuvre

Définition du service

Créez un service qui hérite de FirebaseMessagingService (https://firebase.google.com/docs/reference/android/com/google/firebase/messaging/FirebaseMessagingService). Ce service implémente les deux méthodes suivantes (il existe d'autres méthodes qui peuvent être implémentées, mais elles sont omises ici).

Méthode Moment d'être appelé
onNewToken Le jeton (chaîne de caractères pour identifier de manière unique la combinaison terminal + application) a été mis à jour
onMessageReceived Reçu une notification

J'ai essayé de mettre en œuvre chaque méthode. Normalement, lorsque le jeton est mis à jour, un traitement tel que son enregistrement sur le serveur est nécessaire, mais ici nous ne le consignons que.

MyFirebaseMessagingService.java


public class MyFirebaseMessagingService extends FirebaseMessagingService {
    @Override
    public void onNewToken(String token) {
        //Obtenez un jeton pour identifier de manière unique l'appareil + l'application
        Log.i("FIREBASE", "[SERVICE] Token = " + token);
    }

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        if (remoteMessage != null) {
            //Message de notification
            RemoteMessage.Notification notification = remoteMessage.getNotification();
            if (notification != null) {
                //Gérer les messages de notification
            }

            //Message de données
            Map<String, String> data = remoteMessage.getData();
            if (data != null) {
                //Traiter les messages de données
            }
        }
    }
}

MyFirebaseMessagingService.kt


class MyFirebaseMessagingService : FirebaseMessagingService() {
    override fun onNewToken(token: String?) {
        //Obtenez un jeton pour identifier de manière unique l'appareil + l'application
        Log.i("FIREBASE", "[SERVICE] Token = ${token ?: "Empty"}")
    }

    override fun onMessageReceived(remoteMessage: RemoteMessage?) {
        remoteMessage?.let { message ->
            //Message de notification
            message.notification?.let {
                //Gérer les messages de notification
            }

            //Message de données
            message.data?.let {
                //Traiter les messages de données
            }
        }
    }
}

Enregistrez le service créé dans AndroidManifest.xml.

AndroidManifest.xml


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

Vérifiez le dernier jeton

«Jeton d'enregistrement de terminal» (ci-après «jeton») est une chaîne de caractères pour identifier de manière unique la combinaison terminal + application. Utilisez ceci pour envoyer un message à l'application. Le jeton peut être mis à jour ** en raison des circonstances de l'utilisateur ou du côté serveur **. Il est recommandé de toujours obtenir le dernier jeton, je pense donc qu'il est approprié de l'implémenter afin qu'il soit confirmé au démarrage de l'application. Le code pour obtenir le jeton est ci-dessous.

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

Obtenir des jetons(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}")
}

Recevoir le message FCM

Lorsqu'un message est reçu, onMessageReceived (RemoteMessage) implémenté dans une sous-classe de FirebaseMessagingService est appelé. Dans celui-ci, vous définissez la logique de la façon d'analyser et de gérer le message. L'exemple de code dans la section «Définition du service» correspond à chaque message de notification et message de données. Veuillez confirmer.

Envoyer un message FCM

À ce stade, vous êtes prêt à recevoir le message. Vous pouvez envoyer un message avec la console Firebase ou une requête HTTP, alors essayez-le.

a. Envoyer depuis la console

Pour envoyer un message de notification, connectez-vous à la console Firebase, ouvrez le projet souhaité et accédez à «Cloud Messaging». Cliquez sur «Envoyez votre premier message». fcm1.png

Si c'est la deuxième fois ou plus tard, les messages envoyés jusqu'à présent sont répertoriés. Cliquez sur "Nouvelle notification" en haut à gauche de l'écran pour envoyer un nouveau message. Vous pouvez également dupliquer un message existant. fcm2.png

b. Envoyer avec cURL

Utilisez ensuite cURL pour envoyer à la fois le message de notification et le message de données. Je vais omettre l'introduction et l'utilisation de cURL.

Vérifiez la clé du serveur. Cliquez sur l'icône de réglage en forme d'engrenage ① sur la console Firebase pour ouvrir l'écran. Cliquez sur l'onglet «Cloud Messaging» ② sur l'écran de configuration. «Server key» ③ sera affiché, alors faites-en une copie. fcm27.png

Voici un exemple de commande pour envoyer un message de données.

SERVER_KEY=(Clé du serveur)
TARGET_TOKEN=(jeton)

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

Résumé

J'ai écrit de l'écriture du code à la réception du message. Bien que le message FCM soit créé avec le contenu minimum ici, il peut contenir diverses autres informations telles que la date d'expiration et la priorité. Veuillez vous référer à ce qui suit et essayer différentes implémentations.

Historique des révisions

Recommended Posts

Mettre en œuvre Firebase Cloud Messaging dans les applications Android (2) -Recevoir des messages dans les applications
Obtenez votre numéro de version dans l'application Android
Faire des notifications PUSH avec des images avec Firebase Cloud Messaging
[Android] Mettre en œuvre Adblock dans WebView