ios
[ios - Swift] 카메라, 앨범 권한 설정
POKY_0908
2020. 12. 1. 20:00
오늘은 카메라 및 사진 권한 설정 및 사용방법에 대해 알아보도록 하겠습니다.
1. info.plist
카메라와 앨범에 접근할 수 있도록 권한을 요청합니다. value 에는 보여주고 싶은 말을 적어주시면 됩니다.
2. 권한 요청
override func viewDidLoad() {
super.viewDidLoad()
imagePickerController.delegate = self
// 앨범
PHPhotoLibrary.requestAuthorization { (state) in
print(state)
}
}
override func viewDidLoad() {
super.viewDidLoad()
imagePickerController.delegate = self
// 카메라
AVCaptureDevice.requestAccess(for: .video) { (result) in
print(result)
}
}
카메라 및 사진 앨범에 대한 권한을 요청한 후 결과를 확인해보면 아래와 같습니다.
하지만 사용자가 한번 거부를 하거나 앱 설정에서 접근 권한을 바꾼다면 위에 카메라와 앨범을 사용할 수 없기 때문에
카메라 또는 사진 앨범을 실행 시 권한을 체크해서 재요청 가능하도록 처리해보도록 하겠습니다.
사진과 같이 카메라와 앨범에 대한 권한을 끄도록 하겠습니다.
버튼 이벤트 설정
let imagePickerController = UIImagePickerController()
@IBAction func Camera_Click(_ sender: Any) {
if CameraAuth() {
self.imagePickerController.sourceType = .camera
self.present(self.imagePickerController, animated: true, completion: nil)
} else {
AuthSettingOpen(AuthString: "카메라")
}
}
@IBAction func Library_Click(_ sender: Any) {
if PhotoAuth() {
self.imagePickerController.sourceType = .photoLibrary
self.present(self.imagePickerController, animated: true, completion: nil)
} else {
AuthSettingOpen(AuthString: "앨범")
}
}
권한 요청
extension ViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate {
func PhotoAuth() -> Bool {
// 포토 라이브러리 접근 권한
let authorizationStatus = PHPhotoLibrary.authorizationStatus()
var isAuth = false
switch authorizationStatus {
case .authorized: return true // 사용자가 앱에 사진 라이브러리에 대한 액세스 권한을 명시 적으로 부여했습니다.
case .denied: break // 사용자가 사진 라이브러리에 대한 앱 액세스를 명시 적으로 거부했습니다.
case .limited: break // ?
case .notDetermined: // 사진 라이브러리 액세스에는 명시적인 사용자 권한이 필요하지만 사용자가 아직 이러한 권한을 부여하거나 거부하지 않았습니다
PHPhotoLibrary.requestAuthorization { (state) in
if state == .authorized {
isAuth = true
}
}
return isAuth
case .restricted: break // 앱이 사진 라이브러리에 액세스 할 수있는 권한이 없으며 사용자는 이러한 권한을 부여 할 수 없습니다.
default: break
}
return false;
}
func CameraAuth() -> Bool {
return AVCaptureDevice.authorizationStatus(for: .video) == AVAuthorizationStatus.authorized
}
func AuthSettingOpen(AuthString: String) {
if let AppName = Bundle.main.infoDictionary!["CFBundleName"] as? String {
let message = "\(AppName)이(가) \(AuthString) 접근 허용되어 있지않습니다. \r\n 설정화면으로 가시겠습니까?"
let alert = UIAlertController(title: "설정", message: message, preferredStyle: .alert)
let cancle = UIAlertAction(title: "취소", style: .default) { (UIAlertAction) in
print("\(String(describing: UIAlertAction.title)) 클릭")
}
}
let confirm = UIAlertAction(title: "확인", style: .default) { (UIAlertAction) in
UIApplication.shared.open(URL(string: UIApplication.openSettingsURLString)!)
}
alert.addAction(cancle)
alert.addAction(confirm)
self.present(alert, animated: true, completion: nil)
}
}