从iOS10开始苹果更加注重用户隐私,很多例如:定位、相机、相册、蓝牙、通讯录等功能需要弹选择框经过用户同意后才能使用。如果用户点击不同意,但你仍坚持调用相关的函数,那App大多数时候就会华丽Crash!为了避免这些问题,可以通过一些方法获取到当前App对应用户隐私的权限状态。
先上代码
info.plist设置
首先要在info.plist中加入对应的key-value键值对,key如下图所示,value则需要输入你的App获取这个权限的目的,如果不设置运行会报错,例如:'NSHealthUpdateUsageDescription must be set in the app's Info.plist
Data Class | Xcode Key |
---|---|
Apple Music | Privacy - Media Library Usage Description |
Bluetooth | Privacy - Bluetooth Always Usage Description |
Calendar | Privacy - Calendars Usage Description |
Camera | Privacy - Camera Usage Description |
Contacts | Privacy - Contacts Usage Description |
Health | Privacy - Health Share Usage Description Privacy - Health Update Usage Description |
Home | Privacy - HomeKit Usage Description |
Location | Privacy - Location When In Use Usage Description Privacy - Location Always Usage Description Privacy - Location Always and When In Use Usage Description |
Microphone | Privacy - Microphone Usage Description |
Motion | Privacy - Motion Usage Description |
Photos | Privacy - Photo Library Usage Description |
Reminders | Privacy - Reminders Usage Description |
Siri | Privacy - Siri Usage Description |
权限代码判断
为了好理解我们用伪代码,以获取相册权限为例,拿到PHAuthorizationStatus枚举类型,可能有以下几种情况:
- StatusNotDetermined:表示用户尚未作出选择(有些支持开发者调用请求权限的函数主动弹框询问用户);
- StatusRestricted:表示无权更改此应用程序状态,有可能是”家长控制“等原因;
- StatusDenied:说明在获取权限弹框界面上,用户点击了”不允许“,遇上这个情况可以给用户一个友好的提示,引导其去”设置“中打开对应权限;
- StatusAuthorized:说明在获取权限弹框界面上,用户点击了”允许“,相关权限对应的功能可以正常使用。
注意:每次调用UIImagePickerController之前都要判断status,若该权限被用户明确拒绝,不加判断App会有奔溃的风险!(在首次权限弹框点击”允许“后,可以到”设置“中手动将对应权限关闭,这里的判断主要就是为了预防此类问题)
如果本文对你有所帮助,记得点个赞哈
网友评论