Core NFC v Xamarin.iOS

Čtení značek NFC (Near Field Communication) pomocí iOS 11

CoreNFC je nová architektura v iOSu 11, která poskytuje přístup k rádiu Near Field Communication (NFC) pro čtení značek z aplikací. CoreNFC funguje na i Telefon 7, i Telefon 7 Plus, i Telefon 8, i Telefon 8 Plus, i Telefon X, i Telefon XS a i Telefon 11 modelů (zatímco i Telefon 6 a i Telefon 6 Plus modely nfc mají platební funkce, nepodporují CoreNFC).

Čtečka značek NFC v zařízeních s iOSem podporuje všechny typy značek NFC 1 až 5, které obsahují informace o formátu NDEF (NFC Data Exchange Format ).

Existuje několik omezení, o nichž je potřeba vědět:

  • CoreNFC podporuje jen čtení značek (ne zápis nebo formátování).
  • Kontroly značek musí být zahájeny uživatelem a časový limit po 60 sekundách.
  • Aplikace musí být viditelné v popředí pro kontrolu.
  • CoreNFC je možné testovat pouze na skutečných zařízeních (ne na simulátoru).

Tato stránka popisuje konfiguraci potřebnou k použití CoreNFC a ukazuje, jak používat rozhraní API pomocí vzorového kódu NFCTagReader.

Konfigurace

Pokud chcete povolit CoreNFC, musíte v projektu nakonfigurovat tři položky:

  • Klíč ochrany osobních údajů info.plist .
  • Položka Entitlements.plist .
  • Zřizovací profil s funkcí čtení značek NFC.

Info.plist

Přidejte klíč ochrany osobních údajů a text NFCReaderUsageDescription, který se uživateli zobrazí při kontrole. Použijte zprávu, která je vhodná pro vaši aplikaci (například vysvětlete účel kontroly):

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

Entitlements.plist

Vaše aplikace musí požádat o funkci čtení značek Near Field Communications pomocí následujícího páru klíč/hodnota ve vašem souboru Entitlements.plist:

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

Profil zřizování

Vytvořte nové ID aplikace a ujistěte se, že je zaškrtnutá služba NFC Tag Reading :

Developer Portal New App ID page with NFC Tag Reading selected

Pak byste měli vytvořit nový zřizovací profil pro toto ID aplikace a pak ho stáhnout a nainstalovat na svůj vývoj pro Mac.

Čtení značky

Jakmile je projekt nakonfigurovaný, přidejte using CoreNFC; do horní části souboru a pomocí těchto tří kroků implementujte funkci čtení značek NFC:

1. Implementace INFCNdefReaderSessionDelegate

Rozhraní má dvě metody, které se mají implementovat:

  • DidDetect – Volá se, když se značka úspěšně přečte.
  • DidInvalidate – Volá se, když dojde k chybě nebo dojde k dosažení 60sekundového časového limitu.

DidDetect

V ukázkovém kódu se každá naskenovaná zpráva přidá do zobrazení tabulky:

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

Tato metoda může být volána vícekrát (a pole zpráv může být předáno), pokud relace umožňuje čtení více značek. Toto nastavení je nastaveno pomocí třetího parametru Start metody (vysvětleno v kroku 2).

DidInvalidate

K neplatnému použití může dojít z několika důvodů:

  • Při kontrole došlo k chybě.
  • Aplikace přestala být v popředí.
  • Uživatel se rozhodl kontrolu zrušit.
  • Kontrola byla zrušena aplikací.

Následující kód ukazuje, jak zpracovat chybu:

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

Jakmile je relace neplatná, je nutné vytvořit nový objekt relace, aby se znovu skenoval.

2. Zahájení NFCNdefReaderSession

Kontrola by měla začínat požadavkem uživatele, například stisknutím tlačítka. Následující kód vytvoří a spustí skenovací relaci:

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

Parametry konstruktoru NFCNdefReaderSession jsou následující:

  • delegate– Provádění .INFCNdefReaderSessionDelegate V ukázkovém kódu se delegát implementuje v kontroleru zobrazení tabulky, proto this se používá jako parametr delegáta.
  • queue – Fronta, na které se zpracovávají zpětná volání. To může být null, v takovém případě nezapomeňte použít DispatchQueue.MainQueue při aktualizaci ovládacích prvků uživatelského rozhraní (jak je znázorněno v ukázce).
  • invalidateAfterFirstRead – Když truese kontrola zastaví po první úspěšné kontrole; při false kontrole bude pokračovat a více výsledků vrácených, dokud se kontrola nezruší nebo se dosáhne 60sekundového časového limitu.

3. Zrušení relace skenování

Uživatel může relaci skenování zrušit prostřednictvím systémového tlačítka v uživatelském rozhraní:

Cancel button while scanning

Aplikace může programově zrušit kontrolu voláním InvalidateSession metody:

Session.InvalidateSession();

V obou případech bude volána metoda delegáta DidInvalidate .

Shrnutí

CoreNFC umožňuje vaší aplikaci číst data ze značek NFC. Podporuje čtení různých formátů značek (typy NDEF 1 až 5), ale nepodporuje zápis ani formátování.