引言
背景:iOS12.1 之后 AVAudioPlayer 无法在后台播放语音。
在杀死APP的情况下仍可进行语言播报的实现方案:iOS 10新增的Service Extension。
不使用Voip 推送的原因:iOS13中(XCode11编译)苹果不再允许PushKit应用在非voip电话的场景上,如果需要使用PushKit的话则需要接入CallKit的接口,导致收到客户端收到Voip Push时会拉起一个接打电话的全屏界面。
在iOS10中推出的Notification Service Extension(NSE),当apns的payload上带上"mutable-content"的值为1时,就会进入NSE的代码中。与Voip方不同之处是,NSE不能唤醒主应用,也不能访问主应用的文件空间,只能在Extension进程中处理相应的逻辑。在NSE中,开发者可以更改通知的内容,利用离线合成或者从后台下载的方式,生成需要播报的内容,通过自定义通知铃声的方式,达到语音播报提醒的目的。
将合成的/下载的语音音频文件存储到AppGroups下的Library/Sounds文件夹中。
- (NSString