且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

自定义声音推送通知不起作用(颤振)

更新时间:2023-02-26 20:47:51

阅读



.mp3 文件转换为 .caf 之后,我也测试了iOS版本这样的文件:

  afconvert -f caff -d LEI16 alert.mp3 alert.caf 

相同的 json 有效负载和不同的文件名有效:

  {
to: my_device_token,
collapse_key: type_a,
priority :高,
notificat ion:{
body:自定义声音的测试通知主体{{datestamp}},
title:自定义声音alert.mp3,
声音: alert.caf
}
}

记住要在以下位置添加文件您的主捆绑包





在应用终止或在后台运行时有效。



如果要在应用处于运行状态时显示警报并播放声音您必须在 onMessage 事件中对其进行管理,就像有人已经告诉您此处,或者您可以使用平台平台在此处使用 Notification.Builder 在Android和 UNNotificationCenter


{
  "to": "XXXX",
  "notification": {
    "title": "ASAP Alert",
    "body": "Please open your app"
  },
  "data": {
    "screen": "/Nexpage1",
    "sound": "alarm",
    "click_action": "FLUTTER_NOTIFICATION_CLICK"
  }
}

Above is my payload for the push notification. I have insert the alarm.mp3 file inside the raw folder, however it still does not give me the alarm sound, i have try for alarm.mp3 also, is there anything wrong with the json? of it because of the code on my dart file?

Reading this it seems that it should be manage automatically (if you didn't use a notification builder) on Android but you have to specify the .mp3 extension too and put it inside notification field and not data one..

"sound": "alarm.mp3"

iOS behaves very differently under the hood but you can use a custom sound by setting the sound: field in the notification payload too. Anyway .mp3 is not a valid APN notification file format, and you need to specify also the file extention.

"sound": "filename.caf"

Follow Apple documentation in order to forge your custom sound file for your app.

mp3 is not a valid format

Preparing Custom Alert Sounds

Local and remote notifications can specify custom alert sounds to be played when the notification is delivered. You can package the audio data in an aiff, wav, or caf file. Because they are played by the system-sound facility, custom sounds must be in one of the following audio data formats:

  • Linear PCM

  • MA4 (IMA/ADPCM)

  • µLaw

  • aLaw

Place custom sound files in your app bundle or in the Library/Sounds folder of your app’s container directory. Custom sounds must be under 30 seconds when played. If a custom sound is over that limit, the default system sound is played instead.

You can use the afconvert tool to convert sounds. For example, to convert the 16-bit linear PCM system sound Submarine.aiff to IMA4 audio in a CAF file, use the following command in the Terminal app:

afconvert /System/Library/Sounds/Submarine.aiff ~/Desktop/sub.caf -d ima4 -f caff -v

For exampole to convert your mp3 file in a caf file you could type in terminal:

afconvert -f caff -d LEI16 alarm.mp3 alarm.caf

Read this doc in order to have a deep inside of all generic and specific notifciation payload fields.

UPDATE

I've tested the Android part and I can confirm that putting your .mp3 file in res/raw/ folder the sound is played as documented and expected.

That's my notification payload:

{
 "to" : "my_device_token",
 "collapse_key" : "type_a",
 "priority" : "high",
 "notification" : {
     "body" : "Test Notification body for custom sound {{datestamp}}",
     "title": "Custom sound alert.mp3",
     "sound": "alert.mp3"
 }
}

I've tested also the iOS version after converting .mp3 file to .caf file in that way:

afconvert -f caff -d LEI16 alert.mp3 alert.caf

the same json payload with the different filename works:

{
 "to" : "my_device_token",
 "collapse_key" : "type_a",
 "priority" : "high",
 "notification" : {
     "body" : "Test Notification body for custom sound {{datestamp}}",
     "title": "Custom sound alert.mp3",
     "sound": "alert.caf"
 }
}

Remember to add the file in your main bundle.

That works if the app is terminated or in background.

If you want to show an alert and play a sound when the app is in foreground you have to manage it on onMessage event like someone already have told you here, or you can use a platform-channel here to build your own notification with a Notification.Builder on Android and a UNNotificationCenter on iOS (for example).