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 :
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, protothis
se používá jako parametr delegáta.queue
– Fronta, na které se zpracovávají zpětná volání. To může býtnull
, v takovém případě nezapomeňte použítDispatchQueue.MainQueue
při aktualizaci ovládacích prvků uživatelského rozhraní (jak je znázorněno v ukázce).invalidateAfterFirstRead
– Kdyžtrue
se kontrola zastaví po první úspěšné kontrole; přifalse
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í:
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í.