前言
上篇文章iOS开发中的这些权限,你搞懂了吗?介绍了一些常用权限的获取和请求方法,知道这些方法的使用基本上可以搞定大部分应用的权限访问的需求。但是,这些方法并不全面,不能涵盖住所有权限访问的方法。
So,笔者在介绍一下剩下的几种权限的访问方法和一些使用上的注意事项,希望能给大家的开发过程带来一丝便利。
最后,笔者将经常使用的权限请求方法封装开源库JLAuthorizationManager送给大家,欢迎大家pull request 和 star~~
权限
语音识别;
媒体资料库/Apple Music;
Siri;
健康数据共享;
蓝牙;
住宅权限(HomeKit);
社交账号体系权限;
活动与体能训练记录;
广告标识;
语音识别
引入头文件: @import Speech;
首先判断当前应用所处的权限状态,若当前状态为NotDetermined(未确定),此时,需要调用系统提供的请求权限方法,同时也是触发系统弹窗的所在点;
该权限涉及到的类为 SFSpeechRecognizer,具体代码如下:
|
|
需要注意的是,调用requestAuthorization
方法的block回调是在任意的子线程中进行的,如果你需要在授权成功后刷新UI的话,需要将对应的方法置于主线程中进行,笔者将上述方法默认在主线程中进行。后续权限请求方法与此类似,不再赘述。
在info.plist添加指定的配置信息,如下所示:
媒体资料库/Apple Music
导入头文件@import MediaPlayer;
使用类MPMediaLibrary进行权限访问,代码如下;
|
|
在info.plist添加指定的配置信息,如下所示:
Siri
导入头文件@import Intents;;
与其他权限不同的时,使用Siri需要在Xcode中Capabilities打开Siri开关,Xcode会自动生成一个xx.entitlements文件,若没有打开该开关,项目运行时会报错。
实现代码如下:
|
|
健康数据共享
导入头文件@import HealthKit;
健康数据共享权限相对其他权限相对复杂一些,分为写入和读出权限.
在Xcode 8中的info.plist
需要设置以下两种权限:
|
|
具体实现代码:
|
|
蓝牙
需要导入头文件@import CoreBluetooth;
蓝牙的权限检测相对其他会复杂一些,需要在代理中检测蓝牙状态;
获取蓝牙权限:
|
|
请求蓝牙权限
|
|
住宅权限(HomeKit)
需导入头文件@import HomeKit;
HomeKit
请求权限的方法如下:
|
|
社交账号体系权限
导入头文件@import Accounts;
获取对应的权限:
|
|
accountTypeIndentifier
可以是以下类型:
|
|
请求对应的权限:
|
|
活动与体能训练记录
导入头文件@import CoreMotion;
具体实现代码:
|
|
广告标识
导入头文件@import AdSupport;
获取广告标识的权限状态:
|
|
在使用advertisingIdentifier
属性前,必须调用上述方法判断是否支持,如果上述方法返回值为NO
,则advertising ID
访问将会受限。
小结一下
通过以上两篇文章的整理,有关iOS系统权限问题的处理基本上涵盖完全了;
并不是所有的权限访问都有显式的调用方法,有些是在使用过程中进行访问的,比如定位权限
、蓝牙共享权限
、Homekit权限
、活动与体能训练权限
,这些权限在使用时注意回调方法中的权限处理;
HomeKit
、HealthKit
、Siri
需要开启Capabilities
中的开关,即生成projectName.entitlements
文件;
开源库JLAuthorizationManager支持集成大部分常用的权限访问,便捷使用 welcome to pull request or star;
扫一扫下面的二维码,欢迎关注我的个人微信公众号攻城狮的动态(ID:iOSDevSkills),可在微信公众号进行留言,更多精彩技术文章,期待您的加入!一起讨论,一起成长!一起攻城狮!