Подтвердить что ты не робот

Отсутствие уведомления при отправке уведомлений от firebase в android

Я отправляю push-уведомление от firebase на свое приложение для Android. но когда мое приложение находится в фоновом режиме firebase onMessageReceived метод не вызывается вместо firebase отправляет уведомление системе для отображения уведомлений в системном трее. уведомление появляется в системном трее, но нет звука для уведомления, даже я разрешил звук уведомления для моего приложения в системных настройках.

что я могу сделать, чтобы воспроизводить звук уведомления при получении уведомления от firebase.

Вот как я отправляю уведомление от firebase в мое приложение ссылка Blogpost.

Как добавить firebase в приложение для Android

4b9b3361

Ответ 1

В информационном сообщении уведомления есть звуковой ключ.

Из официальной документации его использование:

Указывает звук, который будет воспроизводиться, когда устройство получает уведомление. Поддерживает значение по умолчанию или имя файла звукового ресурса, связанного в приложение. Звуковые файлы должны находиться в /res/raw/.

Например:

{
    "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",

    "notification" : {
      "body" : "great match!",
      "title" : "Portugal vs. Denmark",
      "icon" : "myicon",
      "sound" : "mySound"
    }
  }

Если вы хотите использовать звук по умолчанию для устройства, вы должны использовать: "sound": "default".

Посмотрите эту ссылку для всех возможных ключей в полезной нагрузке: https://firebase.google.com/docs/cloud-messaging/http-server-ref#notification-payload-support

Для тех, кто не знает, что firebase обрабатывает уведомления по-разному, когда приложение находится в фоновом режиме. В этом случае функция onMessageReceived не вызывается.

Когда ваше приложение находится в фоновом режиме, Android направляет уведомление сообщений в системный лоток. Пользователь, нажав на уведомление, откроет приложение по умолчанию. Сюда входят сообщения, содержащие уведомлений и данных. В этих случаях уведомление доставлен в системный лоток устройства, а полезная нагрузка данных доставляемые в дополнение к цели вашей деятельности по запуску.

Ответ 2

adavaced options выберите дополнительные параметры, когда напишите сообщение, и выберите звук активирован выбрать активировано

это Мое решение

Ответ 3

Попробуй это

{
    "to" : "DEVICE-TOKEN",

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

@примечание для настраиваемого звука уведомления: → "sound": "MyCustomeSound.wav"

Ответ 4

Метод onMessageReceived запускается только в том случае, если приложение находится на переднем плане или полезная нагрузка уведомления содержит только тип данных.

Из документации Firebase

Для обмена сообщениями в нисходящем направлении FCM предоставляет два типа полезной нагрузки: уведомление и данные.

Для типа уведомления FCM автоматически отображает сообщение для устройств конечного пользователя от имени клиентского приложения. Уведомления имеют предопределенный набор видимых пользователю ключей.
За тип данных клиентское приложение отвечает за обработку сообщений данных. Сообщения данных имеют только пользовательские пары ключ-значение.

Используйте уведомления, когда вы хотите, чтобы FCM обрабатывал отображение уведомления от имени вашего клиентского приложения. Используйте сообщения данных, когда вы хотите, чтобы ваше приложение обрабатывало отображение или обрабатывало сообщения в клиентском приложении Android, или если вы хотите отправлять сообщения на устройства iOS, когда есть прямое соединение FCM.

Дальше вниз по документам

Поведение приложения при получении сообщений, которые включают как уведомления, так и полезные данные, зависит от того, находится ли приложение в фоновом режиме или на переднем плане - по сути, активно ли оно во время получения.
В фоновом режиме приложения получают полезную нагрузку уведомления в области уведомлений и обрабатывают полезную нагрузку данных только тогда, когда пользователь нажимает на уведомление.
На переднем плане ваше приложение получает объект сообщения с обоими полезными нагрузками.

Если вы используете консоль Firebase для отправки уведомлений, полезная нагрузка всегда будет содержать тип уведомления. Вы должны использовать Firebase API для отправки уведомления только с типом данных в полезной нагрузке уведомления. Таким образом, ваше приложение всегда получает уведомление при получении нового уведомления, и приложение может обрабатывать полезную нагрузку уведомления.

Если вы хотите воспроизвести звук уведомления, когда приложение работает в фоновом режиме, используя обычный метод, вам необходимо добавить параметр звука в полезную нагрузку уведомления.

Ответ 5

сделайте это

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {

    //codes..,.,,

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

}

Ответ 6

С HTTP v1 API все по-другому

Документация

Пример:

{
 "message":{
    "topic":"news",
    "notification":{
       "body":"Very good news",
       "title":"Good news"
    },
    "android":{
       "notification":{
          "body":"Very good news",
          "title":"Good news",
          "sound":"default"
       }
    }
  }
}

Ответ 7

попробуйте это....

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

и в onMessageReceived, назовите его

 @Override
public void onMessageReceived(RemoteMessage remoteMessage) {


    Log.d("Msg", "Message received [" + remoteMessage.getNotification().getBody() + "]");

    buildPushNotification(/*your param*/);
}

или следуйте KongJing, также верно, как он говорит, но вы можете использовать Firebase Console.

Ответ 8

Я могу воспроизводить звук уведомления, даже если я отправлю его с консоли firebase. Для этого вам просто нужно добавить ключ "звук" со значением "по умолчанию" заранее.