UNNotificationSound
Scheduling and Handling Local Notifications
Local and Remote Notification Programming Guide
iOS远程推送之(一):APNs原理和基本配置
iOS远程推送之(二):角标applicationIconNumber设置
iOS远程推送之(三):点击通知横幅启动应用
当我们接受到远程推送通知的时候,我们可能想要播放我们自定义的声音,这个需求还是比较常见的,那么怎么实现呢?其实很简单,大家跟随我的脚步往下看。
准备工作
音频文件
我们如果要播放这样的自定义录音,肯定会有几个问题需要搞清楚的。
- 音频文件要准备好,什么音频格式?存放在哪儿?
- 音频文件由谁来播放?怎么播放的?在什么时候播放的?
首先第一个问题就是音频文件的问题
音频文件准备分为两个部分:
- 准备特定格式的音频文件
- 存放特定音频文件
一、准备特定格式的音频文件
1>首先系统能播放的四种音频数据格式:
Linear PCM
MA4 (IMA/ADPCM)
µLaw
aLaw
对应的后缀格式为:
aiff
wav
caf
大家其实不用管这些个到底是什么格式啥的,只需要知道怎么转就行了
2>其次系统能播放的音频文件不能超过30秒,如果超过30秒那么就会默认播放系统通知音频文件
3>音频文件格式转换
音频格式转换,MAC也提供了相应的转换工具
可以用afconvert来转换音频,例如把16位的线性PCM系统音频格式文件 Submarine.aiff 转换成IMA4音频,存为.CAF文件。
在终端执行以下命令:
afconvert /System/Library/Sounds/Submarine.aiff ~/Desktop/sub.caf -d ima4 -f caff -v
命令格式如下:
afconvert
afconvert命令的格式如下(当然以下的option放前面和后面都一样):
afconvert [option...] input_file [output_file]
其中[option...]主要有以下几个操作:
-f 指定文件格式
-d 数据格式
-c 声道
比如命令:
afconvert -f caff -d LEI16@44100 -c 1 input.wav output.caf
用于将input.wav转换为output.caf
其中-f:指定文件格式为caff,即采用ima4压缩的.caf文件格式;
其中-d:指定数据格式,LEI16@44100则表示16位44100Hz;
其中-c:就是声道数了。
PS:当然大家可以去查一下怎么mp3转成caf格式的文件,具体的命令格式是一样,可能参数不一样,大家可以去搜一下,这里还是贴一下吧,为了身患懒癌绝症的你们我也是够了:
MP3铃声如何转换成caf格式的铃声
Mac上mp3格式转caf格式
PS:通过查找后发现,其实mp3格式转换成caf文件的命令和上面是一样的,好吧,我以为要换个参数啥的,好吧,我想多了。下面贴一些MP3转caf文件的步骤和命令:
总共分三步:
第一步:获取MP3文件路径,为了方便[测试](http://lib.csdn.net/base/softwaretest),这里把文件放到了桌面上,地址为 :/Users/Mina/Desktop/1.mp3
第二步:设置CAF文件的输出路径,这里也放到了桌面上,路径为:/Users/Mina/Desktop/2.caf
第三步:打开终端输入命令:
afconvert /Users/Mina/Desktop/1.mp3 /Users/Mina/Desktop/2.caf -d ima4 -f caff -v
(注:不要忘记空格)
二、存放特定音频文件
我们需要把音频文件放在Main
Store the sound files for your notifications in your app’s main bundle or download them and store them in the Library/Sounds
subdirectory of your app’s container directory.
这个我们一般把这个音频文件存储在main bundle里面就可以了
测试播放
这个步骤就很简单了,正常步骤是按照iOS远程推送之(一):APNs原理和基本配置这个里面的步骤做好之后,然后就是正常测试推送了,利用SmartPush工具来进行推送测试。
那么原有的推送消息payload为:
{"aps":
{"alert":"I'm a very handsome boy! Nice IT guys!",
"badge":6,
"sound": "default"
}
}
其中我们大家注意看这个sound字段,后面带的是default,说明播放的是系统默认自带的推送音效,那么我们现在要改成自己的自定义音效的话,直接把你刚刚放进main bundle里面的音频文件的全称填在sound字段对应的值即可,我这儿的音效文件是test.caf,那么我此处应该改成:
{"aps":
{"alert":"I'm a very handsome boy! Nice IT guys!",
"badge":6,
"sound": "test.caf"
}
}
改完之后你再次推送就能收到自定义音效的通知了。
以下是SmartPush的使用截图
PS: SmartPush在使用的时候:
1>如果大家发现证书和DeviceToken都没错的话,另外payload格式也没问题,那么可能你要重新点击右侧连接服务器,再推送看看。
2>另外如果大家把sound的值改成其他随便的值,那么系统还是会播放默认的推送音效
扩展
afconvert工具支持的音频格式
我们可以通过以下命令查看
afconvert -hf
或者
afconvert --help-formats
查询后的结果:
Audio file and data formats:
'3gpp' = 3GP Audio (.3gp)
data_formats: 'Qclp' 'aac ' 'aace' 'aacf' 'aacg' 'aach'
'aacl' 'aacp' 'samr'
'3gp2' = 3GPP-2 Audio (.3g2)
data_formats: 'Qclp' 'aac ' 'aace' 'aacf' 'aacg' 'aach'
'aacl' 'aacp' 'samr'
'adts' = AAC ADTS (.aac, .adts)
data_formats: 'aac ' 'aach' 'aacp'
'ac-3' = AC3 (.ac3)
data_formats: 'ac-3'
'AIFC' = AIFC (.aifc, .aiff, .aif)
data_formats: I8 BEI16 BEI24 BEI32 BEF32 BEF64 UI8 'ulaw'
'alaw' 'MAC3' 'MAC6' 'ima4' 'QDMC' 'QDM2'
'Qclp' 'agsm'
'AIFF' = AIFF (.aiff, .aif)
data_formats: I8 BEI16 BEI24 BEI32
'amrf' = AMR (.amr)
data_formats: 'samr' 'sawb'
'm4af' = Apple MPEG-4 Audio (.m4a, .m4r)
data_formats: 'aac ' 'aace' 'aacf' 'aacg' 'aach' 'aacl'
'aacp' 'ac-3' 'alac' 'ec-3' 'paac' 'pac3'
'pec3'
'm4bf' = Apple MPEG-4 AudioBooks (.m4b)
data_formats: 'aac ' 'aace' 'aacf' 'aacg' 'aach' 'aacl'
'aacp' 'paac'
'caff' = CAF (.caf)
data_formats: '.mp1' '.mp2' '.mp3' 'QDM2' 'QDMC' 'Qclp'
'Qclq' 'aac ' 'aace' 'aacf' 'aacg' 'aach'
'aacl' 'aacp' 'ac-3' 'alac' 'alaw' 'dvi8'
'ec-3' 'ilbc' 'ima4' I8 BEI16 BEI24 BEI32
BEF32 BEF64 LEI16 LEI24 LEI32 LEF32 LEF64
'ms\x00\x02' 'ms\x00\x11' 'ms\x001' 'paac'
'pac3' 'pec3' 'qaac' 'qac3' 'qach' 'qacp'
'qec3' 'samr' 'ulaw' 'zaac' 'zac3' 'zach'
'zacp' 'zec3'
'ec-3' = EC3 (.ec3)
data_formats: 'ec-3'
'MPG1' = MPEG Layer 1 (.mp1, .mpeg, .mpa)
data_formats: '.mp1'
'MPG2' = MPEG Layer 2 (.mp2, .mpeg, .mpa)
data_formats: '.mp2'
'MPG3' = MPEG Layer 3 (.mp3, .mpeg, .mpa)
data_formats: '.mp3'
'mp4f' = MPEG-4 Audio (.mp4)
data_formats: 'aac ' 'aace' 'aacf' 'aacg' 'aach' 'aacl'
'aacp' 'ac-3' 'ec-3'
'NeXT' = NeXT/Sun (.snd, .au)
data_formats: I8 BEI16 BEI24 BEI32 BEF32 BEF64 'ulaw'
'Sd2f' = Sound Designer II (.sd2)
data_formats: I8 BEI16 BEI24 BEI32
'WAVE' = WAVE (.wav)
data_formats: UI8 LEI16 LEI24 LEI32 LEF32 LEF64 'ulaw'
'alaw'
iOS10之后的推送设置
iOS10推送必看UNNotificationContentExtension - 简书
iOS10-UserNotifications - 简书
参考链接
iOS 自定义通知声音 - 简书
系统通知
Mac上mp3格式转caf格式
Audio File Convert(afconvert)工具转换音频格式
afconvert 音频格式转换使用相关
iOS远程推送之(一):APNs原理和基本配置
iOS远程推送之(二):角标applicationIconNumber设置
iOS远程推送之(三):点击通知横幅启动应用
以上!!!