it-swarm.com.ru

Нет звука при отправке уведомления из firebase в android

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

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

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

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

58
Hammad Tariq

В уведомлении полезной нагрузки уведомления есть звуковая клавиша.

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

Указывает звук для воспроизведения, когда устройство получает уведомление. Поддерживает по умолчанию или имя файла звукового ресурса, связанного в приложении. Звуковые файлы должны находиться в/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 направляет уведомления в системный трей. При нажатии на уведомление пользователя открывается панель запуска приложения по умолчанию. Это включает в себя сообщения, которые содержат как уведомления, так и данные. В этих случаях уведомление доставляется в системный трей устройства, а полезная нагрузка данных доставляется в дополнениях к назначению вашего средства запуска.

84
Isj

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

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

22
KongJing

Попробуй это

{
    "to" : "DEVICE-TOKEN",

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

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

11
Sameer

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

Из Документы Firebase

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

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

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

Далее вниз документы

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

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

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

9
Renjith

делай так

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {

    //codes..,.,,

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

}
3
AAA

С 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"
       }
    }
  }
}
3
Andrey

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

  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.

1
chry

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

0
Saeed Sharman