NFC: tecnologia e applicazioni
-
Upload
stefano-sanna -
Category
Technology
-
view
3.217 -
download
2
Transcript of NFC: tecnologia e applicazioni
NFC: tecnologia e applicazioni
Stefano Sanna
gerdavax AT gmail DOT com
Emanuele Di Saverio
emanuele.disaverio AT gmail DOT com
DEMO
Emanuele Di Saverio - Stefano Sannaemanuele.disaverio | gerdavax AT gmail.com
3
Agenda• Speaker• NFC: Near Field Communication• Scenari applicativi• API Android• API JME• Dagli smartphone agli oggetti: Arduino• Risorse, Q&A
Emanuele Di Saverio - Stefano Sannaemanuele.disaverio | gerdavax AT gmail.com
4
Speaker (“Lei non sa chi sono io!”)• Stefano Sanna
– Head of Android Lab @ Open Reply
• Emanuele Di Saverio– Senior Design Technologist @ frog
Insieme hanno pubblicato “Android Programmazione Avanzata” per le Edizioni FAG Milano in collaborazione con Samsung Italia
NFCNear Field Communication
Emanuele Di Saverio - Stefano Sannaemanuele.disaverio | gerdavax AT gmail.com
Near Field Communication• È una tecnologia a radiofrequenza (13.56MHz) per la
comunicazione a corto raggio tra oggetti di tipo
– attivo: smartphone con chip NFC o lettore USB connesso ad un computer
– passivo: tag (superficiale o embedded) associato ad un oggetto fisico
• NFC Forum: http://www.nfc-forum.org6
Emanuele Di Saverio - Stefano Sannaemanuele.disaverio | gerdavax AT gmail.com
Principio di funzionamentoIl componente attivo emette uncampo elettromagnetico che induce una corrente sul circuito del componente passivo. Tale corrente è sufficiente ad alimentare il microcontrollore a bordo, ricevere il dato, effettuare l’elaborazione e trasmettere una risposta
7
http://www.scienceprog.com/how-does-rfid-tag-technology-works/
Emanuele Di Saverio - Stefano Sannaemanuele.disaverio | gerdavax AT gmail.com
NFC in numeri• Comunicazione a corto raggio
– Distanza teorica: 10 cm - Distanza “pratica”: < 4 cm• Velocità di comunicazione
– Min: 106 Kbit/s - Max: 424 Kbit/s • Diffusione:
– 3.5 miliardi di smartcard MIFARE– oltre 40 milioni di reader desktop– circa 50 modelli di telefono/smartphone dotati di chip NFC
8
Emanuele Di Saverio - Stefano Sannaemanuele.disaverio | gerdavax AT gmail.com
Scenari applicativi• Pagamento• Sicurezza, controllo
accessi• Ticketing• Tracking di merci• Gaming• Medical
9
Google Wallet sample image
Emanuele Di Saverio - Stefano Sannaemanuele.disaverio | gerdavax AT gmail.com
Modalità operative
10
reader/writer
card emulation
peer-to-peer
Samsung Nexus S
Tag by TI
ACR122U USB Reader
Samsung Galaxy Nexus
Emanuele Di Saverio - Stefano Sannaemanuele.disaverio | gerdavax AT gmail.com
Modalità operative per piattaforma
11
Java Micro Edition BlackBerry Android Symbian bada iOS Windows
Phone
reader writer JSR 257 2.3.x iPhone 5? WP 8?
P2P API proprietarie 4.0.x iPhone 5? WP 8?
card emulation
JSR 257
JSR 177API privata iPhone 5? WP 8?
Emanuele Di Saverio - Stefano Sannaemanuele.disaverio | gerdavax AT gmail.com
Alcuni tipi di tag
12
Emanuele Di Saverio - Stefano Sannaemanuele.disaverio | gerdavax AT gmail.com
Si fa presto a dire tag...
13
http://www.androidavanzato.it
Tecnologie
Tipi NFC
Prodotti
Emanuele Di Saverio - Stefano Sannaemanuele.disaverio | gerdavax AT gmail.com
NDEF: NFC Data Exchange Format
• Formato di dati standard basato su dei NDEF Message contenenti uno o più NDEF Record
• Per consentire alle app di gestire automaticamente il contenuto dei record, sono definiti alcuni tipi standard attraverso gli NFC RTD (Record Data Type):– Text e URI– Smart Poster– vCard
14
API Android
Emanuele Di Saverio - Stefano Sannaemanuele.disaverio | gerdavax AT gmail.com
NFC su Android• Prima API introdotta sulla API 2.3, Nexus S
– Reader/writer– “prototipo” di supporto P2P
• Consolidamento API inIce Cream Sandwich– NFC Push
16
Chip NXP PN65N all’interno di un Nexus S
Emanuele Di Saverio - Stefano Sannaemanuele.disaverio | gerdavax AT gmail.com
Android NFC APIL’API è organizzata in due package:
• android.nfc– contiene le classi di interfacciamento al chip NFC e di
gestione di messaggi e record NDEF• android.nfc.tech
– contiene le classi che modellano i singoli tipi di tag e tecnologie supportate dalla piattaforma
17
Emanuele Di Saverio - Stefano Sannaemanuele.disaverio | gerdavax AT gmail.com
android.nfc (reader/writer)• NfcManager
– servizio di sistema che fornisce un riferimento all'NfcAdapter
• NfcAdapter– modella il modulo NFC del terminale. È utilizzato per l’accesso al Foreground Dispatching
System
• NdefMessage– rappresenta l'unità elementare di comunicazione tra dispositivi NFC.
• NdefRecord– l'informazione atomica contenuta in un NdefMessage, costituita da payload e metadati
• Tag– modella il tag letto dal dispositivo e consente di conoscerne le technology associate
18
Emanuele Di Saverio - Stefano Sannaemanuele.disaverio | gerdavax AT gmail.com
android.nfc (P2P)• NfcAdapter.CreateNdefMessageCallback
– callback invocata quando la piattaforma chiede all'app di predisporre un messaggio NDEF da inviare via NFC Push ad un altro terminale NFC
• NfcAdapter.OnNdefPushCompleteCallback– callback invocata quando l'invio di un messaggio NDEF è andato a buon fine
• NfcEvent– incapsula (per ora) solo un riferimento all’NfcAdapter che ha generato la richiesta di
evento push
19
Emanuele Di Saverio - Stefano Sannaemanuele.disaverio | gerdavax AT gmail.com
Permission• Per poter utilizzare l’API NFC è necessario dichiarare
la permission e richiedere la feature hardware sull’AndroidManifest dell’applicazione:
20
<uses-permission android:name="android.permission.NFC" />
<uses-feature android:name="android.hardware.nfc" android:required="true" />
Emanuele Di Saverio - Stefano Sannaemanuele.disaverio | gerdavax AT gmail.com
android.nfc.tech• TagTechnology
– È l'interfaccia comune a tutti i tipi di tag che espone i metodi per aprire e chiudere la connessione (necessaria per effettuare tutte le successive operazioni di lettura e di scrittura)
• Ndef, NdefFormatable (opzionale)– Forniscono accesso a tag (formattati e formattabili) conformi alla specifica NDEF,
indipendente dal tipo di tag e SCOS sottostante
• IsoDep, MifareClassic (opzionale), MifareUltralight (opzionale), NfcA, NfcB, NfcF, NfcV
– Forniscono accesso a specifiche tecnologie di tag ed esportano funzionalità di basso livello (ad esempio, authenticateSectorWithKeyA() su MifareClassic o getAtqa() su NfcA)
21
Emanuele Di Saverio - Stefano Sannaemanuele.disaverio | gerdavax AT gmail.com
Note sul dispatching degli eventi NFC• Gli eventi di lettura di tag NFC sono propagati
attraverso Intent• Tali Intent sono inviati esclusivamente alle Activity
(no Service, no BroadcastReceiver)• La scelta del target avviene attraverso Intent Filter• Gli eventi NFC sono generati e propagati solo se il
device ha lo schermo sbloccato (no “silent NFC” con lo smartphone in standby)
22
Emanuele Di Saverio - Stefano Sannaemanuele.disaverio | gerdavax AT gmail.com
Tipi di eventi (ACTION) di lettura di tag• NDEF_DISCOVERED
– Il tag appena letto è conforme alla specifica NDEF e contiene dati al proprio interno opportunamente formattati
• TECH_DISCOVERED– Il tag appena letto espone una o più tecnologie supportate
da una applicazione installata sul terminale• TAG_DISCOVERED
– Nessuna app è registrata su tag NDEF o su specifiche tecnologie: si cerca di propagare l’evento generico
23
Emanuele Di Saverio - Stefano Sannaemanuele.disaverio | gerdavax AT gmail.com
Logica di dispatching dell’Intent
24
http://developer.android.com/guide/topics/nfc/nfc.html
Emanuele Di Saverio - Stefano Sannaemanuele.disaverio | gerdavax AT gmail.com
IntentFilter sul manifest• A seconda del tipo di evento a cui è interessata, una
Activity dichiara nel manifest uno o più IntentFilter per una o più action tra NDEF_DISCOVERED, TECH_DISCOVERED e TAG_DISCOVERED.
• Alla lettura di un tag lo stack NFC leggetutti i manifest per individuare l'Activitypiù adatta a gestirlo; se più di di una è candidata, viene mostrata la finestra dell'Activity Chooser
25
Emanuele Di Saverio - Stefano Sannaemanuele.disaverio | gerdavax AT gmail.com
IntentFilter per NDEF_DISCOVEREDÈ necessario specificare il MIME Type del record desiderato (text/plain, application/vnd.myapp.feat, ...):
26
<activity android:name=".NFCReaderActivity">
<intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED"/> <data android:mimeType="text/plain"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter>
</activity>
Emanuele Di Saverio - Stefano Sannaemanuele.disaverio | gerdavax AT gmail.com
IntentFilter per TECH_DISCOVERED
27
<activity android:name=".NFCReaderActivity">
<intent-filter> <action android:name="android.nfc.action.TECH_DISCOVERED"/> </intent-filter>
<meta-data android:name="android.nfc.action.TECH_DISCOVERED" android:resource="@xml/nfc_tech_filter" />
</activity>
Occorre indicare l’elenco di tecnologie supportate
Emanuele Di Saverio - Stefano Sannaemanuele.disaverio | gerdavax AT gmail.com
Elenco tecnologie per TECH_DISCOVERED
28
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <tech-list> <tech>android.nfc.tech.NfcA</tech> <tech>android.nfc.tech.Ndef</tech> </tech-list> </resources>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <tech-list> <tech>android.nfc.tech.NfcA</tech> <tech>android.nfc.tech.NdefFormatable</tech> </tech-list> </resources>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <tech-list> <tech>android.nfc.tech.MifareClassic</tech> <tech>android.nfc.tech.Ndef</tech> </tech-list> </resources>
OR
AN
DA
ND
AN
D
Emanuele Di Saverio - Stefano Sannaemanuele.disaverio | gerdavax AT gmail.com
IntentFilter per TAG_DISCOVERED
29
<activity android:name=".NFCReaderActivity">
<intent-filter> <action android:name="android.nfc.action.TAG_DISCOVERED"/> </intent-filter>
</activity>
Emanuele Di Saverio - Stefano Sannaemanuele.disaverio | gerdavax AT gmail.com
Foreground Dispatching• Un’Activity in esecuzione può chiedere al di avere
prelazione sulle notifiche NFC:
30
//...mNfcAdapter = NfcAdapter.getDefaultAdapter(mContext);//...
@Overridepublic void onResume() { super.onResume();
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
mNfcAdapter.enableForegroundDispatch(this, pendingIntent, null, null);
}
Con questi parametri è possibile specificare l’action da ricevere e il filtro per tecnologie e metadati. Non specificare nulla equivale ad un’action TAG_DISCOVERED
Emanuele Di Saverio - Stefano Sannaemanuele.disaverio | gerdavax AT gmail.com
È ora di leggere un tag!
31
@Overridepublic void onNewIntent(Intent intent) { Bundle bundle = intent.getExtras();
Tag tag = bundle.getParcelable(NfcAdapter.EXTRA_TAG); byte[] tagID = tag.getId(); // ID String id = byteToHex(tagID); // convertiamo l’ID in stringa...
// tech String[] techList = tag.getTechList(); for (String tech : techList) { addToUI(tech); // aggiungiamo la technology alla lista in UI }}
Emanuele Di Saverio - Stefano Sannaemanuele.disaverio | gerdavax AT gmail.com
Lettura di un NDEF Message
32
// [...]Bundle bundle = intent.getExtras();Tag tag = bundle.getParcelable(NfcAdapter.EXTRA_TAG);
Ndef ndefTag = Ndef.get(tag); ndefTag.connect();
NdefRecord[] records = ndefTag.getNdefMessage().getRecords();
ArrayList<String> strings = new ArrayList<String>();
for (NdefRecord record : records) { byte[] payload = record.getPayload();
strings.add(decodeTextPayload(payload));}
ndefTag.close();
• Il primo byte del payload contiene informazioni sull’encoding (UTF-8 o UTF-16) e sulla lunghezza del codice IANA della lingua del testo:
Emanuele Di Saverio - Stefano Sannaemanuele.disaverio | gerdavax AT gmail.com
Decodifica del payload RTD_TEXT
33
// [...]private String decodeTextPayload(byte[] payload) throws Exception { byte status = payload[0];
int languageCodeLenght = status & 0x3f;
return new String(payload, 1 + languageCodeLenght, payload.length - 1 - languageCodeLenght, "UTF-8");}
Emanuele Di Saverio - Stefano Sannaemanuele.disaverio | gerdavax AT gmail.com
Application Record e Android Beam• Android 4 introduce due interessanti novità:
– Application Record: consente di scrivere su un tag un record riconosciuto dal sistema operativo che consente di avviare automaticamente un’app (anche priva di funzionalità NFC) o scaricarla del Play Store (se non già installata)
– Android Beam implementa la modalità NFC Push che permette lo scambio di messaggi NDEF tra due terminali. È supportata nativamente da alcune app di sistema
DEMO BROWSER34
Dagli smartphone agli oggetti(extra)
Emanuele Di Saverio - Stefano Sannaemanuele.disaverio | gerdavax AT gmail.com
Dagli smartphone agli oggetti: Arduino• La disponibilità di chip NFC/RFID a basso costo
compatibili con la specifica MIFARE consente di realizzare interessanti prototipi di “Internet of Things” in cui tag scritti da uno smartphone possono essere letti e riconosciuti da oggetti fisici
• Hardware “comodo” per sperimentare:– Arduino MEGA (1280 o 2560)– Elechouse SSRFID basato su MFRC522
36
Emanuele Di Saverio - Stefano Sannaemanuele.disaverio | gerdavax AT gmail.com
Arduino MEGA + MFRC522
37
Emanuele Di Saverio - Stefano Sannaemanuele.disaverio | gerdavax AT gmail.com
Lettura dell’ID di un tag MIFARE
38
int count = 0;
void setup() {Serial.begin(9600);Serial1.begin(9600);Serial1.write(0x02);pinMode(13, OUTPUT);
}
void loop() {if (Serial1.available()) {
Serial.print(Serial1.read(),HEX); //Display the Serial Number in HEX
count++;
if (count == 4) {Serial.println();count = 0;
} else {Serial.print(":");
}}
}
Imposta il chip RFID in modalità lettura automatica dell’ID del tag
RISORSE
Emanuele Di Saverio - Stefano Sannaemanuele.disaverio | gerdavax AT gmail.com
40
Alcuni dei terminali NFC venduti in Italia
Nokia 6131 NFC (JME)
Samsung S5230N (JME)Samsung
Nexus S (Android)Samsung Galaxy Nexus (Android)
Nokia 603 (JME)
Sony Xperia S (Android)
BlackBerry 9380 BlackBerry 9900
Nokia N9 (MeeGo)Samsung
Galaxy S II NFC
Emanuele Di Saverio - Stefano Sannaemanuele.disaverio | gerdavax AT gmail.com
41
Dove acquistare tag e lettori• SmartCardFocus
– http://www.smartcardfocus.com
• ebay!
Emanuele Di Saverio - Stefano Sannaemanuele.disaverio | gerdavax AT gmail.com
42
Bibliografia• Near Field Communication:
from theory to practiceVedat Coskun, Kerem Ok, Busra OzdenizciWiley
• Android Programmazione AvanzataEmanuele Di Saverio, Stefano SannaEdizioni FAG Milano
Emanuele Di Saverio - Stefano Sannaemanuele.disaverio | gerdavax AT gmail.com
43
Contatti• Emanuele Di Saverio
– emanuele.disaverio AT gmail DOT com– @hazam
• Stefano Sanna– gerdavax AT gmail DOT com– @gerdavax– http://www.gerdavax.it
GRAZIE :-)