iOS推送通知自定义声音
Posted
技术标签:
【中文标题】iOS推送通知自定义声音【英文标题】:iOS Push notification Custom sound 【发布时间】:2015-10-13 12:56:20 【问题描述】:我需要自定义推送通知声音。我不想创建并包含到 Bundle。我需要像 whatsapp 通知声音一样实现,或者请提供 Apple 提供的声音列表(如默认声音)。任何帮助将不胜感激。
谢谢
【问题讨论】:
List of available sounds for ios push notifications的可能重复 这不是我的问题的正确答案。我正在寻找一些 caf 的示例文件。谢谢。 How to play custom sound file when user get push notification?的可能重复 为什么你们都写了一个重复的问题?他清楚地说他正在寻找与苹果声音提供的类似whatsapp 相同的通知。您提供的所有链接都建议服务器端或不相关的答案! @Thangavel 你找到解决方案了吗? @XcodeNOOB 谢谢。我已将声音文件包含在捆绑包中。我没有找到任何其他解决方案。 【参考方案1】:在挖掘这个问题超过 3 周后,与苹果来回写信这是唯一的解决方案 将有效负载更改为类似
sound = "custom"
现在您需要在表格视图中显示所有系统声音(如果您不知道如何操作,请查看 github)。 一旦用户标记了他的声音通知,您需要将文件复制到库/声音并为其命名自定义(或任何有效负载中的确切名称)。 这样您就永远不会更改服务器端代码并保持自定义,另一方面,您只需用用户选择的新声音覆盖自定义文件。
*旁注:在 9.2.1 版本中,有一个错误导致通知无法在第二次工作,或者根本不工作,它应该根据 Apple 在下一个版本 9.3 中修复!
我希望我能像在 android 中那样覆盖有效负载的解决方案,Apple 使开发人员的推送通知变得更加困难。
【讨论】:
是的,你是对的。这就是我最终用自定义声音实现的方式。【参考方案2】:在你的包中添加一个名为“pushSound.caf”的声音文件。
//这样写你的payload
aps =
alert = "message";
sound = "pushSound.caf";//this file will have to your bundle
;
【讨论】:
他写道他不想包含捆绑包。这与服务器端无关,它是关于在收到通知时自定义通知,JSON 中的“声音”参数应该是“默认”,并且自定义应该在应用程序委托中。我还没有找到如何覆盖收到的默认 iOS 系统消息。【参考方案3】:准备自定义警报声音
对于 iOS 中的远程通知,您可以指定 iOS 在为应用呈现本地或远程通知时播放的自定义声音。声音文件可以位于客户端应用的主包中,也可以位于应用数据容器的 Library/Sounds 文件夹中。
自定义警报声音由 iOS 系统声音工具播放,因此它们必须采用以下音频数据格式之一:
线性 PCM MA4 (IMA/ADPCM) 微定律 法律您可以将音频数据打包到 aiff、wav 或 caf 文件中。然后,在 Xcode 中,将声音文件作为 app bundle 的非本地化资源添加到您的项目中,或者添加到数据容器的 Library/Sounds 文件夹中。
您可以使用 afconvert 工具来转换声音。例如,要将 16 位线性 PCM 系统声音 Submarine.aiff 转换为 CAF 文件中的 IMA4 音频,请在终端应用程序中使用以下命令:
afconvert /System/Library/Sounds/Submarine.aiff ~/Desktop/sub.caf -d ima4 -f caff -v
您可以通过在 QuickTime Player 中打开声音并从“电影”菜单中选择“显示电影检查器”来检查声音以确定其数据格式。
自定义声音在播放时必须少于 30 秒。如果自定义声音超过该限制,则会播放默认系统声音。
【讨论】:
【参考方案4】:它也需要采用正确的格式,请参阅https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/IPhoneOSClientImp.html#//apple_ref/doc/uid/TP40008194-CH103-SW6
【讨论】:
【参考方案5】:为通知使用默认声音
let content = UNMutableNotificationContent()
/// Set up content ...
content.sound = UNNotificationSound.default()
要使用自定义声音,声音文件必须存储在应用的主包中或下载并将其存储在应用容器目录的Library/Sounds
子目录中。
“主包”方法只能用于新的应用程序版本,“下载声音文件”方法更灵活,无需发布新版本即可发布新声音。
【讨论】:
以上是关于iOS推送通知自定义声音的主要内容,如果未能解决你的问题,请参考以下文章