iOS 權(quán)限設(shè)置

版本 時間
V1.0 2018.12.6

前言

iOS 10以后,蘋果增強了對用戶隱私的保護,訪問照相機、相冊、麥克風(fēng)、定位、通訊錄等,都需要在info.plist 文件中添加權(quán)限,而且少一個都不行。根據(jù)需要添加,項目中使用了什么,就添加對應(yīng)的權(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 麥克風(fēng)權(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 電視供應(yīng)商權(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)絡(luò)權(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。如果某個應(yīng)用需要支持iOS 8以下的系統(tǒng)的話,需要針對相冊權(quán)限進行不同的適配。

AssetsLibrary簡介

AssetsLibrary的組成比較符合相冊本身的組成,相冊中的完整相冊對象、相冊、相片都能在AssetsLibrary中找到一一對應(yīng)的組成,這樣在使用AssetsLibrary時變得直觀而方便。

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

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

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

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

PhotoKit簡介

Photos是iOS8時蘋果新推出的一個關(guān)于系統(tǒng)相冊的新框架。改框架應(yī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)限")
    }
}

麥克風(fēng)權(quán)限

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

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

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

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

藍牙權(quán)限

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

定位權(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ù)庫引擎,所以應(yīng)該盡量少的對他進行創(chuàng)建和銷毀,所以推薦使用EventStore的時候使用單例模式。

日歷權(quán)限請求

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

}

提醒事項權(quán)限

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

來自蘋果的建議:

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

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

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

}

Siri權(quán)限

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

如果我們想要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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容