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

col17t5w  于 2023-05-01  发布在  Flutter
关注(0)|答案(5)|浏览(203)
{
  "to": "XXXX",
  "notification": {
    "title": "ASAP Alert",
    "body": "Please open your app"
  },
  "data": {
    "screen": "/Nexpage1",
    "sound": "alarm",
    "click_action": "FLUTTER_NOTIFICATION_CLICK"
  }
}

上面是我的push notification的payload。我已经把警报器插进去了。mp3文件里面的原始文件夹,但它仍然没有给予我的报警声,我已经尝试报警。mp3也是,json有什么问题吗?因为我的dart文件上的代码吗

hrirmatl

hrirmatl1#

阅读this似乎应该在Android上自动管理(如果您没有使用通知生成器),但您必须指定.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工具转换声音。例如,要在CAF file中将16位线性PCM系统声音Submarine.aiff转换为IMA4音频,请在终端应用程序中使用以下命令:

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

例如,要将mp3文件转换为caf文件,您可以在terminal中输入:

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"
 }
}

我也测试了iOS版本后转换.mp3文件到.caf文件的方式:

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(例如)。

更新

这个问题已经解决了。看这里的官方评论:
大家好👋
作为我们路线图(#2582)的一部分,我们刚刚发布了一个完整的firebase_messaging插件,旨在解决这个问题和许多其他问题。
如果可以的话,请尝试开发版本(有关升级和更改,请参阅migration guide),如果您有任何反馈,请加入讨论here
考虑到返工的范围,我将继续并关闭这个问题,以便尝试最新的插件。
谢谢大家🤓

tv6aics1

tv6aics12#

ShadowSheep在回答这个问题上做得很好,但有一件事我想澄清一下,试图让iOS的声音工作。
你必须将声音添加到XCode中(这就是ShadowSheep所说的包含main bundle中的资产的地方)。您只需拖放音频文件(在。caf或上面提到的其他支持的格式)到XCode的根目录(通常称为Flutter的Runner):

如果你已经做到了这一点,并按照上面的问题/答案中描述的设置,你应该在业务。

lymnna71

lymnna713#

对于我来说,我使用flutter_local_notifications来创建通知通道。
包括此功能(可以创建多个通知通道)

Future<void> _createNotificationChannel(String id, String name,
String description, String sound) async {
final flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();
var androidNotificationChannel = AndroidNotificationChannel(
  id,
  name,
  description,
  sound: RawResourceAndroidNotificationSound(sound),
  playSound: true,
);

await flutterLocalNotificationsPlugin
    .resolvePlatformSpecificImplementation<
    AndroidFlutterLocalNotificationsPlugin>()
    ?.createNotificationChannel(androidNotificationChannel);}

在initState中调用函数:(这创建了2个通知通道)

_createNotificationChannel("channel_id_1", "channel_name", "description", "alert");
_createNotificationChannel("channel_id_2", "channel_name", "description", "alarm");

记住将alertalarm的文件以.mp3的文件格式保存在res/raw中。
有了这个payload:

{
"notification": {
    "title": "My First Notification",
    "body": "Hello, I'm push notification"
},
"data": {
    "title": "My First Notification"
},
"android": {
    "notification": {
        "channel_id": "channel_id_1"
    }
},
"to": "device_token"}
eblbsuwk

eblbsuwk4#

对于那些试图为Android和iOS good guide here制作自定义声音的人:
对于iOS:
若要为iOS添加自定义声音,请将iOS的音频剪辑添加到项目的App_Resources/iOS/目录(仅iOS接受。wav、.aiff和。CAF扩展)。
对于Android:
首先,将音频剪辑添加到项目的App_Resources/Android/src/main/res/raw/目录((仅Android接受。wav,.mp3和.ogg扩展)。
所以我们可以利用。wav文件,以便使用自定义声音可用于两个平台:

"notification": {
            "body": "Test notification",
            "title": "Test Test Test",
            "click_action": "FLUTTER_NOTIFICATION_CLICK",
           
            "sound": "your_custom_sound.wav" 
            "android_channel_id": "channel_id_youcreated",
},

          'to':
              "",
        },
2skhul33

2skhul335#

在Android中尝试此解决方案后,我仍然无法更改自定义声音。您需要.ogg文件类型来解决此问题。后改为。ogg文件类型,我可以用自定义声音来改变。谢谢。

相关问题