iOS远程推送之(四):播放自定义音频

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里面就可以了

Snip20170712_277.png

测试播放

这个步骤就很简单了,正常步骤是按照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的使用截图

Snip20170712_278.png

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远程推送之(三):点击通知横幅启动应用

以上!!!

逗比.gif
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容