iOS15之后,不允许推送消息没有 body 值,所以iOS15之前循环发送本地通知来实现后台播放的语音消息的方式将不再可用。
成都创新互联公司专注于企业成都全网营销、网站重做改版、南安网站定制设计、自适应品牌网站建设、H5网站设计、商城建设、集团公司官网建设、成都外贸网站制作、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为南安等各大城市提供网站开发制作服务。
所以我们将采用新的方式在 iOS15上实现后台播放语音消息,这种方式不会有震动多次的情况,而且声音是和推送消息一起出来的。
打开 Apple 开发者后台,选择 Identifiers ,创建一个App ID,并勾选 Push Notifications (配置推送证书的过程在此不再赘述,但必须要配置)
打开 Identifiers , 右侧下拉列表中选择 App Groups ,
打开主项目 App ID,勾选 App Groups ,并点击 Configure
步骤同主项目App ID 配置 App Groups。
在"Targets"中选择主项目Target,点击 + Capability ,在 App Groups 上双击,如图:
步骤同主项目App ID 配置 App Groups。
现在Xcode 中会有如下错误提示,则说明需要重新生成开发和生产的证书,因为App ID 中配置了 App Groups。
生成证书过程不再赘述。
需要准备几段音频,因为我们需要播放的是“微信到账11元”,所以第一段就是“微信到账”,然后就是0-9,点、十、百、千、万、元,可通过在线文字转音频网站处理。
把这些声音文件放在主项目中的任意位置就可以。
Have fun.
1、点击设置。如图
2、点击“通知”。如图:
3、以“提醒事项”的推送为例。点击“提醒事项”。如图:
4、点击“通知声音”。如图:
5、选择喜欢的声音即可。
iOS15之后,推送多条语音会产生多条横幅,对于动态金额语音,多条横幅是不可取的
参考:
1.制作推送提醒铃声
你可以转换格式为aiff,wav,caf 格式文件,最多30s,(一般就1-2s)
如果没有这些文件 mac中就有一些做好的声音资源
/System/Library/Sounds/
Basso.aiff Frog.aiff Hero.aiff Pop.aiff Submarine.aiff
Blow.aiff Funk.aiff Morse.aiff Purr.aiff Tink.aiff
Bottle.aiff Glass.aiff Ping.aiff Sosumi.aiff
可以使用一下代码进行转换格式
afconvert /System/Library/Sounds/Submarine.aiff ~/Desktop/sub.caf -d ima4 -f caff -v
2.把.caf文件倒入到Xcode项目中
3.修改
$body['aps'] = array(
'alert' = $message,
//'sound' = 'default',
'sound' = 'sub.caf', //为你添加到项目中的声音文件名称
'badge' = 1000
);
网上有很多博客说添加IOS10之后新增的Notification Service Extension才可以推送Apns自定义铃声,实际上是不对的,简单的自定义语音推送IOS10之前就已经支持,而且APNS Server与deviceToken直接相关联,自然也不存在许多博客说的杀死App后接受不到推送的问题。
有关Notification Service Extension多媒体拓展问题可参考
本文提供简单的自定义语音推送解决方案。
修改苹果原生推送声音:
(1)App在后台或者被杀死时,服务器给你推送的userinfo中sound字段的value和你本地的声音文件名一致时,这样就可以播放你本地自定义的语音文件(mp3,wav等常见语音格式都可以支持)。
(2)App运行在前台时大部分App会关闭掉UNNotificationPresentationOptionSound权限,当你有类似美团接单,支付宝到账等需前台响铃的需求时需要自己写响铃方法,这里主要有两种解决方案。
方案1播放系统音效
将此方法在应用在前台处理推送的方法中调用,注意区分iOS10前后处理方法的不同。
方案2:AVAudioPlayer播放
单例一个AVAudioPlayer控制类
这里我们推荐使用第一种方法,通过系统方法进行播放。
自从iOS升级到12.0.1 突然发现推送语音播报没有了效果了,之前iOS12 完全没有影响;
如何实现(网上很多,基本方案就是UNNotificationServiceExtension+语音合成)
调试了一下NotificationServiceExtension 打了断点,发现AVSpeechSynthesizer 崩溃了,试了很多都以失败告终,
在网上查找资料无果,最后尝试使用第三方语音软件,最后成功了,折腾了我几天,最后希望能够帮助苦恼的童靴们;
这里需要注意一下细节:
我用的百度语音,这里你需要将百度语音的依赖包,添加到你的pushserver 的 link binary with libraries 里面!
最后大功告成!