PHPicker 권한 안내 구현하기

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

 

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

 

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

Privacy - Photo Library Usage Description

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

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

 

그 다음 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를 표시하게 된다.

 

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