PHPicker 권한 안내 구현하기

이번에 TURTLE VOCA를 출시하면서 단어장에 사진을 넣을 수 있는 부분이 있는데 이 경우 이용자의 사진첩에 접근해야하기 때문에 이를 동의하는 과정이 꼭 필요하다.

 

이를 위해 이전에 구현되지 않았던 권한 안내를 구현하는 과정을 정리하고자 한다.

 

먼저 Info.plist파일에 안내가 나갈 문장을 넣어준다.

Privacy - Photo Library Usage Description
"단어장에 이미지를 추가하기 위해 사진 라이브러리에 접근하려고 합니다."

이와 같이 사진처럼 값을 넣어주면 된다.

스크린샷 2024-07-10 오후 8.38.59.png

 

그 다음 PHPickerView가 등장하는 메서드에 권한 안내가 나오는 알럿이 뜨도록 구현해준다.

func didSelectImage() {
PHPhotoLibrary.requestAuthorization(for: .readWrite) { [weak self] status in
DispatchQueue.main.async {
switch status {
case .authorized, .limited:
self?.presentPHPicker()
case .denied, .restricted:
self?.showPhotoLibraryAccessDeniedAlert()
case .notDetermined:
self?.didSelectImage()
@unknown default:
break
}
}
}
}
private func presentPHPicker() {
var configuration = PHPickerConfiguration()
configuration.filter = .images
configuration.selectionLimit = 1
let picker = PHPickerViewController(configuration: configuration)
picker.delegate = self
present(picker, animated: true, completion: nil)
}
private func showPhotoLibraryAccessDeniedAlert() {
let alert = UIAlertController(title: "사진 접근 권한이 없습니다",
message: "설정에서 사진 접근 권한을 허용해주세요.",
preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "설정으로 이동", style: .default) { _ in
if let settingsURL = URL(string: UIApplication.openSettingsURLString) {
UIApplication.shared.open(settingsURL)
}
})
alert.addAction(UIAlertAction(title: "취소", style: .cancel))
present(alert, animated: true)
}

이렇게 권한 설정 알럿을 뜰 수 있도록 구현하면 사용자가 이미지를 선택하려고 할 때 아직 권한을 결정하지 않은 경우 자동으로 권한 요청 알럿을 표시한다.

 

사진 라이브러리의 접근 권한을 확인하고 권한이 허용되었거나 제한적으로 허용된 경우에 PHPicker를 표시하게 된다.

 

권한이 거부되었을 경우, 사용자에게 설정으로 이동해 권한을 변경할 수 있는 알람을 표시한다.

스크린샷 2024-07-10 오후 11.16.46.png