iOS隱私權(quán)限獲取和檢測(cè)

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 更多

點(diǎn)擊前往GitHub下載項(xiàng)目

Info

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末坤学,一起剝皮案震驚了整個(gè)濱河市疯坤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌深浮,老刑警劉巖压怠,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異飞苇,居然都是意外死亡菌瘫,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門布卡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來雨让,“玉大人,你說我怎么就攤上這事忿等∑苤遥” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵贸街,是天一觀的道長(zhǎng)庵寞。 經(jīng)常有香客問我,道長(zhǎng)薛匪,這世上最難降的妖魔是什么捐川? 我笑而不...
    開封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮逸尖,結(jié)果婚禮上古沥,老公的妹妹穿的比我還像新娘。我一直安慰自己娇跟,他們只是感情好岩齿,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著苞俘,像睡著了一般盹沈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上苗胀,一...
    開封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天襟诸,我揣著相機(jī)與錄音瓦堵,去河邊找鬼。 笑死歌亲,一個(gè)胖子當(dāng)著我的面吹牛菇用,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播陷揪,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼惋鸥,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了悍缠?” 一聲冷哼從身側(cè)響起卦绣,我...
    開封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎飞蚓,沒想到半個(gè)月后滤港,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡趴拧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年溅漾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片著榴。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡添履,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出脑又,到底是詐尸還是另有隱情暮胧,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布问麸,位于F島的核電站往衷,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏口叙。R本人自食惡果不足惜炼绘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一嗅战、第九天 我趴在偏房一處隱蔽的房頂上張望妄田。 院中可真熱鬧,春花似錦驮捍、人聲如沸疟呐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽启具。三九已至,卻和暖如春珊泳,著一層夾襖步出監(jiān)牢的瞬間鲁冯,已是汗流浹背拷沸。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留薯演,地道東北人撞芍。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像跨扮,于是被迫代替她去往敵國(guó)和親序无。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,116評(píng)論 25 707
  • 即使我已經(jīng)洞察周易的結(jié)果 但也只愿意 和你重新來過 我想把所有的乖戾殘忍猙獰瘋狂傾灑給世界 因?yàn)槟菢?給你的 就只...
    周荀川閱讀 627評(píng)論 0 2
  • 1衡创、產(chǎn)品簡(jiǎn)介 悅跑圈帝嗡,是一款為用戶提供跑步服務(wù)的運(yùn)動(dòng)app產(chǎn)品,它擁有自己核心的防作弊技術(shù)璃氢、準(zhǔn)確的地理位置定位哟玷,這...
    卡薩布蘭卡91閱讀 1,740評(píng)論 0 1
  • 今天由于忙,沒能很好備課一也,剛好有伙伴向我提問關(guān)于大客戶銷售的問題碗降,就給大家做了關(guān)于銷售的一些分享,如下: 0318...
    Tom教練閱讀 210評(píng)論 0 2