Udostępnij za pośrednictwem


Podstawowa komunikacja NFC na platformie Xamarin.iOS

Odczytywanie tagów komunikacji zbliżeniowej (NFC) przy użyciu systemu iOS 11

CoreNFC to nowa struktura w systemie iOS 11, która zapewnia dostęp do radia Near Field Communication (NFC) w celu odczytywania tagów z poziomu aplikacji. CoreNFC działa w systemach i Telefon 7, i Telefon 7 Plus, i Telefon 8, i Telefon 8 Plus, i Telefon X, i Telefon XS i Telefon 11 (podczas gdy modele i Telefon 6 i i Telefon 6 Plus mają funkcje płatności NFC, nie obsługują one funkcji płatności NFC CoreNFC).

Czytnik tagów NFC na urządzeniach z systemem iOS obsługuje wszystkie typy tagów NFC od 1 do 5 zawierające informacje o formacie NDEF (NFC Data Exchange Format ).

Należy pamiętać o pewnych ograniczeniach:

  • CoreNFC obsługuje tylko odczytywanie tagów (nie zapisywanie ani formatowanie).
  • Skanowanie tagów musi być inicjowane przez użytkownika i limit czasu po upływie 60 sekund.
  • Aplikacje muszą być widoczne na pierwszym planie do skanowania.
  • CoreNFC można testować tylko na rzeczywistych urządzeniach (nie na symulatorze).

Na tej stronie opisano konfigurację wymaganą do korzystania z usługi CoreNFC i pokazano, jak używać interfejsu API.

Konfigurowanie

Aby włączyć usługę CoreNFC, należy skonfigurować trzy elementy w projekcie:

  • Klucz prywatności Info.plist.
  • Wpis Entitlements.plist .
  • Profil aprowizacji z funkcją odczytywania tagów NFC.

Info.plist

Dodaj klucz prywatności NFCReaderUsageDescription i tekst wyświetlany użytkownikowi podczas skanowania. Użyj komunikatu odpowiedniego dla aplikacji (na przykład wyjaśnij cel skanowania):

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

Entitlements.plist

Aplikacja musi zażądać możliwości odczytywania tagów komunikacji zbliżeniowej przy użyciu następującej pary klucz/wartość w pliku Entitlements.plist:

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

Profil aprowizacji

Utwórz nowy identyfikator aplikacji i upewnij się, że usługa odczytywania tagów NFC jest zaznaczona:

Strona Nowy identyfikator aplikacji w portalu dla deweloperów z wybraną pozycją Odczyt tagu NFC

Następnie należy utworzyć nowy profil aprowizacji dla tego identyfikatora aplikacji, a następnie pobrać go i zainstalować na komputerze Mac dewelopera.

Odczytywanie tagu

Po skonfigurowaniu projektu dodaj using CoreNFC; go na początku pliku i wykonaj następujące trzy kroki, aby zaimplementować funkcję odczytywania tagów NFC:

1. Implementowanie INFCNdefReaderSessionDelegate

Interfejs ma dwie metody do zaimplementowania:

  • DidDetect — wywoływana, gdy tag zostanie pomyślnie odczytany.
  • DidInvalidate — Wywoływana w przypadku wystąpienia błędu lub 60-sekundowy limit czasu jest osiągany.

DidDetect

W przykładowym kodzie każdy przeskanowany komunikat jest dodawany do widoku tabeli:

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

Ta metoda może być wywoływana wiele razy (a tablica komunikatów może zostać przekazana), jeśli sesja zezwala na wiele odczytów tagów. Jest to ustawiane przy użyciu trzeciego parametru Start metody (wyjaśnionej w kroku 2).

DidInvalidate

Unieważnienie może wystąpić z wielu powodów:

  • Wystąpił błąd podczas skanowania.
  • Aplikacja przestała znajdować się na pierwszym planie.
  • Użytkownik zdecydował się anulować skanowanie.
  • Skanowanie zostało anulowane przez aplikację.

Poniższy kod przedstawia sposób obsługi błędu:

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

Po unieważnieniu sesji należy utworzyć nowy obiekt sesji w celu ponownego skanowania.

2. Uruchamianie NFCNdefReaderSession

Skanowanie powinno rozpoczynać się od żądania użytkownika, takiego jak naciśnięcie przycisku. Poniższy kod tworzy i uruchamia sesję skanowania:

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

Parametry konstruktora NFCNdefReaderSession są następujące:

  • delegate– Implementacja .INFCNdefReaderSessionDelegate W przykładowym kodzie delegat jest implementowany w kontrolerze widoku tabeli, dlatego this jest używany jako parametr delegata.
  • queue — kolejka obsługującą wywołania zwrotne. Może to być nullwartość , w którym przypadku należy użyć DispatchQueue.MainQueue elementu podczas aktualizowania kontrolek interfejsu użytkownika (jak pokazano w przykładzie).
  • invalidateAfterFirstRead — Po truezakończeniu skanowania skanowanie zostanie zatrzymane po pierwszym pomyślnym skanowaniu, a podczas false skanowania zostanie zwróconych wiele wyników do momentu anulowania skanowania lub osiągnięcia 60-sekundowego limitu czasu.

3. Anulowanie sesji skanowania

Użytkownik może anulować sesję skanowania za pomocą przycisku dostarczonego przez system w interfejsie użytkownika:

Przycisk Anuluj podczas skanowania

Aplikacja może programowo anulować skanowanie, wywołując metodę InvalidateSession :

Session.InvalidateSession();

W obu przypadkach zostanie wywołana metoda delegata DidInvalidate .

Podsumowanie

Aplikacja CoreNFC umożliwia aplikacji odczytywanie danych z tagów NFC. Obsługuje odczytywanie różnych formatów tagów (typy NDEF od 1 do 5), ale nie obsługuje zapisywania ani formatowania.