项目中遇到需要自定义通知声音的需求,以前没做过,就查了下官方文档,就像文档上说的,实现起来确实挺简单,就整理下当做备忘吧。
关于推送,官方文档、各种第三方推送文档都很全,就跳过了。
由于自定义通知声音还是由 iOS 系统来播放的,所以对音频数据格式有限制,可以是如下四种之一:
- Linear PCM
- MA4 (IMA/ADPCM)
- µLaw
- aLaw
对应音频文件格式是 aiff
,wav
,caf
文件,文件也必须放到 app 的 mainBundle
目录中。
自定义通知声音的播放时间必须在 30s 内,如果超过这个限制,则将用系统默认通知声音替代。
可以使用 afconvert
工具来处理音频文件格式,在终端中敲入如下命令就可以将一个 mp3
文件转换成 caf
文件:
$ afconvert unbelievable.mp3 unbelievable.caf -d ima4 -f caff -v
转换完成后就可以将 unbelievable.caf
这个文件拖入 Xcode 工程中,编译运行项目在真机上。

发送推送通知时,只需配置 sound
字段的值为导入到工程中的音频文件名,这里即就是 unbelievable.caf
。
测试~~,完美!!!收到推送时,通知声音就是我们自定义的声音了。

网友评论
不卸载的情况下,编译安装就变成系统默认声音了,直推苹果APNs服务器的
楼主碰到过吗,或者能用这个demo测试下这种情况吗
- UMPMessage dict [{
d = uu21712147919546835001;
p = 0;
currentTime = 2016-11-15 15:37:48;
isShock = 1;
aps = {
content-available = 1;
alert = 前方130米即将到达人民广场站,请您做好下车准备。;
badge = 0;
sound = "call.caf";
}
大神, 我用的是友盟远程推送, call.caf 是30s的铃声。 按照你说的做的。可是在前台没声音,只弹出我自定义的框,前台无所谓 我可以自己做声音播放, 可是 最终的需求是 后台时受到提醒 要播放30s的声音,但是现在 后台 只是叮的一声 就完事了。 我用10.0之前的测试机和10.1.1的测试机都试过了 就是不行, 求大神帮忙 急
fire date = 2016年10月28日 星期五 中国标准时间 下午8:28:03, user info = {
sound = "test.caf";
}}
notification.soundName = @"test.caf";
然而实机测试仍然是系统提示音,git的demo我下了,但没找到相关的代码内容啊,关于设置自定义提示音这块,哭哭