[swift] Swift로 디바이스의 NFC 태그 읽기 기능 지원 여부 확인하기

iOS 13 이상에서는 iPhone의 NFC(Near Field Communication) 기능을 사용하여 NFC 태그를 읽을 수 있습니다. 그러나 모든 iPhone 모델이 NFC 태그 읽기를 지원하지는 않습니다. Swift를 사용하여 디바이스의 NFC 태그 읽기 기능을 지원하는지 확인하는 방법에 대해 알아보겠습니다.

1. NFC 기능 사용 가능 여부 확인

iOS에서 NFC 기능을 사용할 수 있는지 확인하려면 ‘CoreNFC’ 프레임워크를 프로젝트에 추가해야 합니다.

import CoreNFC

if NFCNDEFReaderSession.readingAvailable {
    print("NFC 태그 읽기 기능을 지원합니다.")
} else {
    print("NFC 태그 읽기 기능을 지원하지 않습니다.")
}

위의 코드는 NFCNDEFReaderSession.readingAvailable 속성을 사용하여 디바이스에서 NFC 태그 읽기 기능을 지원하는지 확인합니다.

2. 배터리 모드에서 NFC 사용 여부 확인

일부 iPhone 모델은 배터리 모드에서만 NFC 기능을 사용할 수 있습니다. 이 경우 NFC 기능을 사용할 수 있는지 확인하기 전에 배터리 모드인지 확인해야 합니다.

import CoreNFC

if NFCReaderSession.readingAvailable {
    let session = NFCReaderSession(delegate: self, queue: nil, invalidateAfterFirstRead: false)
    session.begin()
} else {
    print("NFC 태그 읽기 기능을 지원하지 않습니다.")
}

위의 코드는 NFCReaderSession.readingAvailable 속성을 사용하여 디바이스에서 NFC 읽기 기능을 지원하는지 확인하기 전에 반드시 NFCReaderSession을 초기화해야 합니다.

3. NFC 태그 읽기 세션 설정

NFC 태그 읽기 세션을 설정하려면 NFCNDEFReaderSessionDelegate 프로토콜을 준수하는 클래스를 생성합니다. 이 클래스에서 didDetectNDEFs 메서드를 구현하여 NFC 태그를 읽었을 때 원하는 동작을 수행할 수 있습니다.

import CoreNFC

class NFCReaderDelegate: NSObject, NFCNDEFReaderSessionDelegate {
    func readerSession(_ session: NFCNDEFReaderSession, didDetectNDEFs messages: [NFCNDEFMessage]) {
        // NFC 태그를 읽으면 실행되는 코드
        for message in messages {
            for record in message.records {
                // NFC 레코드에서 데이터 추출
                let payload = String(data: record.payload, encoding: .utf8)
                print("NFC 태그에서 읽은 데이터: \(payload ?? "")")
            }
        }
        session.invalidateSession()
    }
}

let delegate = NFCReaderDelegate()
let session = NFCNDEFReaderSession(delegate: delegate, queue: nil, invalidateAfterFirstRead: true)
session.begin()

위의 코드는 NFCNDEFReaderSessionDelegate 프로토콜을 사용하여 NFC 태그 읽기 세션을 설정하고, didDetectNDEFs 메서드를 구현하여 NFC 태그를 읽었을 때 실행될 코드를 작성합니다.

4. 참고 자료

위의 자료들은 Apple의 개발자 문서와 WWDC 영상으로, 추가적인 정보를 얻기 위해 참고하시면 도움이 될 것입니다.

이제 Swift를 사용하여 디바이스의 NFC 태그 읽기 기능을 지원하는지 확인할 수 있는 방법에 대해 알아보았습니다. 해당 기능을 사용하여 다양한 NFC 기능을 구현할 수 있는 잠재력을 가지고 있습니다.