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:
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, dlategothis
jest używany jako parametr delegata.queue
— kolejka obsługującą wywołania zwrotne. Może to byćnull
wartość , w którym przypadku należy użyćDispatchQueue.MainQueue
elementu podczas aktualizowania kontrolek interfejsu użytkownika (jak pokazano w przykładzie).invalidateAfterFirstRead
— Potrue
zakończeniu skanowania skanowanie zostanie zatrzymane po pierwszym pomyślnym skanowaniu, a podczasfalse
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:
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.