Xamarin.iOS의 핵심 NFC
iOS 11을 사용하여 NFC(근거리 통신) 태그 읽기
CoreNFC는 앱 내에서 태그를 읽을 수 있도록 NFC(근거리 통신 ) 라디오에 대한 액세스를 제공하는 iOS 11의 새로운 프레임워크입니다. CoreNFC는 i전화 7, i전화 7 Plus, i전화 8, i전화 8 Plus, i전화 X, i전화 XS 및 i전화 11 모델에서 작동합니다(i전화 6 및 i전화 6 Plus 모델에는 NFC 결제 기능이 있지만 CoreNFC를 지원하지 않음).
iOS 디바이스의 NFC 태그 판독기는 NFC NDEF(데이터 교환 형식) 정보를 포함하는 모든 NFC 태그 유형 1~5를 지원합니다.
주의해야 할 몇 가지 제한 사항은 다음과 같습니다.
- CoreNFC는 태그 읽기만 지원합니다(쓰기 또는 서식 지정이 아님).
- 태그 검사는 사용자가 시작하고 60초 후에 제한 시간이 초과되어야 합니다.
- 검색을 위해 앱이 포그라운드에 표시되어야 합니다.
- CoreNFC는 시뮬레이터가 아닌 실제 디바이스에서만 테스트할 수 있습니다.
이 페이지에서는 CoreNFC를 사용하는 데 필요한 구성을 설명하고 "NFCTagReader" 샘플 코드를 사용하여 API를 사용하는 방법을 보여 줍니다.
구성
CoreNFC를 사용하도록 설정하려면 프로젝트에서 다음 세 가지 항목을 구성해야 합니다.
- Info.plist 개인 정보 키입니다.
- Entitlements.plist 항목입니다.
- NFC 태그 읽기 기능이 있는 프로비저닝 프로필입니다.
Info.plist
스캔이 발생하는 동안 사용자에게 표시되는 NFCReaderUsageDescription 개인 정보 키 및 텍스트를 추가합니다. 애플리케이션에 적합한 메시지 사용(예: 검사 목적 설명)
<key>NFCReaderUsageDescription</key>
<string>NFC tag to read NDEF messages into the application</string>
Entitlements.plist
앱은 Entitlements.plist에서 다음 키/값 쌍을 사용하여 근거리 통신 태그 읽기 기능을 요청해야 합니다.
<key>com.apple.developer.nfc.readersession.formats</key>
<array>
<string>NDEF</string>
</array>
프로비전 프로필
새 앱 ID를 만들고 NFC 태그 읽기 서비스가 선택되어 있는지 확인합니다.
그런 다음, 이 앱 ID에 대한 새 프로비저닝 프로필을 만든 다음, 개발 Mac에 다운로드하여 설치해야 합니다.
태그 읽기
프로젝트가 구성되면 파일 맨 위에 추가하고 using CoreNFC;
다음 세 단계에 따라 NFC 태그 읽기 기능을 구현합니다.
1. 구현 INFCNdefReaderSessionDelegate
인터페이스에는 구현할 두 가지 메서드가 있습니다.
DidDetect
– 태그를 성공적으로 읽을 때 호출됩니다.DidInvalidate
– 오류가 발생하거나 60초 시간 제한에 도달할 때 호출됩니다.
DidDetect
샘플 코드에서 검색된 각 메시지가 테이블 뷰에 추가됩니다.
public void DidDetect(NFCNdefReaderSession session, NFCNdefMessage[] messages)
{
foreach (NFCNdefMessage msg in messages)
{ // adds the messages to a list view
DetectedMessages.Add(msg);
}
DispatchQueue.MainQueue.DispatchAsync(() =>
{
this.TableView.ReloadData();
});
}
세션에서 여러 태그 읽기를 허용하는 경우 이 메서드를 여러 번 호출할 수 있으며 메시지 배열이 전달될 수 있습니다. 이 설정은 메서드의 세 번째 매개 변수를 Start
사용하여 설정됩니다(2단계에서 설명).
DidInvalidate
다음과 같은 여러 가지 이유로 무효화가 발생할 수 있습니다.
- 검색하는 동안 오류가 발생했습니다.
- 앱이 포그라운드에 있는 것을 중단했습니다.
- 사용자가 검사를 취소하도록 선택했습니다.
- 앱에서 검사를 취소했습니다.
아래 코드는 오류를 처리하는 방법을 보여줍니다.
public void DidInvalidate(NFCNdefReaderSession session, NSError error)
{
var readerError = (NFCReaderError)(long)error.Code;
if (readerError != NFCReaderError.ReaderSessionInvalidationErrorFirstNDEFTagRead &&
readerError != NFCReaderError.ReaderSessionInvalidationErrorUserCanceled)
{
// some error handling
}
}
세션이 무효화되면 다시 검색하려면 새 세션 개체를 만들어야 합니다.
2. 시작 NFCNdefReaderSession
스캔은 단추 누름과 같은 사용자 요청으로 시작해야 합니다. 다음 코드는 검사 세션을 만들고 시작합니다.
Session = new NFCNdefReaderSession(this, null, true);
Session?.BeginSession();
생성자에 대한 NFCNdefReaderSession
매개 변수는 다음과 같습니다.
delegate
– 의 구현입니다INFCNdefReaderSessionDelegate
. 샘플 코드에서 대리자는 테이블 뷰 컨트롤러this
에서 구현되므로 대리자 매개 변수로 사용됩니다.queue
– 콜백이 처리되는 큐입니다. 이 경우 샘플과 같이 사용자 인터페이스 컨트롤을DispatchQueue.MainQueue
업데이트할 때 사용해야 할 수null
있습니다.invalidateAfterFirstRead
true
– 첫 번째 검색이 성공한false
후 검색이 중지되고 검색이 계속되고 검색이 취소되거나 60초 시간 제한에 도달할 때까지 여러 결과가 반환됩니다.
3. 검사 세션 취소
사용자는 사용자 인터페이스에서 시스템 제공 단추를 통해 스캔 세션을 취소할 수 있습니다.
앱은 메서드를 호출하여 프로그래밍 방식으로 검사를 취소할 수 있습니다.InvalidateSession
Session.InvalidateSession();
두 경우 모두 대리자의 DidInvalidate
메서드가 호출됩니다.
요약
CoreNFC를 사용하면 앱이 NFC 태그에서 데이터를 읽을 수 있습니다. 다양한 태그 형식(NDEF 형식 1~5)을 읽을 수 있지만 쓰기 또는 서식 지정은 지원하지 않습니다.