在android中发送来自firebase的通知时没有通知声音

我正在从Firebase发送推送通知到我的Android应用程序。 但是当我的应用程序在后台firebase onMessageReceived方法不被调用,而是firebase发送通知系统显示系统托盘中的通知。 通知出现在系统托盘中,但是没有通知声音,即使我在系统设置中允许我的应用程序通知声音。

当从firebase收到通知时,我可以做些什么来播放通知声音。

这是我从firebase发送通知到我的应用程序的博文链接 。

如何在Android应用程序中添加Firebase

Solutions Collecting From Web of "在android中发送来自firebase的通知时没有通知声音"

在通知的通知有效载荷中有一个声音密钥。

从官方文件中它的用途是:

指示设备收到通知时播放的声音。 支持应用程序中捆绑的声音资源的默认或文件名。 声音文件必须驻留在/ 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会将通知消息导向系统托盘。 用户点击通知会默认打开应用程序启动器。 这包括包含通知和数据有效负载的消息。 在这些情况下,通知将传递到设备的系统托盘,并且数据有效载荷以您启动程序活动的目的附加内容传递。

adavaced选项 写入消息时select高级选项 ,并select声音激活 选择激活

这是我的解决scheme

onMessageReceived方法仅在app处于前台时触发,或者通知有效内容仅包含数据types。

来自Firebase文档

对于下行消息,FCM提供两种types的有效载荷: 通知数据

对于通知types,FCM代表客户端应用程序自动向最终用户设备显示消息。 通知具有预定义的一组用户可见密钥。
对于数据types,客户端应用程序负责处理数据消息。 数据消息只有自定义的键值对。

当您希望FCM处理代表客户端应用程序显示通知使用通知 。 如果希望应用程序处理显示或处理Android客户端应用程序中的消息,或者如果要在直接连接FCM时向iOS设备发送消息, 请使用数据消息。

再往下看文档

接收包含通知和数据有效载荷的消息时的应用程序行为取决于应用程序是在后台还是在前台 – 实际上,在接收时它是否处于活动状态。
在后台时 ,应用程序会在通知托盘中收到通知有效内容,并且只有在用户点击通知时才处理数据有效内容。
在前台时 ,您的应用程序会收到一个消息对象,其中都有可用的有效负载。

如果您使用Firebase控制台发送通知,则有效内容将始终包含通知types。 您必须使用Firebase API才能通知通知有效负载中的数据types。 这样,当收到新的通知并且应用程序可以处理通知负载时,您的应用程序总是会被通知。

如果要使用传统方法在应用程序处于后台时播放通知声音,则需要将声音参数添加到通知有效内容。

这样做

 @Override public void onMessageReceived(RemoteMessage remoteMessage) { //codes..,.,, Uri sound= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); builder.setSound(sound); } 

你可以这样

 { "to" : "DEVICE-TOKEN", "notification" : { "body" : "NOTIFICATION BODY", "title" : "NOTIFICATION TITILE", "sound" : "default" } } 

自定义通知声音的@note: – > "sound" : "MyCustomeSound.wav"

即使从Firebase控制台发送,我也能播放通知声音。 要做到这一点,你只需要预先添加键值“默认”的“声音”选项。

尝试这个….

  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控制台。