Xamarin.iOS에서 NFC 코어Core NFC in Xamarin.iOS

IOS 11을 사용 하 여 태그를 읽는 거의 NFC (근거리 통신)Reading Near Field Communication (NFC) tags using iOS 11

CoreNFC에 대 한 액세스를 제공 하는 iOS 11의에서 새로운 프레임 워크는를 근거리 통신 (NFC) 라디오 앱 내에서 태그를 읽을 수 있습니다.CoreNFC is a new framework in iOS 11 that provides access to the Near Field Communication (NFC) radio to read tags from within apps. IPhone 7에서 작동 더하기 7, 8, 또한 및 X 8입니다.It works on iPhone 7, 7 Plus, 8, 8 Plus, and X.

IOS 장치에서 NFC 태그 판독기 지원 모든 NFC 태그 형식을 포함 하는 1-5 NFC 데이터 교환 형식인 (NDEF) 정보입니다.The NFC tag reader in iOS devices supports all NFC tag types 1 through 5 that contain NFC Data Exchange Format (NDEF) information.

알아야 할 몇 가지 제한 사항이 있습니다.There are some restrictions to be aware of:

  • CoreNFC 태그 읽기 (작성 또는 서식 지정)을 지원 합니다.CoreNFC only supports tag reading (not writing or formatting).
  • 사용자가 시작한 태그 검색 해야 하 고 60 초 후 시간 제한 합니다.Tag scans must be user-initiated, and time-out after 60 seconds.
  • 앱 검색에 대 한 전경에 표시 되어야 합니다.Apps must be visible in the foreground for scanning.
  • CoreNFC (시뮬레이터)에 없는 실제 장치에서 테스트할 수만 있습니다.CoreNFC can only be tested on real devices (not on the simulator).

이 페이지 CoreNFC를 사용 하는 데 필요한 구성을 설명 하 고 사용 하 여 API를 사용 하는 방법을 보여 줍니다 합니다 "NFCTagReader" 샘플 코드합니다.This page describes the configuration required to use CoreNFC and shows how to use the API using the "NFCTagReader" sample code.

구성Configuration

CoreNFC을 사용 하려면 프로젝트에 세 개의 항목이 구성 해야 합니다.To enable CoreNFC, you must configure three items in your project:

  • Info.plist 개인 키입니다.An Info.plist privacy key.
  • Entitlements.plist 항목입니다.An Entitlements.plist entry.
  • 프로 비전 프로필과 NFC 태그 읽기 기능입니다.A provisioning profile with NFC Tag Reading capability.

Info.plistInfo.plist

추가 된 NFCReaderUsageDescription 개인 키 및 검색 진행 되는 동안 사용자에 게 표시 되는 텍스트입니다.Add the NFCReaderUsageDescription privacy key and text, which is displayed to the user while scanning is occurring. 응용 프로그램에 대 한 적절 한 메시지를 사용 하 여 (예를 들어 검색의 용도 설명).Use a message appropriate for your application (for example, explain the purpose of the scan):

<key>NFCReaderUsageDescription</key>
<string>NFC tag to read NDEF messages into the application</string>

Entitlements.plistEntitlements.plist

앱 요청 해야 합니다 필드 통신 태그 읽기 근처 쌍에 다음 키/값을 사용 하 여 기능에 Entitlements.plist:Your app must request the Near Field Communications Tag Reading capability using the following key/value pair in your Entitlements.plist:

<key>com.apple.developer.nfc.readersession.formats</key>
<array>
  <string>NDEF</string>
</array>

프로비전 프로필Provisioning Profile

앱 ID 있는지 확인 합니다 NFC 태그 읽기 서비스는 선택:Create a new App ID and ensure that the NFC Tag Reading service is ticked:

선택한 NFC 태그 읽기를 사용 하 여 개발자 포털에 새 앱 ID 페이지Developer Portal New App ID page with NFC Tag Reading selected

그런 다음이 앱 ID에 대 한 새 프로비저닝 프로필을 만드는 다음 다운로드 하 고 해야 Mac. 개발에 설치You should then create a new provisioning profile for this App ID, then download and install it on your development Mac.

태그 읽기Reading a Tag

프로젝트 구성 되 면 추가 using CoreNFC; 다음 확인 하 고 파일의 맨 위에 NFC를 구현 하려면 다음 세 단계 태그 읽기 기능:Once your project is configured, add using CoreNFC; to the top of the file and follow these three steps to implement NFC tag reading functionality:

1. 구현 INFCNdefReaderSessionDelegate1. Implement INFCNdefReaderSessionDelegate

인터페이스를 구현 하는 두 가지 방법에 있습니다.The interface has two methods to be implemented:

  • DidDetect -태그를 성공적으로 읽을 때 호출 됩니다.DidDetect – Called when a tag is successfully read.
  • DidInvalidate -오류가 발생 하거나 60 초 제한 시간에 도달한 경우 호출 됩니다.DidInvalidate – Called when an error occurs or the 60 second timeout is reached.

DidDetectDidDetect

샘플 코드에서 검색 한 각 메시지는 표 보기에 추가 됩니다.In the sample code, each scanned message is added to a table view:

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();
    });
}

이 메서드가 여러 번 호출할 수 있습니다 (및 메시지의 배열에 전달 될 수) 여러 개의 태그 읽기에 대 한 세션을 허용 하는 경우.This method may be called multiple times (and an array of messages may be passed in) if the session allows for multiple tag reads. 세 번째 매개 변수를 사용 하 여 설정 됩니다는 Start 메서드 (에서 설명한 2 단계).This is set using the third parameter of the Start method (explained in step 2).

DidInvalidateDidInvalidate

무효화 다양 한 이유로 발생할 수 있습니다.Invalidation can occur for a number of reasons:

  • 검색 하는 동안 오류가 발생 했습니다.An error occurred while scanning.
  • 앱이 포그라운드에서 수 중지 합니다.The app ceased to be in the foreground.
  • 사용자 검색을 취소 하기로 했습니다.The user chose to cancel the scan.
  • 앱에서 검색이 취소 되었습니다.The scan was cancelled by the app.

아래 코드는 오류를 처리 하는 방법을 보여 줍니다.The code below shows how to handle an error:

public void DidInvalidate(NFCNdefReaderSession session, NSError error)
{
    var readerError = (NFCReaderError)(long)error.Code;
    if (readerError != NFCReaderError.ReaderSessionInvalidationErrorFirstNDEFTagRead &&
        readerError != NFCReaderError.ReaderSessionInvalidationErrorUserCanceled)
    {
      // some error handling
    }
}

세션이 무효화 되었습니다 되 면 새 세션 개체를 다시 스캔을 만들어야 합니다.Once a session has been invalidated, a new session object must be created to scan again.

2. 시작 프로그램 NFCNdefReaderSession2. Start an NFCNdefReaderSession

검색 단추 누름 등의 사용자 요청을 시작 해야 합니다.Scanning should start with a user request, such as a button press. 다음 코드를 만들고 검색 세션을 시작 합니다.The following code creates and starts a scanning session:

Session = new NFCNdefReaderSession(this, null, true);
Session?.BeginSession();

매개 변수는 NFCNdefReaderSession 생성자는 다음과 같습니다.The parameters for the NFCNdefReaderSession constructor are as follows:

  • delegate -구현의 INFCNdefReaderSessionDelegate합니다.delegate – An implementation of INFCNdefReaderSessionDelegate. 샘플 코드는 대리자에서에서 구현 됩니다 테이블 뷰 컨트롤러를 따라서 this 대리자 매개 변수로 사용 됩니다.In the sample code, the delegate is implemented in the table view controller, therefore this is used as the delegate parameter.
  • queue –에 콜백을 처리 하는 큐입니다.queue – The queue that callbacks are handled on. null,이 경우에 사용 해야는 DispatchQueue.MainQueue 예제의 같이 사용자 인터페이스 컨트롤을 업데이트 하는 경우.It can be null, in which case be sure to use the DispatchQueue.MainQueue when updating user interface controls (as shown in the sample).
  • invalidateAfterFirstRead – 때 true, 첫 번째 성공적인 검색; 검색 중지 때 false 계속 검색 하 고 검색을 취소 하거나 60 초 제한 시간에 도달 될 때까지 여러 결과 반환 합니다.invalidateAfterFirstRead – When true, the scan stops after the first successful scan; when false scanning will continue and multiple results returned until the scan is cancelled or the 60 second timeout is reached.

3. 검색 세션 취소3. Cancel the scanning session

사용자 인터페이스에서 시스템 제공 단추를 통해 검색 세션을 취소할 수 있습니다.The user can cancel the scanning session via a system-provided button in the user-interface:

검색 하는 동안 취소 단추

앱을 호출 하 여 프로그래밍 방식으로 검색을 취소할 수는 InvalidateSession 메서드:The app can programmatically cancel the scan by calling the InvalidateSession method:

Session.InvalidateSession();

두 경우 모두 대리자의 DidInvalidate 메서드가 호출 됩니다.In both cases, the delegate's DidInvalidate method will be called.

요약Summary

CoreNFC 앱이 NFC 태그에서 데이터를 읽을 수 있도록 합니다.CoreNFC enables your app to read data from NFC tags. 이 태그 형식 (NDEF 형식 1 ~ 5)의 다양 한 읽기를 지원 하지만 쓰거나 서식 지정을 지원 하지 않습니다.It supports reading a variety of tag formats (NDEF types 1 through 5), but does not support writing or formatting.