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.
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kein Weg zu rufen onMessageReceived, es sei denn, die kommenden json enthält NUR Daten -, payload ' wie ich lernte von den FB-support.
So, ich habe mit Daten -, payload 'wenn Sie aber Daten -, payload' es nicht zeigen Benachrichtigung an der Spitze, so erstellen Sie Ihre benutzerdefinierte Benachrichtigung mit Daten -, payload-Informationen.
Also ich versendet Benachrichtigung an mich, wenn ich das Daten-payload in onMessageReceived. Und ich habe die Abzeichen in onMessageReceived direkt nach dem Absenden der Benachrichtigung, um zu mir selbst.
Folgende code ist die Finale version.
Dank für alles.
Nein,es ist nicht. Ich habe einige github-codes. Setbadge ist ein Teil davon.
Könnten Sie den link zu dem Github-code, den Sie verwendet haben
Okay sorry für meinen vorherigen Kommentar. Ich glaube, ich war verwirrt über setBadge Methode, weil ich versuche, um herauszufinden, welche Bibliothek für die Stunden und konnte nicht finden, alle zugehörigen Bibliothek. Das scheint die codes unter setBadge arbeiten können, ohne Bibliothek, aber ich denke mal nur für Samsung-Geräte=> stackoverflow.com/a/20261795/5528870 die Leute sagen, diese Bibliothek ist nett und funktioniert mit zahlreichen Geräten=> github.com/leolin310148/ShortcutBadger Auch habe ich gelernt, dass seit api-level 26 es ist eine Standard-Methode für die Einstellung Abzeichen. developer.android.com/training/notify-user/badges#java @Pratik
InformationsquelleAutor Hilal
Dinge tun beim Erhalt der Mitteilung-Nutzlasten in den hintergrund, nur überschreiben zzE in FirebaseMessagingService. Der name der Methode kann zwischen den Versionen wechseln, geben Sie einfach " @Override in die Klasse und sehen, was es schlägt für Sie. In meinem Fall fand ich zzD und zzE, und beim ausprobieren habe ich gemerkt, dass zzE hat die Daten, die ich wollte. zzD hatte einige wakelock-Zeug in seine extras. Der Rückgabewert des zzE im Grunde zeigt an, ob die Meldung bearbeitet wurde, also wenn Sie true zurück, wird das OS nicht zeigen, dass die Benachrichtigung. Ich ziehe zurück super.zzE(Vorsatz), nachdem ich getan habe, meine Dinge zu lassen, die OS Griff die Meldung auf.
Aktualisierung der badge wird nur an Trägerraketen unterstützt durch ShortcutBadger obwohl. Sie kann so ziemlich, was Sie wollen stattdessen obwohl.
Hier mein code (meine Benachrichtigungen enthalten "Abzeichen" in der Daten -, payload):
Nicht in der Lage zu finden, zzE()
Dies funktioniert mit FB 10.2.1, in späteren Versionen, die Methode wurde ausgeblendet. Dass die alte version funktioniert immer noch schön, obwohl, so ich ' m kleben mit es, bis eine andere Lösung kommt. Ich verstehe wirklich nicht, warum Sie würden ausblenden, dass, obwohl, ich sehe nicht, welchen Schaden Sie tun würde, um es Entwicklern zu ermöglichen, außer Kraft setzen, wie Benachrichtigungen angezeigt werden...
InformationsquelleAutor Pauli Kettunen
Android ohne custom Launcher und touch-Schnittstellen nicht erlauben das verändern der Programm-icon, denn es ist versiegelt in der .apk fest, sobald das Programm kompiliert wird. Es gibt keine Möglichkeit, es zu ändern, um eine 'drawable' programmgesteuert mithilfe der standard-APIs.Also der code unten funktioniert nur in Samsung,Htc,Sony etc.
für mehr info klicken Sie auf hier
InformationsquelleAutor Dhina k