Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.