투케이2K

10. (ios/swift) 퍼미션 권한 요청 수행 실시 - info , permission 본문

IOS

10. (ios/swift) 퍼미션 권한 요청 수행 실시 - info , permission

투케이2K 2021. 10. 17. 14:16

[개발 환경 설정]

개발 툴 : XCODE

개발 언어 : SWIFT


[방법 설명]


[소스 코드]

import UIKit
import AVFoundation
import Photos

class MainController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        print("")
        print("===============================")
        print("[MainController > viewDidLoad() : 뷰 로드 실시]")
        print("===============================")
        print("")
        
        // [권한 설정 퍼미션 확인 실시]
        checkCameraPermission() // 카메라 사용 권한
        checkAlbumPermission() // 앨범 접근 권한
    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        print("")
        print("===============================")
        print("[MainController > viewDidAppear() : 뷰 화면 표시]")
        print("===============================")
        print("")
        
        // [권한 설정 퍼미션 확인 실시]
        if permissionNoArray.count > 0 && permissionNoArray.isEmpty == false {
            self.intentAppSettings(content: permissionNoArray.description+" 권한이 비활성화 상태입니다. 권한 설정으로 이동하시겠습니까?")
        }
        else {
            self.showAlert(tittle: "권한 설정 확인", content: "모든 권한이 정상 부여되었습니다", okBtb: "확인", noBtn: "")
        }
    }
    

    // [권한 거부 퍼미션을 담을 배열 선언 생성]
    var permissionNoArray : Array<String> = []

    
    /*
    [카메라 권한 요청]
    필요 : import AVFoundation
    */
    func checkCameraPermission(){
        print("")
        print("===============================")
        print("[MainController > checkCameraPermission() : 카메라 권한 요청 실시]")
        print("===============================")
        print("")
        AVCaptureDevice.requestAccess(for: .video, completionHandler: { (granted: Bool) in
            if granted {
                print("")
                print("===============================")
                print("[MainController > checkCameraPermission() : 카메라 권한 허용 상태]")
                print("===============================")
                print("")
            } else {
                print("")
                print("===============================")
                print("[MainController > checkCameraPermission() : 카메라 권한 거부 상태]")
                print("===============================")
                print("")
                self.permissionNoArray.append("카메라")
            }
        })
    }
    
    
    /*
    [앨범 접근 권한 요청]
    필요 : import Photos
    */
    func checkAlbumPermission(){
        print("")
        print("===============================")
        print("[MainController > checkAlbumPermission() : 앨범 접근 권한 요청 실시]")
        print("===============================")
        print("")
        PHPhotoLibrary.requestAuthorization( { status in
            switch status{
            case .authorized:
                print("")
                print("===============================")
                print("[MainController > checkAlbumPermission() : 앨범 접근 권한 허용 상태]")
                print("===============================")
                print("")
            case .denied:
                print("")
                print("===============================")
                print("[MainController > checkAlbumPermission() : 앨범 접근 권한 거부 상태]")
                print("===============================")
                print("")
                self.permissionNoArray.append("앨범 및 사진 접근")
            case .restricted, .notDetermined:
                print("")
                print("===============================")
                print("[MainController > checkAlbumPermission() : 앨범 접근 권한 선택 대기 상태]")
                print("===============================")
                print("")
            default:
                break
            }
        })
    }


    // [애플리케이션 설정창 이동 실시 메소드]
    func intentAppSettings(content:String){
        // 앱 설정창 이동 실시
        let settingsAlert = UIAlertController(title: "권한 설정 알림", message: content, preferredStyle: UIAlertController.Style.alert)
        
        let okAction = UIAlertAction(title: "확인", style: .default) { (action) in
            // [확인 버튼 클릭 이벤트 내용 정의 실시]
            if let url = URL(string: UIApplication.openSettingsURLString) {
                print("")
                print("===============================")
                print("[MainController > intentAppSettings() : 앱 설정 화면 이동]")
                print("===============================")
                print("")
                UIApplication.shared.open(url, options: [:], completionHandler: nil)
            }
        }
        settingsAlert.addAction(okAction) // 버튼 클릭 이벤트 객체 연결
        
        let noAction = UIAlertAction(title: "취소", style: .default) { (action) in
            // [취소 버튼 클릭 이벤트 내용 정의 실시]
            return
        }
        settingsAlert.addAction(noAction) // 버튼 클릭 이벤트 객체 연결
        
        // [alert 팝업창 활성 실시]
        present(settingsAlert, animated: false, completion: nil)
    }

}
​

 


[결과 출력]


 

반응형
Comments