阅读this 似乎应该在Android 上自动管理(如果你没有使用notification builder),但你必须指定.mp3 扩展名并将其放在notification 字段中而不是data一个..
"sound": "alarm.mp3"
iOS 在后台的行为非常不同,但您也可以通过在通知负载中设置 sound: 字段来使用自定义声音。无论如何.mp3 不是有效的 APN 通知文件格式,您还需要指定文件扩展名。
"sound": "filename.caf"
关注Apple documentation,为您的应用打造自定义声音文件。
mp3 格式无效
准备自定义警报声音
本地和远程通知可以指定自定义警报声音
通知发送时播放。您可以打包音频
aiff、wav 或 caf 文件中的数据。因为他们玩的是
系统声音设施,自定义声音必须在以下之一
音频数据格式:
-
Linear PCM
-
MA4 (IMA/ADPCM)
-
µLaw
-
aLaw
将自定义声音文件放在您的 app bundle 或
Library/Sounds 应用程序容器目录的文件夹。风俗
播放时声音必须在 30 秒内。如果自定义声音是
超过该限制,将播放默认系统声音。
您可以使用afconvert 工具来转换声音。例如,要
将 16 位线性 PCM 系统声音 Submarine.aiff 转换为 IMA4
CAF file 中的音频,在终端应用程序中使用以下命令:
afconvert /System/Library/Sounds/Submarine.aiff ~/Desktop/sub.caf -d ima4 -f caff -v
例如,将您的 mp3 文件转换为 caf 文件,您可以在终端中键入:
afconvert -f caff -d LEI16 alarm.mp3 alarm.caf
阅读此doc 以深入了解所有通用和特定通知有效负载字段。
更新
我已经测试了 Android 部分,我可以确认将您的 .mp3 文件放在 res/raw/ 文件夹中,声音会按记录和预期播放。
这是我的通知负载:
{
"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"
}
}
在将.mp3文件转换为.caf文件后,我也测试了iOS版本:
afconvert -f caff -d LEI16 alert.mp3 alert.caf
具有不同文件名的相同 json 有效负载有效:
{
"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"
}
}
记得将文件添加到您的main bundle。
如果应用程序被终止或在后台运行。
如果您想在应用程序处于前台时显示警报并播放声音,您必须在 onMessage 事件上进行管理,就像有人已经告诉您 here 一样,或者您可以在此处使用 platform-channel使用 Android 上的 Notification.Builder 和 iOS 上的 UNNotificationCenter 构建您自己的通知(例如)。
更新
这个问题已经解决了。见here官方评论:
大家好?
作为我们路线图 (#2582) 的一部分,我们刚刚交付了一个完整的返工
firebase_messaging 插件旨在解决这个问题和许多其他问题
问题。
如果可以,请试用开发版(请参阅migration guide
用于升级和更改),如果您有任何反馈,请加入
在讨论中here。
鉴于返工的范围,我将继续并关闭它
赞成试用最新插件的问题。
谢谢大家?