Notice
Recent Posts
Recent Comments
Link
투케이2K
18. (TWOK/UTIL) [Ios/Swift] C_Permission - 모바일 퍼미션 권한 관리 클래스 본문
[설 명]
프로그램 : Ios / Swift
설 명 : 모바일 퍼미션 권한 관리 클래스
[소스 코드]
// -----------------------------------------
import Foundation
import UIKit
// -----------------------------------------
//MARK: [카메라 및 앨범, 마이크 접근]
import AVFoundation
import Photos
// -----------------------------------------
class C_Permission {
// MARK: - [클래스 설명]
/*
// -----------------------------------------
1. 모바일 퍼미션 권한 관리 클래스
// -----------------------------------------
*/
// MARK: - [포토 앨범 퍼미션 권한 확인 실시]
var checkPhotoFlag = false
func getPhotoAuthCheck() -> Bool {
print("")
print("====================================")
print("[C_Permission >> getPhotoAuthCheck() :: 앨범의 사진에 대한 접근 권한 요청 실시]")
print("====================================")
print("")
/*
// -----------------------------------------
// [getPhotoAuthCheck 메소드 설명]
// -----------------------------------------
1. 필요 info plist : Privacy - Photo Library Usage Description
// -----------------------------------------
2. 필요 import : import AVFoundation , import Photos
// -----------------------------------------
3. 호출 방법 : if C_Permission().getPhotoAuthCheck() == true {} else {}
// -----------------------------------------
4. 참고 퍼미션 요청 알림 : 게시물 업로드를 위해 앨범 접근 권한이 필요합니다. 허용하시겠습니까?
// -----------------------------------------
5. 주요 참고 : 뷰 컨트롤러 viewDidAppear 뷰 화면 표시 , 포그라운드 상태에서 요청 수행 실시
// -----------------------------------------
*/
// [세마포어 선언 : 프로그램 로직을 동기화 구현 : value 0 값은 대기 상태 선언]
let semaphore = DispatchSemaphore(value: 0)
// [앨범의 사진에 대한 접근 권한 확인 실시]
PHPhotoLibrary.requestAuthorization( { status in
switch status{
case .authorized:
print("")
print("====================================")
print("[C_Permission >> getPhotoAuthCheck() :: 앨범의 사진에 대한 접근 권한 확인 실시]")
print("상태 :: 앨범 권한 허용")
print("====================================")
print("")
// [리턴 결과 플래그 값 변경]
self.checkPhotoFlag = true
// [세마포어 신호 알림]
semaphore.signal()
break
case .denied:
print("")
print("====================================")
print("[C_Permission >> getPhotoAuthCheck() :: 앨범의 사진에 대한 접근 권한 확인 실시]")
print("상태 :: 앨범 권한 거부")
print("====================================")
print("")
// [리턴 결과 플래그 값 변경]
self.checkPhotoFlag = false
// [세마포어 신호 알림]
semaphore.signal()
break
case .notDetermined:
print("")
print("====================================")
print("[C_Permission >> getPhotoAuthCheck() :: 앨범의 사진에 대한 접근 권한 확인 실시]")
print("상태 :: 앨범 권한 선택하지 않음")
print("====================================")
print("")
// [리턴 결과 플래그 값 변경]
self.checkPhotoFlag = false
// [세마포어 신호 알림]
semaphore.signal()
break
case .restricted:
print("")
print("====================================")
print("[C_Permission >> getPhotoAuthCheck() :: 앨범의 사진에 대한 접근 권한 확인 실시]")
print("상태 :: 앨범 접근 불가능, 권한 변경이 불가능")
print("====================================")
print("")
// [리턴 결과 플래그 값 변경]
self.checkPhotoFlag = false
// [세마포어 신호 알림]
semaphore.signal()
break
default:
print("")
print("====================================")
print("[C_Permission >> getPhotoAuthCheck() :: 앨범의 사진에 대한 접근 권한 확인 실시]")
print("상태 :: default")
print("====================================")
print("")
// [리턴 결과 플래그 값 변경]
self.checkPhotoFlag = false
// [세마포어 신호 알림]
semaphore.signal()
break
}
})
// [세마포어 확인 대기]
semaphore.wait()
print("")
print("====================================")
print("[C_Permission >> getPhotoAuthCheck() :: 앨범의 사진에 대한 접근 권한 확인 실시]")
print("return :: \(self.checkPhotoFlag)")
print("====================================")
print("")
// [결과 리턴 실시]
return self.checkPhotoFlag
}
// MARK: - [카메라 퍼미션 권한 확인 실시]
var checkCameraFlag = false
func getCameraAuthCheck() -> Bool {
print("")
print("====================================")
print("[C_Permission >> getCameraAuthCheck() :: 카메라 접근 권한 요청 실시]")
print("====================================")
print("")
/*
// -----------------------------------------
// [getCameraAuthCheck 메소드 설명]
// -----------------------------------------
1. 필요 info plist : Privacy - Camera Usage Description
// -----------------------------------------
2. 필요 import : import AVFoundation , import Photos
// -----------------------------------------
3. 호출 방법 : if C_Permission().getCameraAuthCheck() == true {} else {}
// -----------------------------------------
4. 참고 퍼미션 요청 알림 : 게시물 업로드를 위해 카메라 접근 권한이 필요합니다. 허용하시겠습니까?
// -----------------------------------------
5. 주요 참고 : 뷰 컨트롤러 viewDidAppear 뷰 화면 표시 , 포그라운드 상태에서 요청 수행 실시
// -----------------------------------------
*/
// [세마포어 선언 : 프로그램 로직을 동기화 구현 : value 0 값은 대기 상태 선언]
let semaphore = DispatchSemaphore(value: 0)
// [카메라 접근 권한 확인 실시]
AVCaptureDevice.requestAccess(for: .video, completionHandler: { (granted: Bool) in
if granted {
print("")
print("====================================")
print("[C_Permission >> getCameraAuthCheck() :: 카메라 접근 권한 확인 실시]")
print("상태 :: 카메라 권한 허용")
print("====================================")
print("")
// [리턴 결과 플래그 값 변경]
self.checkCameraFlag = true
// [세마포어 신호 알림]
semaphore.signal()
} else {
print("")
print("====================================")
print("[C_Permission >> getCameraAuthCheck() :: 카메라 접근 권한 확인 실시]")
print("상태 :: 카메라 권한 거부")
print("====================================")
print("")
// [리턴 결과 플래그 값 변경]
self.checkCameraFlag = false
// [세마포어 신호 알림]
semaphore.signal()
}
})
// [세마포어 확인 대기]
semaphore.wait()
print("")
print("====================================")
print("[C_Permission >> getCameraAuthCheck() :: 카메라 접근 권한 확인 실시]")
print("return :: \(self.checkCameraFlag)")
print("====================================")
print("")
// [결과 리턴 실시]
return self.checkCameraFlag
}
// MARK: - [음성 마이크 퍼미션 권한 확인 실시]
var checkMicroFlag = false
func getMicroAuthCheck() -> Bool {
print("")
print("====================================")
print("[C_Permission >> getMicroAuthCheck() :: 마이크 접근 권한 요청 실시]")
print("====================================")
print("")
/*
// -----------------------------------------
// [getMicroAuthCheck 메소드 설명]
// -----------------------------------------
1. 필요 info plist : Privacy - Microphone Usage Description , Privacy - Access to a File Provide Domain Usage Description
// -----------------------------------------
2. 필요 import : import AVFoundation , import Photos
// -----------------------------------------
3. 호출 방법 : if C_Permission().getMicroAuthCheck() == true {} else {}
// -----------------------------------------
4. 참고 퍼미션 요청 알림 :
- 게시물 업로드를 위해 음성 접근 권한이 필요합니다. 허용하시겠습니까?
- 게시물 업로드를 위해 파일 접근 권한이 필요합니다. 허용하시겠습니까?
// -----------------------------------------
5. 주요 참고 : 뷰 컨트롤러 viewDidAppear 뷰 화면 표시 , 포그라운드 상태에서 요청 수행 실시
// -----------------------------------------
*/
// [세마포어 선언 : 프로그램 로직을 동기화 구현 : value 0 값은 대기 상태 선언]
let semaphore = DispatchSemaphore(value: 0)
// [음성 접근 권한 확인 실시]
AVAudioSession.sharedInstance().requestRecordPermission({(granted: Bool)-> Void in
if granted {
print("")
print("====================================")
print("[C_Permission >> getMicroAuthCheck() :: 마이크 접근 권한 확인 실시]")
print("상태 :: 마이크 권한 허용")
print("====================================")
print("")
// [리턴 결과 플래그 값 변경]
self.checkMicroFlag = true
// [세마포어 신호 알림]
semaphore.signal()
} else {
print("")
print("====================================")
print("[C_Permission >> getMicroAuthCheck() :: 마이크 접근 권한 확인 실시]")
print("상태 :: 마이크 권한 거부")
print("====================================")
print("")
// [리턴 결과 플래그 값 변경]
self.checkMicroFlag = false
// [세마포어 신호 알림]
semaphore.signal()
}
})
// [세마포어 확인 대기]
semaphore.wait()
print("")
print("====================================")
print("[C_Permission >> getMicroAuthCheck() :: 마이크 접근 권한 확인 실시]")
print("return :: \(self.checkMicroFlag)")
print("====================================")
print("")
// [결과 리턴 실시]
return self.checkMicroFlag
}
// MARK: - [푸시 알림 퍼미션 권한 확인 실시]
var checkPushFlag = false
func getPushAuthCheck() -> Bool {
print("")
print("====================================")
print("[C_Permission >> getPushAuthCheck() :: 푸시 알림 권한 요청 실시]")
print("====================================")
print("")
/*
// -----------------------------------------
// [getPushAuthCheck 메소드 설명]
// -----------------------------------------
1. 푸시 알림에 필요한 퍼미션 권한 관리
// -----------------------------------------
2. 호출 방법 : if C_Permission().getPushAuthCheck() == true {} else {}
// -----------------------------------------
3. 주요 참고 : 뷰 컨트롤러 viewDidAppear 뷰 화면 표시 , 포그라운드 상태에서 요청 수행 실시
// -----------------------------------------
*/
// [세마포어 선언 : 프로그램 로직을 동기화 구현 : value 0 값은 대기 상태 선언]
let semaphore = DispatchSemaphore(value: 0)
// [푸시 알림 권한 확인 실시]
let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound] // [푸시 알림 권한]
UNUserNotificationCenter.current().requestAuthorization(options: authOptions) { (success, error) in // [푸시 알림 권한 요청]
// [success 부분에 권한을 허락하면 true / 권한을 허락하지 않으면 false 값이 들어갑니다]
if let error = error {
print("")
print("====================================")
print("[C_Permission >> getPushAuthCheck() :: 푸시 알림 권한 확인 실시]")
print("error :: \(error.localizedDescription)")
print("====================================")
print("")
// [리턴 결과 플래그 값 변경]
self.checkPushFlag = false
// [세마포어 신호 알림]
semaphore.signal()
}
else {
if success {
print("")
print("====================================")
print("[C_Permission >> getPushAuthCheck() :: 푸시 알림 권한 확인 실시]")
print("상태 :: 푸시 알림 권한 허용")
print("====================================")
print("")
// [리턴 결과 플래그 값 변경]
self.checkPushFlag = true
// [세마포어 신호 알림]
semaphore.signal()
}
else {
print("")
print("====================================")
print("[C_Permission >> getPushAuthCheck() :: 푸시 알림 권한 확인 실시]")
print("상태 :: 푸시 알림 권한 거부")
print("====================================")
print("")
// [리턴 결과 플래그 값 변경]
self.checkPushFlag = false
// [세마포어 신호 알림]
semaphore.signal()
}
}
}
// [세마포어 확인 대기]
semaphore.wait()
print("")
print("====================================")
print("[C_Permission >> getPushAuthCheck() :: 푸시 알림 권한 확인 실시]")
print("return :: \(self.checkPushFlag)")
print("====================================")
print("")
// [결과 리턴 실시]
return self.checkPushFlag
}
} // [클래스 종료]
반응형
'투케이2K 유틸파일' 카테고리의 다른 글
Comments