Je souhaite ouvrir l'application automatiquement lorsque la notification est reçue. Est-ce possible avec Firebase et les nouvelles notifications FCM?
Je sais que je peux définir click_action, mais ce n'est que pour personnaliser l'activité qui va démarrer lorsque vous cliquez sur la notification. J'ai besoin de quelque chose qui démarre automatiquement lorsque la notification est reçue.
J'ai essayé l'exemple de démarrage rapide de la messagerie firebase et il existe une méthode onMessageReceived (), mais cela ne fonctionne que si l'application est au premier plan. Y a-t-il quelque chose qui s'exécutera pendant que l'application est également en arrière-plan? GCM pourrait faire quelque chose comme ce que je veux ici en démarrant directement l’intention d’activité du récepteur de diffusion appelée lorsque la notification est reçue.
Pour ouvrir automatiquement une application via FCM, vous devez utiliser un data-message
, Qui garantit de toujours invoquer la méthode FirebaseMessagingService.onMessageReceived()
.
Ensuite, vous pouvez ajouter votre logique dans la méthode .onMessageReceived()
pour démarrer l'activité préférée.
ATTENTION: lancer une interface utilisateur sans interaction de l'utilisateur est une très très mauvaise pratique pour la plupart des applications! Veuillez lire le MarkG répondre ici: Comment démarrer une activité à partir d'un service?
[...] Interrompre ce que l'utilisateur est en train de faire est considéré comme une mauvaise forme, en particulier par quelque chose qui est supposé fonctionner en arrière-plan.
Par conséquent, vous devriez envisager d'utiliser une notification [...] pour lancer l'activité souhaitée lorsque l'utilisateur décide qu'il est temps d'enquêter. [...]
FCM fonctionne de manière similaire à GCM et peut recevoir deux types de messages:
{"notification" : { "body" : "hello world"}}
FirebaseMessagingService.onMessageReceived()
si l'application est déjà présente. premier plan.{"data" : { "key1" : "value1"}}
FirebaseMessagingService.onMessageReceived()
,click_action
Est un paramètre de la charge de notification, il s'applique donc aux messages d'affichage.
Indique l'action associée à un utilisateur, cliquez sur la notification.
Si cette option est définie, une activité avec un filtre d'intention correspondant est lancée lorsque l'utilisateur clique sur la notification .
https://firebase.google.com/docs/cloud-messaging/http-server-ref#notification-payload-support
Cela ressemble à cette section du guide est la clé du puzzle des applications avec arrière-plan:
Pour recevoir des messages
Utilisez un service qui s'étend FirebaseMessagingService . Votre service doit remplacer le callbackonMessageReceived
, qui est fourni pour la plupart des types de message, avec les exceptions suivantes:Notifications envoyées lorsque votre application est en arrière-plan.
Dans ce cas, la notification est transmise à la barre d'état système du périphérique. Un utilisateur tapant sur une notification ouvre le lanceur d'applications par défaut.Messages contenant à la fois des notifications et des données utiles
Dans ce cas, la notification est transmise à la barre des tâches système du périphérique et la charge utile de données est livrée dans les extras de l’intention de votre activité de lanceur.
En gros, lorsque l'application est en arrière-plan, elle n'est pas vraiment réactive ou en cours d'exécution. Au lieu de cela, le message est remis à la barre d'état système. Cependant, juste en dessous, la solution est expliquée.
Si vous souhaitez ouvrir votre application et effectuer une action spécifique [en tâche de fond], définissez click_action dans le contenu de la notification et mappez-le à un filtre d'intention dans l'activité que vous souhaitez lancer. Par exemple, définissez click_action sur OPEN_ACTIVITY_1 pour déclencher un filtre d'intention semblable à celui-ci:
<intent-filter>
<action Android:name="OPEN_ACTIVITY_1" />
<category Android:name="Android.intent.category.DEFAULT" />
</intent-filter>
Je résume les étapes ici, j'espère que c'est utile
ÉTAPE 1
Suivant Guide de l'utilisateur FCM . Assurez-vous que tout fonctionne correctement en envoyant un message de console Firebase .
ÉTAPE 2
Modifiez votre classe FirebaseMessagingService personnalisée comme suit:
public class MyFirebaseMessagingService extends FirebaseMessagingService {
private static final String TAG = "MyFirebaseMsgService";
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
Log.d(TAG, "From: " + remoteMessage.getFrom());
startActivity(new Intent(this, SplashActivity.class));
}
}
Maintenant, en utilisant à nouveau les messages Push de la console Firebase, vous constaterez que onMessageReceived
ne se déclenche que lorsque votre application est au premier plan. Parce que la console Firebase est capable d’envoyer Notification message
Uniquement. Pour envoyer Data message
, Nous avons besoin de l’étape 3.
ÉTAPE 3
Installer Google Advanced REST client
Entrée ci-dessous params:
url: https://fcm.googleapis.com/fcm/send
method: POST
Raw header:
Content-Type: application/json
Authorization:key=YOUR_SERVER_KEY
Raw payload:
{
"to" : "YOUR_DEVICE_FCM_TOKEN",
"data" : {
"Nick" : "Mario",
"body" : "great match!",
"Room" : "PortugalVSDenmark"
},
}
YOUR_SERVER_KEY est disponible dans la console Firebase> volet Paramètres> onglet Cloud Messaging
YOUR_DEVICE_FCM_TOKEN est FirebaseInstanceId.getInstance().getToken()
sur onTokenRefresh()
[~ # ~] note [~ # ~]
Démarrer l'interface utilisateur sans interaction de l'utilisateur est une mauvaise UX, vous devrez peut-être remplacer l'activité de démarrage par le service de démarrage ou quelque chose en arrière-plan. J'utilise uniquement l'activité à des fins de test, ce sera donc plus visuel que le service. Merci @ 2ndgab pour avoir introduit l'outil Google Advanced REST client.
[Android] Si vous utilisez les notifications Firebase (et non Firebase Cloud Messaging), vous devez simplement inclure Firebase Messaging dans votre build.gradle, puis lier votre application à un projet dans Firebase Console.
Si votre application est en arrière-plan, tout message envoyé à partir de la console vous donnera une notification système qui, si vous la touchez, activera votre application.
Jetez un oeil ici: https://youtu.be/KpTSpVh9SfY?t=10m22s