Core NFC в Xamarin.iOSCore NFC in Xamarin.iOS

Теги чтения рядом с полем связи действия (NFC), с помощью iOS 11Reading Near Field Communication (NFC) tags using iOS 11

CoreNFC — это новая платформа, в iOS 11, который предоставляет доступ к радиочастотной связи radio (действия 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, 8, а также X.It works on iPhone 7, 7 Plus, 8, 8 Plus, and X.

Чтения тегов NFC на устройствах iOS поддерживает все типы тегов 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.

Параметр ConfigurationConfiguration

Чтобы включить 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

Приложение должно запросить практически чтение тегов поле Communications возможность с помощью следующих ключ/значение пары из вашей 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

Создайте новый идентификатор приложения и убедитесь, что чтение тегов NFC службы установлен:Create a new App ID and ensure that the NFC Tag Reading service is ticked:

Страница нового идентификатора приложения портала разработчика с выбранного чтение тегов NFCDeveloper Portal New App ID page with NFC Tag Reading selected

Следует затем создания профиля подготовки для этого идентификатора приложения, а затем скачайте и установите его на разработки 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.