De la FCM - Réglage de l'insigne en onMessageReceived

J'ai une application Android, où je suis à l'aide d'une méthode pour afficher numéro de notification sur l'icône de l'application. Maintenant, je veux mettre ce numéro lors de la réception de la notification.

J'ai pensé que je devais définir le nombre lors de la notification reçue alors je l'ai mis à l'intérieur de onMessageReceived méthode. Mais, mon problème est lorsque mon application est en arrière-plan, onMessageReceived méthode n'est pas appelé, de sorte que le numéro de notification n'est pas définie.

Voici mon code. J'ai fixé le nombre à l'intérieur de onMessageReceived. Je l'ai déjà testé setBadge méthode et de vérifier qu'il fonctionne. Le problème est onMessageReceived n'est pas appelé ainsi setBadge est pas appelée, ce qui n'est pas de définir le nombre.

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
//TODO(developer): Handle FCM messages here.
Log.d(TAG, "From: " + remoteMessage.getFrom());
Conts.notificationCounter ++;
//I am setting in here.
setBadge(getApplicationContext(),Conts.notificationCounter  );
Log.e("notificationNUmber",":"+ Conts.notificationCounter);
//Check if message contains a data payload.
if (remoteMessage.getData().size() > 0) {
Log.d(TAG, "Message data payload: " + remoteMessage.getData());
}
//Check if message contains a notification payload.
if (remoteMessage.getNotification() != null) {
Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
}
//Also if you intend on generating your own notifications as a result of a received FCM
//message, here is where that should be initiated. See sendNotification method below.
}
//[END receive_message]
public static void setBadge(Context context, int count) {
String launcherClassName = getLauncherClassName(context);
if (launcherClassName == null) {
Log.e("classname","null");
return;
}
Intent intent = new Intent("android.intent.action.BADGE_COUNT_UPDATE");
intent.putExtra("badge_count", count);
intent.putExtra("badge_count_package_name", context.getPackageName());
intent.putExtra("badge_count_class_name", launcherClassName);
context.sendBroadcast(intent);
}
public static String getLauncherClassName(Context context) {
PackageManager pm = context.getPackageManager();
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> resolveInfos = pm.queryIntentActivities(intent, 0);
for (ResolveInfo resolveInfo : resolveInfos) {
String pkgName = resolveInfo.activityInfo.applicationInfo.packageName;
if (pkgName.equalsIgnoreCase(context.getPackageName())) {
String className = resolveInfo.activityInfo.name;
return className;
}
}
return null;
}

Quand j'ai cherché ce question, j'ai trouvé que si la venue message est afficher de message puis onMessageReceived est appelée uniquement si l'application est au premier plan. Mais si vous venez de message est message de données puis onMessageReceived, même si l'application est en arrière-plan.

Mais mon ami m'a dit qui est de l'envoi de la notification(côté serveur), le message va déjà comme à la fois l'affichage et le message de données. Il a dit que l'objet de données est remplie.

Suivant est le JSON pour à venir message, il a objet de données.

{  
"to":"my_device_id",
"priority":"high",
"notification":{  
"body":"Notification Body",
"title":"Notification Title",
"icon":"myicon",
"sound":"default"
},
"data":{  
"Nick":"DataNick",
"Room":"DataRoom"
}
}

Si je n'utilise que les données de l'objet, onMessageReceived est appelé comme ils l'ont dit, mais que le temps de notification ne s'affiche pas en haut.

Maintenant pourquoi onMessageReceived n'est pas appelée si le message est également le message de données. Dois-je faire quelque chose de différent pour gérer les données de message? Est-ce de travailler même avec affichage de la messagerie dans le côté client.

Toute aide serait appréciée. Merci à l'avance.

Pourquoi downvote ? Pourquoi ne pas faire un commentaire à propos de quoi est-ce mal ?
Vous devez fournir les codes que vous utilisez. Juste pour dire que le scénario ne va pas aider beaucoup. stackoverflow.com/help/mcve
Vous poster le code ici

OriginalL'auteur Hilal | 2016-09-05