2018.01.18更新
近日遇到通过xcode的upload to AppStrore 上传成功后,在iTunes的MyApps中找不到构建的版本~,后面通过查询资料才知道。是因为申请对应权限时没有在value中填写对应内容引起的~~markmarkmark。蠢哭了
原文
由于苹果对于获取用户隐私权限的严格控制,在获取用户相机/相册/位置/通知等权限时,必须由用户手动授权之后方可获取。故事,就是在这样的场景下开始的...
一、权限设置
Q:获取对应权限需要做些什么?
A:需要在info.plist中预设对应权限key值,如下Privacy - Camera Usage Description -> 相机
Privacy - Microphone Usage Description -> 麦克风
Privacy - Photo Library Usage Description -> 读取相册
Privacy - Photo Library Additions Usage Description -> 保存图片至相册
Privacy - NSLocationAlwaysUsageDescription -> 始终获取地理位置
Privacy - NSLocationWhenInUseUsageDescription -> 使用时获取地理位置
PS:位置授权二选一即可
在使用对应功能如调起相册时系统会弹框要求用户授权。
二、授权状态检测
Q:如果用户没有同意授权或拒绝授权,如何保证在使用相关功能时提示用户开启权限?
A:需要检测对应权限状态,
如果用户未授权---->提示用户授权(系统行为)
如果用户之前拒绝授权---->提示用户开启授权(App实现)
如下
检测麦克风权限+(BOOL)detectionMediaState:(void(^)())authorizedBlock
{
BOOL isAvalible = NO;
NSString *mediaType = AVMediaTypeAudio;
AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:mediaType];
//用户尚未授权->申请权限
if (authStatus == AVAuthorizationStatusNotDetermined)
{
[AVCaptureDevice requestAccessForMediaType:mediaType completionHandler:^(BOOL granted) {
if(granted)
{
if (authorizedBlock)
{
authorizedBlock();