[swift] Swift 퍼미션(Permission) 요청이 거부되면 다른 방법을 제시하는 방법.

앱을 개발하다보면 사용자의 퍼미션(Permission)이 필요한 경우가 많습니다. 예를 들어, 카메라나 마이크에 접근하기 위해서는 사용자의 권한을 요청해야 합니다. 하지만 사용자가 퍼미션 요청을 거부할 수도 있습니다. 이런 경우에는 다른 방법을 제 시해 주어야 합니다.

1. 퍼미션 요청하기

우선 퍼미션을 요청하는 방법을 알아보겠습니다. Swift에서는 AVCaptureDevice를 사용하여 카메라나 마이크에 접근할 수 있습니다. 예를 들어 카메라에 접근하기 위해서는 다음 코드를 사용할 수 있습니다.

import AVFoundation

func requestCameraPermission() {
    AVCaptureDevice.requestAccess(for: .video) { granted in
        if granted {
            // 카메라에 접근이 허용된 경우
        } else {
            // 카메라에 접근이 거부된 경우
        }
    }
}

위 코드에서 AVCaptureDevice.requestAccess(for:) 메서드를 사용하여 카메라에 대한 접근 권한을 요청합니다. 이 메서드는 비동기적으로 동작하며, 사용자가 퍼미션 요청에 대한 선택을 하게 될 때 클로저가 호출됩니다.

2. 퍼미션 요청 거부된 경우

사용자가 퍼미션 요청을 거부한 경우에는 다른 방법을 제시해 주어야 합니다. 예를 들어, 카메라에 접근을 요구하는데 거부되면 라이브러리를 사용하여 이미지 선택이나 다른 기능을 제공할 수 있습니다.

다음은 퍼미션 요청이 거부된 경우에 다른 방법을 제시하는 예제 코드입니다.

import AVFoundation
import Photos

func requestCameraPermission() {
    AVCaptureDevice.requestAccess(for: .video) { granted in
        if granted {
            // 카메라에 접근이 허용된 경우
        } else {
            DispatchQueue.main.async {
                let alertController = UIAlertController(title: "카메라 권한 필요", message: "카메라로 사진을 찍으려면 권한이 필요합니다. 이미지를 선택하시겠습니까?", preferredStyle: .alert)
                
                let selectImageAction = UIAlertAction(title: "이미지 선택", style: .default) { _ in
                    // 이미지 선택 기능 실행
                }
                
                let cancelAction = UIAlertAction(title: "취소", style: .cancel, handler: nil)
                
                alertController.addAction(selectImageAction)
                alertController.addAction(cancelAction)
                
                self.present(alertController, animated: true, completion: nil)
            }
        }
    }
}

위 코드에서는 사용자가 카메라에 대한 접근 권한을 거부한 경우, UIAlertController를 사용하여 알림창을 표시합니다. 알림창에서 이미지 선택 기능을 제공하는 선택지와 취소 버튼을 제공합니다.

결론

Swift에서는 퍼미션 요청을 통해 사용자에게 권한을 요청할 수 있습니다. 하지만 사용자가 퍼미션 요청을 거부한 경우에는 다른 방법을 제시해 주어야 합니다. 위 예제 코드를 참고하여 퍼미션 요청 후 거부된 경우에 대비할 수 있는 로직을 구현해 보세요.