Ouvrez l'app sur firebase notification reçue (FCM)

je veux ouvrir la demande automatiquement lorsque la notification est reçue, est - ce possible avec Firebase et de nouvelles notifications FCM?

je sais que je peux définir click_action mais c'est seulement pour personnaliser quelle activité va commencer sur le clic de notification, j'ai besoin de quelque chose qui va démarrer automatiquement lorsque la notification est reçue.

j'ai essayé l'échantillon firebase de messagerie quick start et il y a une méthode onMessageReceived() mais cela ne fonctionne que si l'application est en arrière plan. Est-il quelque chose qui va exécuter tandis que l'application est en arrière-plan? GCM pourrait faire quelque chose comme ce que je veux ici en démarrant directement l'intention de l'activité de récepteur de radiodiffusion qui est appelé lorsque la notification est reçue.

27
demandé sur Frank van Puffelen 2016-05-31 22:38:39

4 réponses

réponse rapide:

pour ouvrir automatiquement une application via FCM , vous devez utiliser un data-message , qui garantit d'invoquer toujours la méthode FirebaseMessagingService.onMessageReceived() .

alors vous pouvez ajouter votre logique dans la méthode .onMessageReceived() pour démarrer l'activité préférée.

avertissement: lancer une interface utilisateur sans aucune interaction avec l'utilisateur est une très très mauvaise pratique pour la plupart des applications! Veuillez lire les MarkG réponse 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 de conception, en particulier à partir de quelque chose qui est censé fonctionner à l'arrière-plan.

Par conséquent, vous devriez envisager d'utiliser une Notification [...] pour lancer l'Activité désirée lorsque l'utilisateur décide qu'il est temps pour étudier. [...]

explication complète:

FCM fonctionne de la même manière que GCM et peut recevoir deux types de messages:

  1. affichage des messages:

    la charge utile {"notification" : { "body" : "hello world"}}

    Ces messages sont affichés automatiquement lorsque l'application est en arrière plan et ils appellent FirebaseMessagingService.onMessageReceived() si l'application est déjà en avant plan.



  2. messages de données:

    charge utile {"data" : { "key1" : "value1"}}

    Ces messages invoquent toujours FirebaseMessagingService.onMessageReceived() ,

    même si l'application est fermée ou en arrière-plan.

click_action est un paramètre de la charge utile de notification, il s'applique donc aux messages d'affichage.

indique l'action associée à un clic utilisateur sur la notification.

Si cela est défini une activité avec un filtre d'intention correspondant est lancé lorsque l'utilisateur clique sur la notification .

https://firebase.google.com/docs/cloud-messaging/http-server-ref#notification-payload-support

45
répondu Diego Giorgini 2017-05-23 12:02:39

Ça ressemble à du cette section du guide est la clé de l'énigme de backgrounded apps:

Pour recevoir des messages

Utiliser un service qui s'étend FirebaseMessagingService . Votre service devrait outrepasser le rappel onMessageReceived , qui est fourni pour la plupart des messages types, avec les exceptions suivantes:

Notifications livrées lorsque votre application est à l'arrière-plan.

Dans ce cas, la notification est envoyée au plateau du système de l'appareil. Un le tap utilisateur sur une notification ouvre le lanceur de l'application par défaut.

Messages avec notification et charge utile de données.

Dans ce cas, l' avis est transmis à l'appareil du système plateau, et les données la charge utile est livré dans les extras de l'intention de votre lanceur Activité.

essentiellement, lorsque l'application est en arrière-plan, elle n'est pas vraiment réactive ou en cours d'exécution à ce point. Ainsi, le message est livré sur le plateau du système. Cependant, juste en dessous, la solution est expliquée.

si vous souhaitez ouvrir votre application et effectuer une action spécifique [alors que backgrounded], définir click_action dans le notification de la charge utile et l'associer à une intention filtre dans l'Activité que vous souhaitez lancer. Par exemple, définir click_action à OPEN_ACTIVITY_1 pour déclencher un filtre d'intention comme l'

<intent-filter>
  <action android:name="OPEN_ACTIVITY_1" />
  <category android:name="android.intent.category.DEFAULT" />
</intent-filter>
16
répondu Kato 2016-12-14 21:51:23

je résume les étapes ici, je l'espère, utile

étape 1

suite FCM user guide . Assurez-vous que tout fonctionne correctement en poussant un message de console Firebase .

l'ÉTAPE 2

changez la classe custom FirebaseMessagingService 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));
}
}

en utilisant à nouveau les messages push de la console Firebase, vous constaterez que onMessageReceived ne démarre que lorsque votre application est au premier plan. Parce que la console Firebase est capable d'envoyer Notification message seulement. Pour envoyer Data message , nous avons besoin de l'étape 3.

étape 3

Installer Avancés Google RESTE 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 > paramètres volet > l'onglet messagerie Cloud

YOUR_DEVICE_FCM_TOKEN is FirebaseInstanceId.getInstance().getToken() on onTokenRefresh()

NOTE

L'UI de démarrage sans l'interaction de l'utilisateur est mauvais UX, vous pourriez avoir besoin de remplacer l'activité de démarrage par le service de démarrage ou quelque chose dans l'arrière-plan. J'utilise juste l'activité pour tester le but, donc ce sera plus visuel que le service. Merci @2ndgab pour avoir introduit L'outil client repos avancé de Google.

7
répondu thanhbinh84 2017-07-14 08:44:28

[Android] Si vous utilisez des Notifications Firebase (et non Firebase Cloud Messaging), vous n'avez qu'à inclure la messagerie Firebase dans votre build.grader, puis lier votre application à un projet sur la Console Firebase.

si votre application est à l'arrière-plan, tout message envoyé depuis la console vous donnera une notification système, qui, si touchée, activera votre application.

Regardez ici: https://youtu.be/KpTSpVh9SfY?t=10m22s

1
répondu Laurence Moroney 2016-06-23 23:31:28