Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Lettura dei tag NFC (Near Field Communication) con iOS 11
CoreNFC è un nuovo framework in iOS 11 che consente l'accesso alla radio NFC (Near Field Communication ) per leggere i tag dall'interno delle app. CoreNFC funziona su i Telefono 7, i Telefono 7 Plus, i Telefono 8, i Telefono 8 Plus, i Telefono X, i Telefono XS e i Telefono 11 modelli (mentre i Telefono 6 e i Telefono 6 I modelli plus hanno funzionalità di pagamento NFC, non supportano CoreNFC).
Il lettore di tag NFC nei dispositivi iOS supporta tutti i tipi di tag NFC da 1 a 5 che contengono informazioni NDEF (NFC Data Exchange Format ).
Esistono alcune restrizioni da tenere presenti:
- CoreNFC supporta solo la lettura dei tag (non la scrittura o la formattazione).
- Le analisi dei tag devono essere avviate dall'utente e timeout dopo 60 secondi.
- Le app devono essere visibili in primo piano per l'analisi.
- CoreNFC può essere testato solo nei dispositivi reali (non nel simulatore).
Questa pagina descrive la configurazione necessaria per usare CoreNFC e illustra come usare l'API.
Impostazione
Per abilitare CoreNFC, è necessario configurare tre elementi nel progetto:
- Chiave di privacy Info.plist .
- Voce Entitlements.plist .
- Profilo di provisioning con funzionalità di lettura tag NFC.
Info.plist
Aggiungere la chiave e il testo della privacy NFCReaderUsageDescription , che viene visualizzato all'utente durante l'analisi. Usare un messaggio appropriato per l'applicazione, ad esempio spiegare lo scopo dell'analisi:
<key>NFCReaderUsageDescription</key>
<string>NFC tag to read NDEF messages into the application</string>
Entitlements.plist
L'app deve richiedere la funzionalità Near Field Communications Tag Reading usando la coppia chiave/valore seguente nel file Entitlements.plist:
<key>com.apple.developer.nfc.readersession.formats</key>
<array>
<string>NDEF</string>
</array>
Profilo di provisioning
Creare un nuovo ID app e assicurarsi che il servizio di lettura tag NFC sia selezionata:
È quindi necessario creare un nuovo profilo di provisioning per questo ID app, quindi scaricarlo e installarlo nel Mac di sviluppo.
Lettura di un tag
Dopo aver configurato il progetto, aggiungere using CoreNFC; all'inizio del file e seguire questi tre passaggi per implementare la funzionalità di lettura dei tag NFC:
1. Implementare INFCNdefReaderSessionDelegate
L'interfaccia prevede due metodi da implementare:
DidDetect- Chiamato quando un tag viene letto correttamente.DidInvalidate- Chiamato quando si verifica un errore o viene raggiunto il timeout di 60 secondi.
DidDetect
Nel codice di esempio ogni messaggio analizzato viene aggiunto a una visualizzazione tabella:
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();
});
}
Questo metodo può essere chiamato più volte (e una matrice di messaggi può essere passata) se la sessione consente più letture di tag. Viene impostato usando il terzo parametro del Start metodo (illustrato nel passaggio 2).
DidInvalidate
L'invalidazione può verificarsi per diversi motivi:
- Si è verificato un errore durante l'analisi.
- L'app non è più in primo piano.
- L'utente ha scelto di annullare l'analisi.
- L'analisi è stata annullata dall'app.
Il codice seguente illustra come gestire un errore:
public void DidInvalidate(NFCNdefReaderSession session, NSError error)
{
var readerError = (NFCReaderError)(long)error.Code;
if (readerError != NFCReaderError.ReaderSessionInvalidationErrorFirstNDEFTagRead &&
readerError != NFCReaderError.ReaderSessionInvalidationErrorUserCanceled)
{
// some error handling
}
}
Dopo che una sessione è stata invalidata, è necessario creare un nuovo oggetto sessione per eseguire di nuovo l'analisi.
2. Avviare un NFCNdefReaderSession
L'analisi deve iniziare con una richiesta dell'utente, ad esempio la pressione di un pulsante. Il codice seguente crea e avvia una sessione di analisi:
Session = new NFCNdefReaderSession(this, null, true);
Session?.BeginSession();
I parametri per il NFCNdefReaderSession costruttore sono i seguenti:
delegate: implementazione diINFCNdefReaderSessionDelegate. Nel codice di esempio il delegato viene implementato nel controller di visualizzazione tabella, pertantothisviene usato come parametro delegato.queue: la coda su cui vengono gestiti i callback. Può esserenull, nel qual caso assicurarsi di usareDispatchQueue.MainQueuequando si aggiornano i controlli dell'interfaccia utente (come illustrato nell'esempio).invalidateAfterFirstRead- Quandotrue, l'analisi si arresta dopo la prima analisi riuscita; quandofalsel'analisi continuerà e più risultati restituiti fino a quando l'analisi non viene annullata o viene raggiunto il timeout di 60 secondi.
3. Annullare la sessione di analisi
L'utente può annullare la sessione di analisi tramite un pulsante fornito dal sistema nell'interfaccia utente:

L'app può annullare l'analisi a livello di codice chiamando il InvalidateSession metodo :
Session.InvalidateSession();
In entrambi i casi, verrà chiamato il metodo del DidInvalidate delegato.
Riepilogo
CoreNFC consente all'app di leggere i dati dai tag NFC. Supporta la lettura di un'ampia gamma di formati di tag (tipi NDEF da 1 a 5), ma non supporta la scrittura o la formattazione.
