Ich sende eine Push-Benachrichtigung von Firebase an meine Android-Anwendung. Wenn sich meine App jedoch im Hintergrund befindet, wird die Methode fireMase onMessageReceived nicht aufgerufen. Stattdessen sendet firebase eine Benachrichtigung an das System, um die Benachrichtigung in der Taskleiste anzuzeigen. Die Benachrichtigung wird in der Taskleiste angezeigt, aber es ist kein Benachrichtigungston zu hören, auch wenn ich in den Systemeinstellungen den Benachrichtigungston für meine App zugelassen habe.
Was kann ich tun, um Benachrichtigungston abzuspielen, wenn eine Benachrichtigung von Firebase empfangen wird?
Auf diese Weise sende ich eine Benachrichtigung von Firebase an meinen Blogpost-Link .
Antworten:
In der Benachrichtigungsnutzlast der Benachrichtigung befindet sich ein Soundschlüssel.
Aus der offiziellen Dokumentation geht hervor, dass:
Z.B:
{ "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...", "notification" : { "body" : "great match!", "title" : "Portugal vs. Denmark", "icon" : "myicon", "sound" : "mySound" } }
Wenn Sie den Standardton des Geräts verwenden möchten, sollten Sie Folgendes verwenden :
"sound": "default"
.Unter diesem Link finden Sie alle möglichen Schlüssel in den Nutzdaten: https://firebase.google.com/docs/cloud-messaging/http-server-ref#notification-payload-support
Für diejenigen, die Firebase nicht kennen, werden Benachrichtigungen anders behandelt, wenn sich die App im Hintergrund befindet. In diesem Fall wird die Funktion onMessageReceived nicht aufgerufen.
quelle
Wählen Sie erweiterte Optionen, wenn Sie eine Nachricht schreiben , und wählen Sie Sound aktiviert
Das ist meine Lösung
quelle
Versuche dies
{ "to" : "DEVICE-TOKEN", "notification" : { "body" : "NOTIFICATION BODY", "title" : "NOTIFICATION TITILE", "sound" : "default" } }
@note für benutzerdefinierten Benachrichtigungston: ->
"sound" : "MyCustomeSound.wav"
quelle
Die
onMessageReceived
Methode wird nur ausgelöst, wenn sich die App im Vordergrund befindet oder die Benachrichtigungsnutzdaten nur den Datentyp enthalten.Aus den Firebase-Dokumenten
Weiter unten in den Dokumenten
Wenn Sie die Firebase-Konsole zum Senden von Benachrichtigungen verwenden, enthält die Nutzlast immer den Benachrichtigungstyp. Sie müssen die Firebase-API verwenden, um die Benachrichtigung nur mit dem Datentyp in der Benachrichtigungsnutzlast zu senden. Auf diese Weise wird Ihre App immer benachrichtigt, wenn eine neue Benachrichtigung eingeht, und die App kann die Benachrichtigungsnutzlast verarbeiten.
Wenn Sie den Benachrichtigungston mit der herkömmlichen Methode im Hintergrund abspielen möchten, müssen Sie den Soundparameter zur Benachrichtigungsnutzlast hinzufügen .
quelle
Bei der HTTP v1-API ist das anders
Dokumentation
Beispiel:
{ "message":{ "topic":"news", "notification":{ "body":"Very good news", "title":"Good news" }, "android":{ "notification":{ "body":"Very good news", "title":"Good news", "sound":"default" } } } }
quelle
$this->message['message']['android']['notification']['sound'] = "default";
Ich hatte auch ein Problem mit Benachrichtigungen, die Ton ausgeben mussten. Als die App im Vordergrund stand, funktionierte alles korrekt, aber als die App im Hintergrund war, kam der Ton einfach nicht heraus.
Die Benachrichtigung wurde vom Server über FCM gesendet, dh der Server hat den JSON der Benachrichtigung bereitgestellt und an FCM gesendet, der die Benachrichtigung dann an die Apps sendet. Selbst wenn ich das Sound-Tag anbringe, kommt der Sound im Hintergrund nicht heraus.
Sogar das Setzen des Sound-Tags hat nicht funktioniert.
Nach so viel Suche fand ich die Lösung in einem Github-Forum. Ich bemerkte dann, dass es in meinem Fall zwei Probleme gab:
1 - Es fehlte das Senden des Tags channel_id, was für die Arbeit mit API-Level 26+ wichtig ist
2 - In der Android-Anwendung musste ich für diesen speziellen Fall, in dem Benachrichtigungen direkt vom Server gesendet wurden, die Kanal-ID im Voraus konfigurieren. In meiner Hauptaktivität musste ich den Kanal so konfigurieren, dass Android wusste, was wann zu tun ist Benachrichtigung angekommen.
In vom Server gesendetem JSON:
{ "title": string, "body": string, "icon": string, "color": string, "sound": mysound, "channel_id": videocall, //More stuff here ... }
In Ihrer Hauptaktivität:
@Background void createChannel(){ Uri sound = Uri.parse("android.resource://" + getApplicationContext().getPackageName() + "/" + R.raw.app_note_call); NotificationChannel mChannel; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { mChannel = new NotificationChannel("videocall", "VIDEO CALL", NotificationManager.IMPORTANCE_HIGH); mChannel.setLightColor(Color.GRAY); mChannel.enableLights(true); mChannel.setDescription("VIDEO CALL"); AudioAttributes audioAttributes = new AudioAttributes.Builder() .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) .setUsage(AudioAttributes.USAGE_ALARM) .build(); mChannel.setSound(sound, audioAttributes); NotificationManager notificationManager = (NotificationManager) getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.createNotificationChannel(mChannel); } }
Dies hat mein Problem endlich gelöst. Ich hoffe, es hilft jemandem, nicht 2 Tage wie ich zu verschwenden. Ich weiß nicht, ob es für alles notwendig ist, was ich in den Code eingefügt habe, aber das ist der Weg. Ich habe auch den Link zum Github-Forum nicht mehr gefunden, um die Antwort gutzuschreiben, da ich das gleiche getan habe, das dort gepostet wurde.
quelle
mag das
@Override public void onMessageReceived(RemoteMessage remoteMessage) { //codes..,.,, Uri sound= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); builder.setSound(sound); }
quelle
Versuche dies....
public void buildPushNotification(Context ctx, String content, int icon, CharSequence text, boolean silent) { Intent intent = new Intent(ctx, Activity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); PendingIntent pendingIntent = PendingIntent.getActivity(ctx, 1410, intent, PendingIntent.FLAG_ONE_SHOT); Bitmap bm = BitmapFactory.decodeResource(ctx.getResources(), //large drawable); NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(ctx) .setSmallIcon(icon) .setLargeIcon(bm) .setContentTitle(content) .setContentText(text) .setAutoCancel(true) .setContentIntent(pendingIntent); if(!silent) notificationBuilder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)); NotificationManager notificationManager = (NotificationManager) ctx.getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(1410, notificationBuilder.build()); }
@Override public void onMessageReceived(RemoteMessage remoteMessage) { Log.d("Msg", "Message received [" + remoteMessage.getNotification().getBody() + "]"); buildPushNotification(/*your param*/); }
oder folge KongJing , ist auch richtig, wie er sagt, aber du kannst eine Firebase-Konsole verwenden.
quelle
Ich kann Benachrichtigungston wiedergeben, auch wenn ich ihn von der Firebase-Konsole sende. Dazu müssen Sie nur die Taste "Sound" mit dem Wert "Standard" im Voraus hinzufügen.
quelle