GitHub:ECAuthorizationTools
該工具類主要是為了方便大家獲取設(shè)備權(quán)限和檢查對(duì)應(yīng)的權(quán)限频祝,目前支持iOS7 - iOS10所有設(shè)置中的隱私權(quán)限獲取和檢測(cè)磅氨。具體每一個(gè)隱私的權(quán)限獲取和檢測(cè)都在工具類ECAuthorizationTools.h中有詳細(xì)的邏輯思路。DemoViewController.m中也有詳細(xì)的使用工具類方式悔雹。如果有什么不清楚的可以給我留言解決或者在git上issues我灭袁。
點(diǎn)擊前往GitHub下載項(xiàng)目
更新 & bug fix
20170731 bug修復(fù):iOS7獲取相冊(cè)權(quán)限不彈框
// 當(dāng)某些情況下竟秫,ALAuthorizationStatus 為 ALAuthorizationStatusNotDetermined的時(shí)候,
// 無法彈出系統(tǒng)首次使用的收取alertView灭忠,系統(tǒng)設(shè)置中也沒有相冊(cè)的設(shè)置膳算,此時(shí)將無法使用,
// 所以做以下操作弛作,彈出系統(tǒng)首次使用的授權(quán)alertView
__block BOOL isShow = YES;
ALAssetsLibrary *assetLibrary = [[ALAssetsLibrary alloc] init];
[assetLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
if (isShow) {
[self executeCallBack:accessStatusCallBack accessStatus:ECAuthorizationStatus_Authorized type:ECPrivacyType_Photos];
isShow = NO;
}
} failureBlock:^(NSError *error) {
[self executeCallBack:accessStatusCallBack accessStatus:ECAuthorizationStatus_Denied type:ECPrivacyType_Photos];
}];
Abstract 概要
Features & Requirements 特性 & 要求
- 支持iOS7+
- ARC
目前支持的隱私類型(順序參照:iphone設(shè)置-隱私):
typedef NS_ENUM(NSUInteger, ECPrivacyType){
ECPrivacyType_None = 0,
ECPrivacyType_LocationServices = 1, // 定位服務(wù)
ECPrivacyType_Contacts = 2, // 通訊錄
ECPrivacyType_Calendars = 3, // 日歷
ECPrivacyType_Reminders = 4, // 提醒事項(xiàng)
ECPrivacyType_Photos = 5, // 照片
ECPrivacyType_BluetoothSharing = 6, // 藍(lán)牙共享
ECPrivacyType_Microphone = 7, // 麥克風(fēng)
ECPrivacyType_SpeechRecognition = 8, // 語音識(shí)別 >= iOS10
ECPrivacyType_Camera = 9, // 相機(jī)
ECPrivacyType_Health = 10, // 健康 >= iOS8.0
ECPrivacyType_HomeKit = 11, // 家庭 >= iOS8.0
ECPrivacyType_MediaAndAppleMusic = 12, // 媒體與Apple Music >= iOS9.3
ECPrivacyType_MotionAndFitness = 13, // 運(yùn)動(dòng)與健身
};
參照下圖:
image
Tips:在iOS10下記得在plist文件下添加對(duì)應(yīng)的參數(shù)涕蜂。
<key>NSBluetoothPeripheralUsageDescription</key>
<string>需要獲取藍(lán)牙權(quán)限</string>
<key>NSCalendarsUsageDescription</key>
<string>日歷</string>
<key>NSCameraUsageDescription</key>
<string>需要獲取您的攝像頭信息</string>
<key>NSContactsUsageDescription</key>
<string>需要獲取您的通訊錄權(quán)限</string>
<key>NSHealthShareUsageDescription</key>
<string>健康分享權(quán)限</string>
<key>NSHealthUpdateUsageDescription</key>
<string>健康數(shù)據(jù)更新權(quán)限</string>
<key>NSHomeKitUsageDescription</key>
<string>HomeKit權(quán)限</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>一直定位權(quán)限</string>
<key>NSLocationUsageDescription</key>
<string>定位權(quán)限</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>使用app期間定位權(quán)限</string>
<key>NSMicrophoneUsageDescription</key>
<string>需要獲取您的麥克風(fēng)權(quán)限</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>需要獲取您的相冊(cè)信息</string>
<key>NSRemindersUsageDescription</key>
<string>提醒事項(xiàng)</string>
<key>NSSiriUsageDescription</key>
<string>需要獲取您的Siri權(quán)限</string>
<key>NSSpeechRecognitionUsageDescription</key>
<string>語音識(shí)別權(quán)限</string>
<key>NSVideoSubscriberAccountUsageDescription</key>
<string>AppleTV權(quán)限</string>
<key>NSAppleMusicUsageDescription</key>
<string>Add tracks to your music library.</string>
<key>NSMotionUsageDescription</key>
<string>運(yùn)動(dòng)與健身權(quán)限</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>需要獲取您的相冊(cè)信息</string>
Content 正文
Installation 安裝
- 將ECAuthorizationTools文件夾直接拖入項(xiàng)目中即可。
- 在需要做權(quán)限檢測(cè)或者獲取的類中導(dǎo)入ECAuthorizationTools.h
#import "ECAuthorizationTools.h"
Explain 說明
ps:該工具類中注釋也比較完整映琳,并且有完整的使用Dmeo机隙。這里就簡(jiǎn)單解釋說明一下代碼以及一些容易踩的坑蜘拉。
ECAuthorizationStatus 權(quán)限狀態(tài),參考PHAuthorizationStatus等有鹿。
typedef NS_ENUM(NSUInteger, ECAuthorizationStatus){
ECAuthorizationStatus_NotDetermined = 0, // 用戶從未進(jìn)行過授權(quán)等處理旭旭,首次訪問相應(yīng)內(nèi)容會(huì)提示用戶進(jìn)行授權(quán)
ECAuthorizationStatus_Authorized = 1, // 已授權(quán)
ECAuthorizationStatus_Denied = 2, // 拒絕
ECAuthorizationStatus_Restricted = 3, // 應(yīng)用沒有相關(guān)權(quán)限,且當(dāng)前用戶無法改變這個(gè)權(quán)限葱跋,比如:家長(zhǎng)控制
ECAuthorizationStatus_NotSupport = 4, // 硬件等不支持
};
ECLocationAuthorizationStatus 定位權(quán)限狀態(tài)持寄,參考CLAuthorizationStatus
typedef NS_ENUM(NSUInteger, ECLocationAuthorizationStatus){
ECLocationAuthorizationStatus_NotDetermined = 0, // 用戶從未進(jìn)行過授權(quán)等處理,首次訪問相應(yīng)內(nèi)容會(huì)提示用戶進(jìn)行授權(quán)
ECLocationAuthorizationStatus_Authorized = 1, // 一直允許獲取定位 ps:< iOS8用
ECLocationAuthorizationStatus_Denied = 2, // 拒絕
ECLocationAuthorizationStatus_Restricted = 3, // 應(yīng)用沒有相關(guān)權(quán)限娱俺,且當(dāng)前用戶無法改變這個(gè)權(quán)限稍味,比如:家長(zhǎng)控制
ECLocationAuthorizationStatus_NotSupport = 4, // 硬件等不支持
ECLocationAuthorizationStatus_AuthorizedAlways = 5, // 一直允許獲取定位
ECLocationAuthorizationStatus_AuthorizedWhenInUse = 6, // 在使用時(shí)允許獲取定位
};
ECCBManagerState 藍(lán)牙狀態(tài),參考 CBManagerState
typedef NS_ENUM(NSUInteger, ECCBManagerStatus){
ECCBManagerStatusUnknown = 0, // 未知狀態(tài)
ECCBManagerStatusResetting = 1, // 正在重置荠卷,與系統(tǒng)服務(wù)暫時(shí)丟失
ECCBManagerStatusUnsupported = 2, // 不支持藍(lán)牙
ECCBManagerStatusUnauthorized = 3, // 未授權(quán)
ECCBManagerStatusPoweredOff = 4, // 關(guān)閉
ECCBManagerStatusPoweredOn = 5, // 開啟并可用
};
Usage 使用方式
Main Enter Method 主要的一些入口方法
ps:下述方法都有中文注釋模庐,就不再做過多解釋,如果有疑問的可以參考Dmeo油宜。
檢查和請(qǐng)求對(duì)應(yīng)類型的權(quán)限
/**
Check and request access for * type
檢查和請(qǐng)求對(duì)應(yīng)類型的權(quán)限
@param type ECPrivacyType
@param accessStatusCallBack AccessForTypeResultBlock
*/
+ (void)checkAndRequestAccessForType:(ECPrivacyType)type accessStatus:(AccessForTypeResultBlock)accessStatusCallBack;
檢查和請(qǐng)求定位服務(wù)的權(quán)限
/**
Check and request access for LocationServices
檢查和請(qǐng)求定位服務(wù)的權(quán)限
@param accessStatusCallBack accessStatus
*/
- (void)checkAndRequestAccessForLocationServicesWithAccessStatus:(AccessForLocationResultBlock)accessStatusCallBack;
檢查和請(qǐng)求藍(lán)牙共享服務(wù)的權(quán)限
/**
Check and request access for BluetoothSharing
檢查和請(qǐng)求藍(lán)牙共享服務(wù)的權(quán)限
@param accessStatusCallBack accessStatus
*/
- (void)checkAndRequestAccessForBluetoothSharingWithAccessStatus:(AccessForBluetoothResultBlock)accessStatusCallBack;
檢查和請(qǐng)求健康的權(quán)限
/**
Check and request access for Health
檢查和請(qǐng)求健康的權(quán)限
@param accessStatusCallBack accessStatus
*/
- (void)checkAndRequestAccessForHealthWtihAccessStatus:(AccessForTypeResultBlock)accessStatusCallBack;
訪問家庭權(quán)限是需要回調(diào)指定的的HMHomeManagerDelegate協(xié)議掂碱,并且回調(diào)之后的后續(xù)邏輯處理比較麻煩,建議使用者可以直接調(diào)用系統(tǒng)的獲取權(quán)限方法慎冤。在回調(diào)協(xié)議中做處理疼燥。這里做出簡(jiǎn)單Demo以方便參考。注意:HMError.h類
/**
Check And Request Access For Home
Tip:訪問家庭權(quán)限是需要回調(diào)指定的的HMHomeManagerDelegate協(xié)議粪薛,并且回調(diào)之后的后續(xù)邏輯處理比較麻煩悴了,建議使用者可以直接調(diào)用系統(tǒng)的獲取權(quán)限方法搏恤。在回調(diào)協(xié)議中做處理违寿。這里做出簡(jiǎn)單Demo以方便參考。注意:HMError.h類
@param accessForHomeCallBack AccessForHomeResultBlock
*/
- (void)checkAndRequestAccessForHome:(AccessForHomeResultBlock)accessForHomeCallBack;
同訪問Home一樣熟空,運(yùn)動(dòng)與健身這里也只給出簡(jiǎn)單demo方便參考藤巢,可以直接copy代碼到自己的項(xiàng)目中直接用
/**
Check And Request Access For Motion And Fitness
同訪問Home一樣,運(yùn)動(dòng)與健身這里也只給出簡(jiǎn)單demo方便參考息罗,可以直接copy代碼到自己的項(xiàng)目中直接用
*/
- (void)checkAndRequestAccessForMotionAndFitness;
Example 使用范例
獲取相冊(cè)訪問權(quán)限
[ECAuthorizationTools checkAndRequestAccessForType:ECPrivacyType_Photos accessStatus:^(ECAuthorizationStatus status, ECPrivacyType type) {
// status 即為權(quán)限狀態(tài)掂咒,狀態(tài)類型參考:ECAuthorizationStatus
}];
訪問定位權(quán)限
ECAuthorizationTools *tools = [[ECAuthorizationTools alloc] init];
[tools checkAndRequestAccessForLocationServicesWithAccessStatus:^(ECLocationAuthorizationStatus status) {
// status 類型參考 ECLocationAuthorizationStatus
}];
Tips:訪問定位、藍(lán)牙迈喉、健康绍刮、家庭、運(yùn)動(dòng)等權(quán)限的時(shí)候需要用對(duì)象方法去獲取挨摸,其余可以采用類方法傳入對(duì)應(yīng)類型枚舉即可獲取孩革。為什么呢?因?yàn)樯鲜鰩追N類型權(quán)限獲取都需要響應(yīng)對(duì)應(yīng)的代理協(xié)議得运,并且需要在類中用到其對(duì)象膝蜈,所以采用對(duì)象方法獲取權(quán)限更便捷方便锅移。可以參考Demo中的DemoViewController.m文件饱搏,里面有詳細(xì)的使用方法可供參考非剃。
再附上一張Demo截圖:
image
More 更多
- 工具類和Demo中已經(jīng)給出了非常完整的獲取權(quán)限和檢測(cè)權(quán)限邏輯代碼,除了可以直接導(dǎo)入工具類使用外推沸,也可以直接Copy邏輯代碼到自己的項(xiàng)目中使用备绽。
- 有什么使用方面的問題可以直接Issues我或者Email或者QQ都o(jì)k的。
- Email: zuoqianheng@foxmail.com || QQ:615125175
- 簡(jiǎn)書:@EchoZuo 或者 http://www.reibang.com/u/3390ce71084e
- Github:@EchoZuo 或者 https://github.com/EchoZuo/ECAuthorizationTools
- CSDN:https://blog.csdn.net/zuoqianheng
點(diǎn)擊前往GitHub下載項(xiàng)目
Info
- Blog:https://echozuo.github.io
- Github:https://github.com/EchoZuo
- Email: zuoqianheng@foxmail.com
- CSDN:https://blog.csdn.net/zuoqianheng
- Telegram:@echozuo