FCM - Einstellung Abzeichen in onMessageReceived

Ich habe ein Android-Anwendung, wo ich bin mit einer bestimmten Methode, um zu zeigen, Benachrichtigungs-Nummer auf app Symbol. Jetzt möchte ich einstellen, dass die Nummer, wenn die Mitteilung empfangen wird.

Dachte ich, dass ich die Anzahl, wenn die Mitteilung erhielt, damit ich ihn innerhalb onMessageReceived Methode. Aber, mein problem ist , wenn meine app im hintergrund onMessageReceived - Methode nicht aufgerufen, so dass die Nummer der Meldung ist nicht festgelegt.

Folgendes ist mein code. Ich habe die Zahl innerhalb onMessageReceived. Ich habe bereits getestet setBadge Methode und kann überprüfen, ob es funktioniert. Das problem ist onMessageReceived ist noch nicht so genannt setBadge ist auch nicht genannt, was nicht die Anzahl.

@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;
}

Wenn ich suchte diese Problem, fand ich, dass, wenn die kommende Nachricht ist display-Meldung dann onMessageReceived wird nur aufgerufen, wenn app Vordergrund. Aber wenn die kommende Nachricht ist Daten-Nachricht dann onMessageReceived aufgerufen wird, auch wenn die app im hintergrund.

Aber mein Freund erzählte mir, wer schickt die Meldung(server-Seite), die Meldung geht schon, da beide Anzeige-und Daten-Nachricht. Er sagte, dass Daten-Objekt gefüllt.

Folgenden ist die JSON für nächsten Nachricht, es hat Daten-Objekt.

{  
   "to":"my_device_id",
   "priority":"high",

   "notification":{  
      "body":"Notification Body",
      "title":"Notification Title",
      "icon":"myicon",
      "sound":"default"
   },

   "data":{  
      "Nick":"DataNick",
      "Room":"DataRoom"
   }
}

Wenn ich nur Daten-Objekt, onMessageReceived heißt, Sie sagte aber, dass die Zeit der Benachrichtigung nicht erscheinen an der Spitze.

Nun, warum onMessageReceived wird nicht aufgerufen, wenn die Nachricht auch Daten-Nachricht. Sollte ich etwas anders machen, um Daten zu behandeln Botschaft? Es funktioniert dasselbe mit display-messaging-client-Seite.

Jede Hilfe würde geschätzt werden. Vielen Dank im Voraus.

Warum downvote ? Warum machst du keine Kommentar zu was ist falsch ?
Sollten Sie die codes, die Sie verwenden. Einfach zu sagen: das Szenario wird nicht viel helfen. stackoverflow.com/help/mcve
Veröffentlichen Sie code hier

InformationsquelleAutor Hilal | 2016-09-05

Schreibe einen Kommentar