Google FCM getIntent ne renvoie pas les données attendues lorsque l'application est dans l'état de l'arrière-plan

j'implémente FCM (Firebase messaging Service) dans mon application. Ici tout semble ok sauf quand app est dans l'état de l'arrière-plan Je ne suis pas en mesure d'extraire les données de notification attendues.

basé sur des concepts: il existe deux types de messages dans FCM:

display-messages : ces messages ne fonctionnent que lorsque votre application est en premier plan.

"1519130920 les données" messages : Ces messages fonctionne même si votre application est en arrière-plan Lorsque notre application est à l'arrière-plan, Android dirige les messages de notification vers le plateau du système.

pour gérer les "1519130920 les données" messages votre notification doit avoir click_action = "YOUR_ACTION" sur le terrain.

mon message sera comme ceci:

{
 "data": {
  "body": "here is body",
  "title": "Title",
  "click_action": "YOUR_ACTION"
 },
 "to": "ffEseX6vwcM:APA91bF8m7wOF MY FCM ID 07j1aPUb"
}

l'activité affichera le message que le fichier manifeste comme ceci:

<activity
            android:name=".NotificationActivity"
            android:screenOrientation="portrait"
            android:theme="@style/Theme.AppCompat.Dialog"
            android:windowSoftInputMode="stateHidden" >

            <intent-filter>
                <action android:name="YOUR_ACTION" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

après avoir cliqué sur la Notification, il redirigera vers mon NotificationActivity . Dans ma méthode NotificationActivity dans onCreate et onNewIntent j'extrait le message de cette façon:

Bundle bundle=getIntent().getExtras();
        if(bundle!=null) {
            for (String key : bundle.keySet()) {
                Object value = bundle.get(key);
                Log.d("DATA_SENT", String.format("%s %s (%s)", key,
                        value.toString(), value.getClass().getName()));
            }
        }

malheureusement dans mon NotificationActivity je reçois le message ci-dessous:

de google.sent_time : 1471631793774

de : 50711789666

de google.message_id 0:1471631793776823%098e508d098e508d

collapse_key : com.myapp.package_name

mais où sont mes données de notification attendues?

Voici la configuration de mon système:

Version Android Studio : 2.1.3

Firebase Version : COM.Google.firebase: firebase-auth: 9.0.1

Google Play la version du service : com.Google.Android.gms:jouer-services:9.2.1

voici quelques liens apparentés:

Merci d'avance. Désolé pour le mauvais anglais.

7
demandé sur Community 2016-08-19 22:16:19

1 réponses

la solution android de l'upper side est correcte. En fait, le message de notification était le problème. Il m'envoie l'objet " données "mais pas l'objet" notification". Manque de" notification "objet dans mon TargetActivity n'a pas reçu le message en utilisant getIntent() . Après avoir envoyé l'objet "notification" il a résolu mon problème.

le bon format de message est donné ci-dessous:

{
 "data": {
  "body": "here is body",
  "title": "Title"
 },
"notification": {
  "body": "here is body",
  "title": "Title",
  "click_action": "YOUR_ACTION"
 },
 "to": "ffEseX6vwcM:APA91bF8m7wOF MY FCM ID 07j1aPUb"
}

Voici des concepts plus clairs sur le message firebase. J'ai trouvé à partir de leur équipe de soutien. Firebase a trois types de messages :

messages de Notification : le message de Notification fonctionne sur l'arrière-plan ou les connaissances nouvelles. Quand app est en arrière-plan, les messages de Notification sont livrés au plateau du système. Si l'application est à l'avant-plan, les messages sont traités par les callbacks onMessageReceived() ou dideceiveremotenotification. Il s'agit essentiellement de ce qu'on appelle des messages D'affichage.

messages de données : sur la plate-forme Android, les messages de données peuvent fonctionner sur l'arrière-plan et l'avant-plan. Le message de données sera traité par onMessageReceived(). Une note spécifique à la plate-forme ici serait: sur Android, la charge utile de données peut être récupérée dans l'intention utilisée pour lancer votre activité. Pour préciser, si vous avez "click_action":" launch_Activity_1", vous pouvez récupérer cette intention par getIntent() à partir de seulement Activity_1.

Messages avec à la fois notification et charges utiles de données : En arrière-plan, les applications reçoivent la charge utile de notification dans la zone de notification, et ne gèrent la charge utile de données que lorsque l'utilisateur tape sur la notification. Au premier plan, votre application reçoit un objet message avec les deux charges utiles disponibles. Deuxièmement, le paramètre click_action est souvent utilisé dans la charge de notification et non dans la charge de données. Si utilisé inside data payload, ce paramètre serait traité comme personnalisé paire clé-valeur et, par conséquent, vous devez mettre en œuvre une logique personnalisée pour qu'il fonctionne comme prévu.

en outre, je vous recommande d'utiliser la méthode onMessageReceived (voir message de données) pour extraire le faisceau de données. D'après votre logique, j'ai vérifié l'objet bundle et je n'ai pas trouvé le contenu des données attendues. Voici une référence à un cas similaire qui pourrait apporter plus de clarté.

14
répondu Md. Sajedul Karim 2016-08-26 08:15:32