提问者:小点点

Android Firebase通知没有自定义声音


我在Android应用程序中使用Firebase推送通知。我可以用自定义图标正确发送通知,但我还没有播放自定义声音。我总是获得设备的默认声音。

{
    "registration_ids": "myToken",
    "notification": {
        "body": "my body",
        "title": "my title",
        "icon": "ic_notification",
        "sound": "mysound.mp3" // I tried "mysound", "mysound.wav"...

    },
    "priority": "high"

}

自定义声音位于/res/raw中

我可以使用onMessageReceived和Firebase数据消息播放我的自定义声音,但不能使用Firebase通知消息。

我的Android设备是小米Mi A1和奥利奥8.1。,也尝试了小米Mi A2,结果相同。

我尝试了php和curl,以及node。js。。。总是一样的问题,我得到我的默认声音。

使现代化

此代码用于节点。js也不起作用:

var registrationToken = 'xxxxxx';

var message = {

    notification: {
      title: 'my title',
      body: 'my body',
    },
    android: {
      ttl: 3600 * 1000,
      notification: {
        color: '#ff0000',
        sound: 'mysound.mp3'
      }
    }, 
    token: registrationToken

};

共3个答案

匿名用户

最后我找到了解决办法。对于Android 8.0及更高版本,有必要在您的应用程序中创建通知通道:

NotificationChannel channel = new NotificationChannel('my_id', name, importance);

(更多信息:https://developer.android.com/training/notify-user/channels#java)

然后当您发送通知时:

var registrationToken = 'xxxxxx';

var message = {

    notification: {
      title: 'my title',
      body: 'my body',
    },
    android: {
      ttl: 3600 * 1000,
      notification: {
        color: '#ff0000',
        sound: 'mysound.mp3',
        channel_id: 'my_id' // important to get custom sound
      }
    }, 
    token: registrationToken

};

匿名用户

我也在寻找android中firebase通知定制声音的解决方案,我已经通过通知通道解决了这个问题。

我已经创建了一个带有自定义声音的通知通道,该声音在应用程序后台状态下收到通知后播放。

您可以参考通知频道的以下链接。

https://medium.com/exploring-android/exploring-android-o-notification-channels-94cd274f604c

https://developer.android.com/training/notify-user/channels

您需要将mp3文件置于/res/raw/path。

请找到密码。

NotificationManager notificationManager = (NotificationManager) getActivity().getSystemService(NotificationManager.class); // If you are writting code in fragment

NotificationManager notificationManager = (NotificationManager) getSystemService(NotificationManager.class); // If you are writting code in Activity

createNotificationChannel函数

private void createNotificationChannel() { 
 Uri sound = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + context.getPackageName() + "/" + R.raw.sample); //Here is FILE_NAME is the name of file that you want to play 
// Create the NotificationChannel, but only on API 26+ because 
// the NotificationChannel class is new and not in the support library if 
(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) 
 { 
    CharSequence name = "mychannel"; 
    String description = "testing"; 
    int importance = NotificationManager.IMPORTANCE_DEFAULT; 
    AudioAttributes audioAttributes = new AudioAttributes.Builder() 
     .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) 
     .setUsage(AudioAttributes.USAGE_ALARM) 
     .build(); 
   NotificationChannel channel = new NotificationChannel("cnid", name, importance); 
   channel.setDescription(description); 
   channel.enableLights(true); channel.enableVibration(true); 
   channel.setSound(sound, audioAttributes); 
   notificationManager.createNotificationChannel(channel); 
  } 
};

createNotificationChannel(); 

要实现这一点,您需要在firebase通知请求对象中传递android_channel_id属性。

{
 "notification": {
 "body": "this is testing notification",
 "title": "My App",
 "android_channel_id": "cnid"
 },
 "to": "token"
}

注意-如果您创建了一个通知频道,则无法更改声音。您必须创建一个新的通知频道,使用新名称和所需声音。

匿名用户

从文档中,将声音包含在android对象下的notification对象中。在声音值中给出声音文件的名称。声音文件必须位于/res/raw/中。下面是一个节点。js示例:-

  var message = {
  notification: {
    title: 'sample title',
    body: 'Hello, its Tuesday.',
  },
  android: {
    ttl: 3600 * 1000,
    notification: {
      icon: 'my_icon',
      color: '#f45342',
      sound: 'filename.mp3',
    },
  },
  apns: {
    payload: {
      aps: {
        badge: 42,
      },
    },
  },
  topic: 'industry-tech'
};