NFC: tecnologia e applicazioni

44
NFC: tecnologia e applicazioni Stefano Sanna gerdavax AT gmail DOT com Emanuele Di Saverio emanuele.disaverio AT gmail DOT com

Transcript of NFC: tecnologia e applicazioni

Page 1: NFC: tecnologia e applicazioni

NFC: tecnologia e applicazioni

Stefano Sanna

gerdavax AT gmail DOT com

Emanuele Di Saverio

emanuele.disaverio AT gmail DOT com

Page 2: NFC: tecnologia e applicazioni

DEMO

Page 3: NFC: tecnologia e applicazioni

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

Page 4: NFC: tecnologia e applicazioni

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

Page 5: NFC: tecnologia e applicazioni

NFCNear Field Communication

Page 6: NFC: tecnologia e applicazioni

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

Page 7: NFC: tecnologia e applicazioni

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/

Page 8: NFC: tecnologia e applicazioni

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

Page 9: NFC: tecnologia e applicazioni

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

Page 10: NFC: tecnologia e applicazioni

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

Page 11: NFC: tecnologia e applicazioni

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?

Page 12: NFC: tecnologia e applicazioni

Emanuele Di Saverio - Stefano Sannaemanuele.disaverio | gerdavax AT gmail.com

Alcuni tipi di tag

12

Page 13: NFC: tecnologia e applicazioni

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

Page 14: NFC: tecnologia e applicazioni

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

Page 15: NFC: tecnologia e applicazioni

API Android

Page 16: NFC: tecnologia e applicazioni

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

Page 17: NFC: tecnologia e applicazioni

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

Page 18: NFC: tecnologia e applicazioni

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

Page 19: NFC: tecnologia e applicazioni

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

Page 20: NFC: tecnologia e applicazioni

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" />

Page 21: NFC: tecnologia e applicazioni

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

Page 22: NFC: tecnologia e applicazioni

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

Page 23: NFC: tecnologia e applicazioni

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

Page 24: NFC: tecnologia e applicazioni

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

Page 25: NFC: tecnologia e applicazioni

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

Page 26: NFC: tecnologia e applicazioni

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>

Page 27: NFC: tecnologia e applicazioni

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

Page 28: NFC: tecnologia e applicazioni

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

Page 29: NFC: tecnologia e applicazioni

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>

Page 30: NFC: tecnologia e applicazioni

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

Page 31: NFC: tecnologia e applicazioni

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 }}

Page 32: NFC: tecnologia e applicazioni

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

Page 33: NFC: tecnologia e applicazioni

• 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");}

Page 34: NFC: tecnologia e applicazioni

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

Page 35: NFC: tecnologia e applicazioni

Dagli smartphone agli oggetti(extra)

Page 36: NFC: tecnologia e applicazioni

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

Page 37: NFC: tecnologia e applicazioni

Emanuele Di Saverio - Stefano Sannaemanuele.disaverio | gerdavax AT gmail.com

Arduino MEGA + MFRC522

37

Page 38: NFC: tecnologia e applicazioni

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

Page 39: NFC: tecnologia e applicazioni

RISORSE

Page 40: NFC: tecnologia e applicazioni

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

Page 41: NFC: tecnologia e applicazioni

Emanuele Di Saverio - Stefano Sannaemanuele.disaverio | gerdavax AT gmail.com

41

Dove acquistare tag e lettori• SmartCardFocus

– http://www.smartcardfocus.com

• ebay!

Page 42: NFC: tecnologia e applicazioni

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

Page 43: NFC: tecnologia e applicazioni

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

Page 44: NFC: tecnologia e applicazioni

GRAZIE :-)