最近在做iOS推送时,想对推送时的声音,震动,呼吸灯进行控制。查了一下官方文档,问了一些做IM的朋友,声音和震动实现起来都不难,呼吸灯(iOS并没有像安卓那样的呼吸灯,只能用LED闪烁来代替)。
iOS支持的音频格式主要是aiff,wav,caf,具体文件需要放在mainBundle目录中。音频长度必须要在30秒以内,不然会被系统声音所取代。
首先我使用本地推送来做一个闹钟功能,具体代码:
在真机的声音键打开的情况下,_notification.soundName的值我随便设一个值,收到推送时的声音是系统自带的声音。_notification.soundName的值设为项目中所加的某一个音频文件是播放的是自定义的声音。在此种情况下,收到推送时都有声音和震动。在关闭了声音键后,此时收到推送是没声音有震动的。
我再次把_notification.soundName设为了nil,收到推送时是既没有声音也没有震动的。
但还有一种情况是需要考虑的,在音量键打开的情况下,怎么样才能实现没有声音但却有震动呢?我想到的办法是项目中加入一个没有声音的音频文件,把_notification.soundName设为这个音频的名字,那么在收到推送时就是有震动但没声音了。总结如下:
声音键开启时
1、想要既有声音和震动,_notification.soundName需要设为非空值。
2、想要自定义声音,_notification.soundName需要设为工程中某个文件的名字(带后缀)。
3、想要既没声音也没震动,_notification.soundName=nil;
4、想要有震动没声音,_notification.soundName需要设为工程中某个没有声音的音频文件。
声音键关闭时
1、想要震动,_notification.soundName需要设为非空值。
2、想无震动,_notification.soundName=nil;
在本地推送检测无误的情况,我又用极光测试了远程推送的情况。
收到的内容是这样的
成功的播出了自己的声音,perfect。
至于LED灯闪烁的问题,因为Notification里面没有LED相关的属性,并不能控制LED灯闪烁。在用户打开LED灯闪烁之后,只要收到推送就会闪烁。我个人觉得开发者最多能做到的是,在用户运行APP过程中收到推送,可以通过代码来控制LED灯闪烁。
PS:笔者在QQ,微信的安装包中都找到了一个没有声音的音频文件,个人推测腾讯的推送在iPhone声音键开启的情况下,想要只有震动没有声音的效果,应该也是播放一个没有声音的音频文件。