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

2024-01-01

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

以上是我的推送通知的有效负载。我已经将alarm.mp3文件插入到raw文件夹中,但是它仍然没有给我发出警报声音,我也尝试了alarm.mp3,json有什么问题吗?因为我的 dart 文件上的代码?


Reading this https://firebase.google.com/docs/cloud-messaging/http-server-ref似乎它应该自动管理(如果你没有使用通知生成器 https://github.com/firebase/quickstart-android/blob/a0e8c27bb60f82ac3dcae6ff1e3926d3b0ea4a69/messaging/app/src/main/java/com/google/firebase/quickstart/fcm/java/MyFirebaseMessagingService.java#L47-L90)在Android上,但你必须指定.mp3也扩展并把它放进去notification场而不data one..

"sound": "alarm.mp3"

iOS在引擎盖下的行为非常不同,但您可以通过设置来使用自定义声音sound:通知负载中也包含字段。反正.mp3不是有效的 APN 通知文件格式,您还需要指定文件扩展名。

"sound": "filename.caf"

Follow 苹果文档 https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/SupportingNotificationsinYourApp.html为了为您的应用程序伪造您的自定义声音文件。

mp3 不是有效格式

准备自定义警报声音

本地和远程通知可以指定自定义警报声音 通知送达时播放。您可以将音频打包 aiff、wav 或 caf 文件中的数据。因为他们是由 系统声音设施,自定义声音必须是以下之一 音频数据格式:

  • Linear PCM

  • MA4 (IMA/ADPCM)

  • µLaw

  • aLaw

将自定义声音文件放入您的app bundle或在Library/Sounds应用程序容器目录的文件夹。风俗 声音一定是30秒以内播放时。如果自定义声音是 超过该限制,将播放默认系统声音。

您可以使用afconvert转换声音的工具。例如,要 转换16位线性PCM系统声音Submarine.aiff to 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 https://firebase.google.com/docs/cloud-messaging/http-server-ref为了深入了解所有通用和特定的通知有效负载字段。

UPDATE

我已经测试了 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 https://stackoverflow.com/questions/53531387/firebase-push-notification-with-custom-sound-flutter,或者您可以使用平台渠道 https://flutter.io/docs/development/platform-integration/platform-channels在这里构建您自己的通知通知生成器 https://developer.android.com/reference/android/app/Notification.Builder在 Android 上和联合国通知中心 https://developer.apple.com/documentation/usernotifications/unusernotificationcenter?language=objc在 iOS 上(例如)。

UPDATE

此问题已得到解决。看here https://github.com/FirebaseExtended/flutterfire/issues/523#issuecomment-722240457官方评论:

大家好????

作为我们路线图的一部分(#2582 https://github.com/FirebaseExtended/flutterfire/issues/2582)我们刚刚发布了完整的返工版 firebase_messaging 插件旨在解决这个问题和许多其他问题 问题。

如果可以的话,请尝试开发版本(请参阅迁移指南 https://firebase.flutter.dev/docs/migration/用于升级和更改),如果您有任何反馈,请加入 在讨论中here https://github.com/FirebaseExtended/flutterfire/discussions/4023.

考虑到返工的范围,我将继续并关闭此项目 有利于尝试最新插件的问题。

谢谢大家????

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自定义声音推送通知不起作用(Flutter) 的相关文章

随机推荐

  • JavaScript - XMLHttpRequest、访问控制允许来源错误

    我正在尝试将 XMLHttpRequest 发送到粘贴站点 我正在发送一个包含 api 所需的所有字段的对象 但我不断遇到此问题 我读过这个问题 我想 httpReq setRequestHeader Access Control Allo
  • 未找到方法定义...使用 Xcode 自动存根?

    在询问之前我不想放弃 因为这是任何 Java Net IDE 中的基本功能 编译器告诉我 Incomplete implementation of class Method definition for someMethod not fou
  • 在 kustomize 中选择性应用名称前缀/名称后缀

    目前我们正在使用 HOME bin kustomize edit set nameprefix prefix1 但它正在向我们的所有资源 例如 deployment yaml 和 service yaml 添加 nameprefix 我们只
  • 无法使用 C++ 连接到 PostgreSQL

    我正在尝试在我的 Mac 上运行 PostgreSQL PostgresQL 本身工作正常 我可以创建数据库和表之类的东西 但是当我尝试使用 C 连接到 PostgreSQL 时 如下所示 include
  • Git 弄乱了我的文件,在某些地方显示中文字符

    免责声明 我所说的 Git 是指 我 搞砸了 Earlier https stackoverflow com questions 17248795 git thinks ini saved in unicode files are bina
  • 如何使用 R 以编程方式提取/解压 .7z (7-zip) 文件

    我正在尝试自动提取许多使用 7 zip 压缩的文件 我需要自动化这个过程 因为a 我想解锁很多年的数据 b 我想与其他人共享我的代码并防止他们手动重复该过程 我的计算机上安装了 WinRAR 和 7 zip 我可以使用任一程序轻松地单独打开
  • 构建和验证 Gigya 签名

    我编写了一个方法 根据 Gigya 的指定时间戳和 UID 来验证 gigya 签名构建签名的说明 http developers gigya com 030 Gigya Socialize API 2 0 010 Developer Gu
  • 可能是C# 4.0编译器错误,其他人可以验证吗?

    由于我不知道究竟是哪一部分触发了错误 所以我不完全确定如何更好地标记它 这个问题是SO问题的副产品C 代码似乎以无效的方式进行优化 导致对象值变为 null https stackoverflow com questions 3379894
  • 是否有解决方法可以在 Ruby 中打开包含下划线的 URL?

    我正在使用 open uri 来打开 URL resp open http sub domain domain com 如果它包含下划线 我会收到错误 URI InvalidURIError the scheme http does not
  • 如何在 C++/CLI 接口中声明默认索引属性

    如何在 C CLI 接口中声明默认索引属性 请原谅使用命名空间的重复 完全限定符号 因为我刚刚学习 C CLI 并且希望确保 C 和 C 之间不会发生语言原语的意外混淆 Code is public interface class ITes
  • 代码段的动态重定位

    只是出于好奇 我想知道是否可以在期间重新定位一段代码 程序的执行 例如 我有一个函数 这个函数应该 每次执行后都会在内存中进行替换 我们想到了一个想法 就是使用自修改代码来做到这一点 根据网上的一些资源 自行修改 代码可以在Linux上执行
  • DICOM StudyInstanceUID 对于患者来说应该是唯一的吗?

    在处理 DICOM 研究 系列和媒体概念时 我想知道这些值对于所有数据是否都是唯一的 或者仅对于它们所属的患者而言是唯一的 另有表述 我可以让 2 名患者的研究 系列 SOP 实例 uid 值相同吗 或者 DICOM 标准根本不关心这一点
  • python opencv如何分割血管

    我正在尝试使用 Python 和 OpenCV 分割视网膜图像中的血管 这是原始图像 理想情况下 我希望所有血管都像这样非常明显 不同的图像 这是我到目前为止所尝试过的 我拍摄了图像的绿色通道 img cv2 imread images H
  • 由初始值设定项列表初始化的数组存储在哪里?

    鉴于这段代码 void someFunction void int array 1 2 3 4 5 6 7 8 9 10 数组的值存储在哪里 Stack Heap 与那些字符串文字一起 是不是叫高频堆 别的地方 我问这个问题是因为我不确定这
  • 如何修改一个活动的另一活动的变量?

    比方说 头等舱 有一个变量 字符串当前值 红色 带有一个通往 Second class 一项活动 的按钮 First class Activity 在文本视图中显示变量 currentValue 的值 目前为红色 如果我们按下按钮 它将带我
  • 在 Excel 中调整单元格宽度

    我正在使用 xlsxwriter 写入 Excel 工作表 我面临的问题是 当文本大于单元格大小时 它就会被隐藏 import xlsxwriter workbook xlsxwriter Workbook file xlsx worksh
  • Crashlytics - Firebase 日志中的 Stacktrace 不可读

    我刚刚开始使用 React Native Firebase 和 Crashlytics 版本 6 当我打电话时firebase crashlytics recordError error 在JS中catch我在 Firebase Crash
  • Python 3.10 模式匹配 (PEP 634) - 字符串中的通配符

    我有一个很大的 JSON 对象列表 我想根据其中一个键的开头来解析这些对象 并使用通配符来处理其余的 很多键都是相似的 比如 matchme foo and matchme bar 有一个内置通配符 但它仅用于整个值 有点像else 我可能
  • 在struts2中使用tile

    我正在关注 Struts2 中的 Tile 教程 但遇到以下错误 SEVERE Error configuring application listener of class org apache struts2 tiles StrutsT
  • 自定义声音推送通知不起作用(Flutter)

    to XXXX notification title ASAP Alert body Please open your app data screen Nexpage1 sound alarm click action FLUTTER NO