我在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
};
最后我找到了解决办法。对于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'
};