iOS 權(quán)限設置

版本 時間
V1.0 2018.12.6

前言

iOS 10以后恩尾,蘋果增強了對用戶隱私的保護,訪問照相機挽懦、相冊翰意、麥克風、定位信柿、通訊錄等冀偶,都需要在info.plist 文件中添加權(quán)限,而且少一個都不行渔嚷。根據(jù)需要添加进鸠,項目中使用了什么,就添加對應的權(quán)限形病。

正文

info.plist中的相關(guān)配置說明

字段 描述
Privacy - Photo Library Usage Description 相冊使用權(quán)限
Privacy - Photo Library Additions Usage Description 編輯相冊權(quán)限
Privacy - Camera Usage Description 相機權(quán)限
Privacy - Contacts Usage Description 通訊錄權(quán)限
Privacy - Microphone Usage Description 麥克風權(quán)限
Privacy - Bluetooth Peripheral Usage Description 藍牙權(quán)限
Privacy - Location Always Usage Description 定位權(quán)限
Privacy - Location Usage Description 定位權(quán)限
Privacy - Location When In Use Usage Description 定位權(quán)限
Privacy - Location Always and When In Use Usage Description 定位權(quán)限
Privacy - Media Library Usage Description 媒體庫權(quán)限
Privacy - Calendars Usage Description 日歷權(quán)限
Privacy - Reminders Usage Description 提醒事項權(quán)限
Privacy - Face ID Usage Description FaceID權(quán)限
Privacy - Health Records Usage Description 健康記錄權(quán)限
Privacy - Health Share Usage Description 健康分享權(quán)限
Privacy - Health Update Usage Description 健康更新權(quán)限
Privacy - Motion Usage Description 運動權(quán)限
Privacy - Music Usage Description 音樂權(quán)限
Privacy - NFC Scan Usage Description NFC權(quán)限
Privacy - Siri Usage Description Siri權(quán)限
Privacy - Speech Recognition Usage Description 語音識別權(quán)限
Privacy - HomeKit Usage Description 智能家具權(quán)限
Privacy - TV Provider Usage Description 電視供應商權(quán)限
Privacy - Video Subscriber Account Usage Description 視頻用戶賬號使用權(quán)限

可根據(jù)需要在info.plist中添加以上key值堤如,但是描述一定要清楚明白,否則蘋果審核可能會不通過

可根據(jù)需要在info.plist中添加以上key值窒朋,但是描述一定要清楚明白搀罢,否則蘋果審核可能會不通過

可根據(jù)需要在info.plist中添加以上key值,但是描述一定要清楚明白侥猩,否則蘋果審核可能會不通過

權(quán)限請求以及簡要說明

在info.plist中配置了榔至,并不代表就完全不需要developer去自己請求權(quán)限,只有極少部分權(quán)限系統(tǒng)在進入的時候會幫助developer向用戶發(fā)起請求欺劳,例如:網(wǎng)絡權(quán)限唧取,通知權(quán)限等。

絕大部分權(quán)限請求狀態(tài)可以分為以下4種情況:

  • notDetermined 表示未發(fā)起對當前權(quán)限的請求
  • restricted 表示用戶無法更改當前請求權(quán)限的狀態(tài)(出現(xiàn)這種情況的原因可能是家長控制等)
  • denied 表示用戶已拒絕當前請求的權(quán)限
  • authorized 表示用戶已同意當前請求的權(quán)限

相冊權(quán)限

iOS 8開始到現(xiàn)在蘋果爸爸將操作相冊的ALAssetsLibrary替換成了Photos划提,在iOS 9中廢棄了原有的ALAssetsLibrary枫弟。如果某個應用需要支持iOS 8以下的系統(tǒng)的話,需要針對相冊權(quán)限進行不同的適配鹏往。

AssetsLibrary簡介

AssetsLibrary的組成比較符合相冊本身的組成淡诗,相冊中的完整相冊對象、相冊、相片都能在AssetsLibrary中找到一一對應的組成韩容,這樣在使用AssetsLibrary時變得直觀而方便款违。

AssetsLibrary:表示設備中的相冊庫,通過AssetsLibrary可以獲得整個設備中的照片和視頻群凶。

ALAssetsGroup:表示整個相冊中的一個相冊插爹,通過ALAssetsGroup可以獲得某一個相冊的信息,相冊下的所有資源请梢,同時也可以向某一個相冊中添加資源赠尾。

ALAsset: 表示整個相冊中的一個照片或者視頻,通過ALAsset可以獲得某個照片或視頻的詳細信息毅弧,或保存照片和視頻气嫁。

ALAssetRepresentation: 它是對ALAsset的封裝,可以是developer更加方便的獲取ALAsset中的資源信息形真,每個ALAsset都有至少一個ALAssetRepresentation對象杉编,可以通過defaultRepresentation來獲取超全。

PhotoKit簡介

Photos是iOS8時蘋果新推出的一個關(guān)于系統(tǒng)相冊的新框架咆霜。改框架應該跟AssetsLibrary的處理不一樣,他不是去根據(jù)條件遍歷數(shù)據(jù)資源嘶朱,而是根據(jù)條件直接獲得指定的資源蛾坯。簡而言之,個人覺得相對于AssetsLibrary更加高效和完整疏遏。

PHAsset: 代表相冊庫中的一個照片脉课、視頻或者實時照片,跟ALAsset類似财异,通過PHAsset可以獲取和保存資源

PHFetchOptions: 獲取相冊中的資源時的參數(shù)倘零,可以傳 nil。

PHFetchResult: 表示通過PHAsset戳寸、PHCollection呈驶、PHAssetCollectionPHCollectionList的類方法來檢索時,返回的一系列資源對象集合疫鹊。

PHAssetCollection: 表示一個相冊或者一個時刻

PHImageManager: 用于處理資源的加載袖瞻,加載圖片的過程帶有緩存處理,可以通過傳入一個PHImageRequestOptions控制資源的輸出尺寸等規(guī)格

PHImageRequestOptions: 如上面所說拆吆,控制加載圖片時的一系列參數(shù)聋迎,如是否同步等。

相冊權(quán)限請求相關(guān)代碼

PhotoKit權(quán)限請求

PHPhotoLibrary.requestAuthorization { (status: PHAuthorizationStatus) in
    switch status {
    case .restricted:
        print("當前用戶無法更改該權(quán)限狀態(tài)")
    case .authorized:
        print("允許當前權(quán)限的請求")
    case .denied:
        print("拒絕當前權(quán)限的請求")
    default:
        print("未發(fā)起對當前權(quán)限的請求")
    }
}

相機權(quán)限

判斷相機權(quán)限

let status = AVCaptureDevice.authorizationStatus(for: .video)

相機權(quán)限請求

AVCaptureDevice.requestAccess(for: .video) { (granted) in
  if granted {
    print("用戶同意開啟相機權(quán)限")
  } else {
    print("用戶拒絕開啟相機權(quán)限")
  }
}

通訊錄權(quán)限

在iOS開發(fā)過程中枣耀,通訊錄也同相冊一樣霉晕,存在著兩套庫分別是AddressBookContacts。此篇著重于權(quán)限請求娄昆,所以在此處只是簡單介紹以下兩者佩微。

AddressBook簡介

AddressBook是一套C語言的API。主要幾個常用的類說明:

ABRecordRef:表示一個聯(lián)系人記錄萌焰,其中包含了所有的屬性哺眯,比如姓氏,名字扒俯,手機奶卓,郵箱等;

ABAddresBookRef:表示的是所有用戶聯(lián)系人的大集合,可以對記錄進行增刪改;

AddressBook權(quán)限請求
let addressBook: ABAddressBook = ABAddressBookCreateWithOptions(nil, nil) as ABAddressBook
ABAddressBookRequestAccessWithCompletion(addressBook) { (granted: Bool, error: CFError?) in
    if !granted {
        print("未獲得通訊錄訪問權(quán)限")
        return
    }
    print("獲得通訊錄權(quán)限")
}

Contacts簡介

Contacts是在iOS 9的時候才出現(xiàn)的用來取代AddressBook的新通訊錄框架撼玄。Contacts最大的優(yōu)點是線程安全夺姑。下面介紹一下幾個主要用到的類:
CNLabeledValue是一個泛型的類,可以使用如下方法直接返回一個CNLabeledValue類型掌猛。在CNContact中的屬性都是以CNLabeledValueCNLabeledValue數(shù)組的形式存在盏浙。我們可以把它當成一個字典(NSDictionary),Label相當于是key荔茬,而Value就是Value;

CNPhoneNumber:表示電話號碼類废膘,主要包括了一個屬性就是號碼,至于到底是家庭號碼還是工作號碼 需要通過Label來進行區(qū)分;

CNPostalAddressCNMutablePostalAddress:表示聯(lián)系人地址;

CNSocialProfile:表示社會化組件信息慕蔚,比如FaceBook丐黄,微博等;

CNInstantMessageAddress:表示即時通訊信息,比如QQ這些;

CNContactRelation:表示聯(lián)系人關(guān)系信息孔飒。

Contacts權(quán)限請求
if CNContactStore.authorizationStatus(for: .contacts) == .notDetermined {
    let store = CNContactStore.init()
    store.requestAccess(for: .contacts) { (granted: Bool, error: Error?) in
        if !granted {
            print("未獲得通訊錄訪問權(quán)限")
            return
        }
        print("獲得通訊錄權(quán)限")
    }
}

麥克風權(quán)限

判斷麥克風權(quán)限

let status = AVCaptureDevice.authorizationStatus(for: .audio)

麥克風權(quán)限請求

AVCaptureDevice.requestAccess(for: .audio) { (granted) in
  if granted {
    print("用戶同意開啟麥克風權(quán)限")
  } else {
    print("用戶拒絕開啟麥克風權(quán)限")
  }
}

藍牙權(quán)限

后面會專門寫一篇介紹藍牙的學習筆記灌闺。(先欠下這一筆)

定位權(quán)限

定位權(quán)限開啟判斷

let localEnable = CLLocationManager.locationServicesEnabled()
if !localEnable {
  print("用戶無法修改該權(quán)限狀態(tài)")
} else {
  let localServiceStatus = CLLocationManager.authorizationStatus()
  switch localServiceStatus {
    case .restricted:
    print("當前用戶無法更改該權(quán)限狀態(tài)")
    case .authorized:
    print("允許當前權(quán)限的請求")
    case .denied:
    print("拒絕當前權(quán)限的請求")
    default:
    print("未發(fā)起對當前權(quán)限的請求")
  }
}

媒體庫權(quán)限

媒體庫權(quán)限請求

@available(iOS 9.3, *)
MPMediaLibrary.requestAuthorization { (status) in
  switch status {
  case .restricted:
      print("當前用戶無法更改該權(quán)限狀態(tài)")
  case .authorized:
      print("允許當前權(quán)限的請求")
  case .denied:
      print("拒絕當前權(quán)限的請求")
  default:
      print("未發(fā)起對當前權(quán)限的請求")
  }
}

日歷權(quán)限

日歷里面的事件需要通過一個Calendar database的數(shù)據(jù)管理,如果需要訪問的話坏瞄,我們可以通過EventKit來進行訪問日歷的信息桂对。

來自蘋果的建議:

因為EventStoreCalendar database的數(shù)據(jù)庫引擎,所以應該盡量少的對他進行創(chuàng)建和銷毀鸠匀,所以推薦使用EventStore的時候使用單例模式蕉斜。

日歷權(quán)限請求

EKEventStore().requestAccess(to: EKEntityType.event) { (granted, error) in

}

提醒事項權(quán)限

提醒事項和日歷使用相同的框架來訪問一個叫做Calendar database的數(shù)據(jù)庫。所以需要訪問的話狮崩,我們也可以通過EventKit來進行提醒事項的信息蛛勉。

來自蘋果的建議:

因為EventStoreCalendar database的數(shù)據(jù)庫引擎,所以應該盡量少的對他進行創(chuàng)建和銷毀睦柴,所以推薦使用EventStore的時候使用單例模式诽凌。

提醒事項權(quán)限請求

EKEventStore().requestAccess(to: EKEntityType.reminder) { (granted, error) in

}

Siri權(quán)限

SiriKitiOS 10引入的。目前Siri能支持的服務有:基于網(wǎng)絡的語音/視頻通話坦敌,發(fā)送消息等侣诵。在使用SiriKit的時候痢法,用戶給Siri傳達的指令都會被識別成一個Intents,Siri會根據(jù)Intents Domain去提供服務。

如果我們想要App對接Siri,只需要做以下兩件事就夠了:

1.在info.plist中提供App支持的Intents Domain;

2.實現(xiàn)具體的Intents方法杜顺。

具體的會在另外一章完成财搁,此篇只完成權(quán)限這塊的說名。(@_@)

Siri權(quán)限請求

INPreferences.requestSiriAuthorization { (status) in
  switch status {
  case .restricted:
      print("當前用戶無法更改該權(quán)限狀態(tài)")
  case .authorized:
      print("允許當前權(quán)限的請求")
  case .denied:
      print("拒絕當前權(quán)限的請求")
  default:
      print("未發(fā)起對當前權(quán)限的請求")
  }
}

語音識別權(quán)限

語音識別

SFSpeechRecognizer.requestAuthorization { (status) in
  switch status {
  case .restricted:
    print("當前用戶無法更改該權(quán)限狀態(tài)")
  case .authorized:
    print("允許當前權(quán)限的請求")
  case .denied:
    print("拒絕當前權(quán)限的請求")
  default:
    print("未發(fā)起對當前權(quán)限的請求")
  }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末躬络,一起剝皮案震驚了整個濱河市尖奔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌穷当,老刑警劉巖提茁,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異馁菜,居然都是意外死亡茴扁,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進店門汪疮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來峭火,“玉大人,你說我怎么就攤上這事智嚷÷敉瑁” “怎么了?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵纤勒,是天一觀的道長坯苹。 經(jīng)常有香客問我隆檀,道長摇天,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任恐仑,我火速辦了婚禮泉坐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘裳仆。我一直安慰自己腕让,他們只是感情好,可當我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布歧斟。 她就那樣靜靜地躺著纯丸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪静袖。 梳的紋絲不亂的頭發(fā)上觉鼻,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天,我揣著相機與錄音队橙,去河邊找鬼坠陈。 笑死萨惑,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的仇矾。 我是一名探鬼主播庸蔼,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼贮匕!你這毒婦竟也來了姐仅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤刻盐,失蹤者是張志新(化名)和其女友劉穎萍嬉,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體隙疚,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡壤追,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了供屉。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片行冰。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖伶丐,靈堂內(nèi)的尸體忽然破棺而出悼做,到底是詐尸還是另有隱情,我是刑警寧澤哗魂,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布肛走,位于F島的核電站,受9級特大地震影響录别,放射性物質(zhì)發(fā)生泄漏朽色。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一组题、第九天 我趴在偏房一處隱蔽的房頂上張望葫男。 院中可真熱鬧,春花似錦崔列、人聲如沸梢褐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽盈咳。三九已至,卻和暖如春边翼,著一層夾襖步出監(jiān)牢的瞬間鱼响,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工讯私, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留热押,地道東北人西傀。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像桶癣,于是被迫代替她去往敵國和親拥褂。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,724評論 2 351

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