web-dev-qa-db-ger.com

Kein Benachrichtigungston beim Senden einer Benachrichtigung von Firebase in android

Ich sende eine Push-Benachrichtigung von der Firebase an meine Anwendung Android=), aber wenn sich meine App in der Firebase im Hintergrund befindet, wird die Methode onMessageReceived nicht aufgerufen, sondern die Firebase sendet eine Benachrichtigung an das System, um die Benachrichtigung in der Taskleiste anzuzeigen Taskleiste, aber kein Benachrichtigungston, auch wenn ich in den Systemeinstellungen Benachrichtigungston für meine App zugelassen habe.

was kann ich tun, um einen Benachrichtigungston abzuspielen, wenn eine Benachrichtigung von Firebase empfangen wird?.

So sende ich eine Benachrichtigung von firebase an meine App Blogpost-Link .

So fügen Sie eine Firebase in Ihre Android Application

58
Hammad Tariq

In der Benachrichtigungsnutzlast der Benachrichtigung befindet sich ein Soundschlüssel.

Aus der offiziellen Dokumentation geht hervor, dass es verwendet wird:

Zeigt einen Sound an, der abgespielt werden soll, wenn das Gerät eine Benachrichtigung erhält. Unterstützt Standard oder den Dateinamen einer in der App gebündelten Soundressource. Audiodateien müssen sich in/res/raw/befinden.

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 nicht wissen, wie Firebase Benachrichtigungen behandelt, wenn sich die App im Hintergrund befindet. In diesem Fall wird die Funktion onMessageReceived nicht aufgerufen.

Wenn sich Ihre App im Hintergrund befindet, leitet Android) Benachrichtigungsnachrichten an die Taskleiste. Wenn ein Benutzer auf die Benachrichtigung tippt, wird standardmäßig der App-Starter geöffnet. Dies schließt Nachrichten ein, die sowohl Benachrichtigungen als auch Nutzdaten enthalten. In diesen Fällen wird die Benachrichtigung in der Taskleiste des Geräts und die Datennutzlast in den Extras entsprechend der Absicht Ihrer Startaktivität übermittelt.

85
Isj

adavaced options wähle erweiterte Optionen wenn Schreibe eine Nachricht und wähle Ton aktiviert choose activated

das ist meine Lösung

22
KongJing

Versuche dies

{
    "to" : "DEVICE-TOKEN",

    "notification" : {
      "body"  : "NOTIFICATION BODY",
      "title" : "NOTIFICATION TITILE",
      "sound" : "default"
    }
  }

@note für benutzerdefinierten Benachrichtigungston: -> "sound" : "MyCustomeSound.wav"

14
Sameer

Die Methode onMessageReceived wird nur ausgelöst, wenn sich die App im Vordergrund befindet oder die Benachrichtigungs-Payload nur den Datentyp enthält.

Aus den Firebase-Dokumenten

Für Downstream-Messaging bietet FCM zwei Arten von Nutzdaten: Benachrichtigungsdaten und Daten . .

Für den Benachrichtigungstyp zeigt FCM die Nachricht für Endbenutzergeräte automatisch im Namen der Client-App an. Benachrichtigungen haben einen vordefinierten Satz von vom Benutzer sichtbaren Schlüsseln.
Für den Datentyp ist die Client-App für die Verarbeitung von Datennachrichten verantwortlich. Datennachrichten haben nur benutzerdefinierte Schlüssel-Wert-Paare.

Verwenden Sie Benachrichtigungen , wenn Sie möchten, dass FCM eine Benachrichtigung auf Ihrem Client anzeigt App im Namen. Verwenden Sie Datenmeldungen , wenn Ihre App die Anzeige oder den Prozess steuern soll die Nachrichten auf Ihrer Android Client-App, oder wenn Sie Nachrichten an iOS-Geräte senden möchten, wenn eine direkte FCM-Verbindung besteht.

Weiter unten im docs

App-Verhalten beim Empfang von Nachrichten, die sowohl Benachrichtigungs- als auch Datennutzdaten enthalten, hängt davon ab, ob sich die App im Hintergrund oder im Vordergrund befindet - im Wesentlichen davon, ob dies der Fall ist oder nicht zum Zeitpunkt des Eingangs aktiv.
Im Hintergrund empfangen Apps die Benachrichtigungsnutzlast in der Benachrichtigungsablage und verarbeiten die Datennutzlast nur, wenn der Benutzer auf die Schaltfläche tippt Benachrichtigung.
Im Vordergrund empfängt Ihre App ein Nachrichtenobjekt mit beiden verfügbaren Nutzdaten.

Wenn Sie die Firebase-Konsole zum Senden von Benachrichtigungen verwenden, enthält die Payload 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 Benachrichtigungsnutzdaten verarbeiten.

Wenn Sie Benachrichtigungssound abspielen möchten, während sich die App mit der herkömmlichen Methode im Hintergrund befindet, müssen Sie den Soundparameter hinzufügen zur Benachrichtigungsnutzlast hinzufügen.

9
Renjith

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"
       }
    }
  }
}
5
Andrey

mag das

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {

    //codes..,.,,

    Uri sound= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        builder.setSound(sound);

}
3
AAA

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());
    }

und rufen Sie es in onMessageReceived auf

 @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 benutzen.

1
chry

Ich kann den Benachrichtigungston auch dann wiedergeben, wenn ich ihn von der Firebase-Konsole aus sende. Dazu müssen Sie nur die Taste "sound" mit der Option "default" im Voraus hinzufügen.

0
Saeed Sharman