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.
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.
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.
Il est réalisé dans l'environnement suivant.
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>
«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}")
}
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.
À 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.
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».
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.
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.
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
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.
Recommended Posts