情景

5.6.1版本上线后,有用户反馈使用键盘语音一直提示录音失败。最终排查出问题出现的条件是:iOS12系统&输入法的后台应用刷新关闭&输入法无后台定位权限&输入法安装包使用Xcode10进行的打包&使用了后台音频权限。以上条件少任何一个条件都无用户反馈的问题。Xcode10是苹果与iOS12系统一起推出的一个新版本。

针对情景中提到的后台权限问题,大家了解多少呢?你所在的项目是否也正在使用此权限呢?下面就给大家普及下相关知识。

后台权限介绍

应用的运行状态包括:Not running、Inactive、Active、Background、Suspended。当应用处于Background的状态时,应用在后台一般最多存活10分钟,然后就会被系统强制进入 Suspended 状态。而 iOS 为了在某些情况下提供更好的体验,提供了一些选项,只要满足这些选项的条件,就可以在后台运行很长的一段时间。但是苹果对后台权限的使用管理很严格,需要提供证据证明应用需要此类权限,否则无法通过审核。如下图,是iOS提供的后台运行方式列表。今天我们问题中提到的两个后台权限就是Audio and AirPlay和Location updates。

IOS录音权限 文档 iphone app录音权限_IOS录音权限 文档

 

 

后台音频(Audio and AirPlay)

这个权限包含四种使用场景,分别是:音频的播放,录音,AirPlay 及画中画的视频播放。 

音频的播放:在播放音频时,即使应用退到后台,只要一直有音频在播放,那应用就可以一直在后台运行。

录音:应用可以请求使用麦克风,而当开启了此后台选项,应用在使用麦克风的时候,即使退到后台,也可以一直在后台运行。而当该类应用退到后台后,iOS 系统的状态栏会变成红色,并在状态栏中显示正在使用麦克风的应用的名称,如下图所示。iOS第三方输入法的语音功能都是使用此权限使用在键盘上使用语音功能。 

IOS录音权限 文档 iphone app录音权限_输入法_02

AirPlay:AirPlay 是指将iOS设备或者Mac设备上的音视频,同步到另一个设备中播放。比如:将iPhone上的音乐通过蓝牙的方式在汽车的蓝牙音响上播放。此功能一般用于多端及多屏的交互。

画中画的视频播放:画中画是 iPad 版本的iOS 9新增加的功能,可以在 iOS 的桌面,或者其他应用的界面的上面播放视频,从而该视频区域所属的应用就可以后台运行了。此功能现在只在 iPad 应用中提供。

 

后台定位(Location updates)

一般用于导航应用中,开启此选项后,应用退到后台,还可以得到系统的定位更新,从而使得应用可以根据定位的变化做出不同的反应。

问题原因

 

通过上面的介绍,我们了解到后台音频权限和后台定位权限的使用场景,感觉两个权限之间没有任何关系。但是在苹果2018年9月份推出的12系统中任务执行逻辑发生了变化。

iOS 12系统上对应用的后台任务执行进行了限制。当应用功能使用后台语音权限时,应用没有后台定位权限&后台应用刷新开关关闭&使用Xcode10打包(sdkVersion为12.0以上),后台执行的权限就会被限制,后台任务执行时长从3分钟降低为30秒,且后台启动录音会失败。从而导致输入法键盘语音功能App语音SDK启动录音失败,并且后台无法保活。 

 

解决方案

 

1.使用Xcode9.4.1版本进行打包,但是苹果要求从2019年3月1日后提交的版本必须使用Xcode10进行打包;

2.当使用Xcode10进行打包&无后台定位权限时&关闭后台刷新开关时,用户使用语音前引导用户开启后台刷新开关。

经验总结

 

在iOS更新大版本的时候,如新增12系统,不仅要关注应用在新系统中的使用情况,还需要关注Xcode版本与原有版本之间存在的差异,将问题提前暴露。但是情景中的问题也不一定发现哦,因为官方文档中没有关于后台音频权限逻辑变化的任何描述。所以看到此文章的小伙伴们,你们的运气真是大大的好呀,少踩一个大坑了哦,快给自己鼓鼓掌吧~