Notice
Recent Posts
Recent Comments
Link
투케이2K
627. (ios/swift5) NFCNDEFReaderSession begin 사용해 NFC 스캔 준비 및 활성 수행 실시 본문
[개발 환경 설정]
개발 툴 : XCODE
개발 언어 : SWIFT5
[소스 코드]
// --------------------------------------------------------------------------------------
[개발 및 테스트 환경]
// --------------------------------------------------------------------------------------
- 언어 : Swift5
- 개발 툴 : Xcode
- 기술 구분 : 유틸 파일 / NFC / Support
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[소스 코드]
// --------------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------------
// MARK: - [SEARCH FAST] : startNfcScan : NFC 스캔 동작 수행
// -----------------------------------------------------------------------------------------
// TODO [호출 방법 소스 코드]
// -----------------------------------------------------------------------------------------
/*
DispatchQueue.main.async { // [비동기 요청]
C_Nfc_Card_Module().startNfcScan(type: 0){(result) in
S_Log._D_(description: "NFC 스캔 결과 확인", data: ["\(result)"])
}
}
*/
// -----------------------------------------------------------------------------------------
/*
*
* -----------------------------------------------------------------------------------------
* TODO [설명] : NFC TAG , NDEF 메시지 스캔 메소드
*
* 1) 사전) Xcode 에서 NFC 기능 사용 설정 필요 : https://blog.naver.com/kkh0977/223729651712
* 2) 사전) NFCNDEFReaderSessionDelegate 클래스 상속 필요
* -----------------------------------------------------------------------------------------
* TODO [Input] : 인풋 파라미터
*
* @param type : NFC 스캔 동작 타입 (0 == TAG / 1 == NDEF 메시지)
* -----------------------------------------------------------------------------------------
* TODO [Return] : 리턴 데이터
*
* @return : NFC 스캔 데이터
* -----------------------------------------------------------------------------------------
* TODO [History] : 이력 정리 [create , update , delete]
*
* 1) KwonGiHwan : create : 2025-01-19 : 최초 생성 수행
* -----------------------------------------------------------------------------------------
*
* */
public static var nfcSession: NFCNDEFReaderSession? = nil // [NFC 스캔 객체]
var nfcScanResult = false // [NFC 스캔 데이터]
var scan_log = "" // [스캔 동작 로직 로그]
public static var NFC_SCAN_TYPE = -1 // [NFC 스캔 타입]
private let nfcScanOperationQueue = OperationQueue() // [작업 큐]
func startNfcScan(type: Int, callback: @escaping (Bool) -> ()) {
S_Log._D_(description: "NFC 스캔 수행 실시", data: nil)
// [변수 값 초기화]
C_Nfc_Card_Module.nfcSession = nil
self.nfcScanResult = false
C_Nfc_Card_Module.NFC_SCAN_TYPE = -1
self.scan_log = ""
// [작업 큐에 추가]
self.nfcScanOperationQueue.isSuspended = true
let block = { callback(self.nfcScanResult) }
self.nfcScanOperationQueue.addOperation(block)
DispatchQueue.main.async {
// [NFC 사용 가능 기기 상태 확인] : NFCNDEFReaderSession.readingAvailable
C_StateCheck().getNfcState(){(result) in
S_Log._D_(description: "NFC 권한 부여 및 사용 가능 상태 확인", data: ["\(result)"])
if result == true {
// [스캔 타입 전역 변수 삽입]
C_Nfc_Card_Module.NFC_SCAN_TYPE = type
// [방어 로직 : 스캔 타입 값 확인]
if C_Nfc_Card_Module.NFC_SCAN_TYPE == 0 || C_Nfc_Card_Module.NFC_SCAN_TYPE == 1 {
// ---------------------------------------------
// MARK: [NFC 세션 초기화 및 스캔 동작 수행]
// ---------------------------------------------
C_Nfc_Card_Module.nfcSession = NFCNDEFReaderSession(delegate: self, queue: nil, invalidateAfterFirstRead: true)
C_Nfc_Card_Module.nfcSession?.alertMessage = "NFC 태그에 기기를 가까이 대주세요."
C_Nfc_Card_Module.nfcSession?.begin()
// ---------------------------------------------
// ---------------------------------------------
// MARK: [작업 성공 처리]
// ---------------------------------------------
// NFCNDEFReaderSessionDelegate : 딜레게이트에서 실시간 스캔 데이터 확인
// ---------------------------------------------
// NFCNDEFTag / NFCNDEFMessage
// ---------------------------------------------
self.scan_log = "[Success] :: Nfc Scan Start"
S_Log._W_(description: "NFC 스캔 동작 성공", data: ["\(self.scan_log)"])
self.nfcScanResult = true
self.nfcScanOperationQueue.isSuspended = false
// ---------------------------------------------
}
else {
// [작업 종료 처리]
self.scan_log = "[Error] :: C_StateCheck getNfcState False"
S_Log._E_(description: "NFC 스캔 동작 에러", data: ["\(self.scan_log)"])
self.nfcScanOperationQueue.isSuspended = false
}
}
}
}
[결과 출력]
반응형
'IOS' 카테고리의 다른 글
Comments