Your SlideShare is downloading. ×
0
NFC: tecnologia e applicazioniStefano Sannagerdavax AT gmail DOT comEmanuele Di Saverioemanuele.disaverio AT gmail DOT com
DEMO
Agenda•   Speaker•   NFC: Near Field Communication•   Scenari applicativi•   API Android•   API JME•   Dagli smartphone ag...
Speaker (“Lei non sa chi sono io!”)• Stefano Sanna    – Head of Android Lab @ Open Reply• Emanuele Di Saverio    – Senior ...
NFCNear Field Communication
Near Field Communication• È una tecnologia a radiofrequenza (13.56MHz) per la  comunicazione a corto raggio tra oggetti di...
Principio di funzionamentoIl componente attivo emette uncampo elettromagnetico cheinduce una corrente sul circuitodel comp...
NFC in numeri• Comunicazione a corto raggio  – Distanza teorica: 10 cm - Distanza “pratica”: < 4 cm• Velocità di comunicaz...
Scenari applicativi                                  • Pagamento                                  • Sicurezza, controllo  ...
riterModalità operative                    e   r/w                               read                                     ...
Modalità operative per piattaforma            Java Micro                                                                  ...
Alcuni tipi di tag                  Emanuele Di Saverio - Stefano Sanna    12            emanuele.disaverio | gerdavax AT ...
Si fa presto a dire tag...TecnologieTipi NFC Prodotti                                                                    h...
NDEF: NFC Data Exchange Format• Formato di dati standard basato su dei NDEF    Message contenenti uno o più NDEF Record•  ...
API Android
Chip NXP PN65N                   NFC su Android                         all’interno di un Nexus S• Prima API introdotta su...
Android NFC APIL’API è organizzata in due package:• android.nfc   – contiene le classi di interfacciamento al chip NFC e d...
android.nfc (reader/writer)• NfcManager   – servizio di sistema che fornisce un riferimento allNfcAdapter• NfcAdapter   – ...
android.nfc (P2P)• NfcAdapter.CreateNdefMessageCallback   – callback invocata quando la piattaforma chiede allapp di predi...
Permission  • Per poter utilizzare l’API NFC è necessario dichiarare    la permission e richiedere la feature hardware    ...
android.nfc.tech• TagTechnology   – È linterfaccia comune a tutti i tipi di tag che espone i metodi per aprire e chiudere ...
Note sul dispatching degli eventi NFC• Gli eventi di lettura di tag NFC sono propagati  attraverso Intent• Tali Intent son...
Tipi di eventi (ACTION) di lettura di tag• NDEF_DISCOVERED  – Il tag appena letto è conforme alla specifica NDEF e    cont...
Logica di dispatching dell’Intent                                   http://developer.android.com/guide/topics/nfc/nfc.html...
IntentFilter sul manifest• A seconda del tipo di evento a cui è interessata, una  Activity dichiara nel manifest uno o più...
IntentFilter per NDEF_DISCOVERED  È necessario specificare il MIME Type del record desiderato  (text/plain, application/vn...
IntentFilter per TECH_DISCOVERED                                                                                  Occorre ...
Elenco tecnologie per TECH_DISCOVERED     <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">                 ...
IntentFilter per TAG_DISCOVERED<activity android:name=".NFCReaderActivity">    <intent-filter>      <action android:name="...
Foreground Dispatching    • Un’Activity in esecuzione può chiedere al di avere      prelazione sulle notifiche NFC://...mN...
È ora di leggere un tag!@Overridepublic void onNewIntent(Intent intent) {    Bundle bundle = intent.getExtras();    Tag ta...
Lettura di un NDEF Message// [...]Bundle bundle = intent.getExtras();Tag tag = bundle.getParcelable(NfcAdapter.EXTRA_TAG);...
Decodifica del payload RTD_TEXT  • Il primo byte del payload contiene informazioni    sull’encoding (UTF-8 o UTF-16) e sul...
Application Record e Android Beam• Android 4 introduce due interessanti novità:  – Application Record: consente di scriver...
Dagli smartphone agli oggetti(extra)
Dagli smartphone agli oggetti: Arduino• La disponibilità di chip NFC/RFID a basso costo  compatibili con la specifica MIFA...
Arduino MEGA + MFRC522                   Emanuele Di Saverio - Stefano Sanna    37             emanuele.disaverio | gerdav...
Lettura dell’ID di un tag MIFAREint count = 0;                                                                            ...
RISORSE
Alcuni dei terminali NFC venduti in Italia  Nokia 603 (JME)                     Nokia 6131 NFC (JME)                      ...
Dove acquistare tag e lettori• SmartCardFocus  – http://www.smartcardfocus.com• ebay!                                     ...
Bibliografia• Near Field Communication:  from theory to practice      Vedat Coskun, Kerem Ok, Busra Ozdenizci      Wiley• ...
Contatti• Emanuele Di Saverio  – emanuele.disaverio AT gmail DOT com  – @hazam• Stefano Sanna  – gerdavax AT gmail DOT com...
GRAZIE :-)
Upcoming SlideShare
Loading in...5
×

NFC: tecnologia e applicazioni

3,308

Published on

Published in: Technology
2 Comments
3 Likes
Statistics
Notes
No Downloads
Views
Total Views
3,308
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
83
Comments
2
Likes
3
Embeds 0
No embeds

No notes for slide

Transcript of "NFC: tecnologia e applicazioni"

  1. 1. NFC: tecnologia e applicazioniStefano Sannagerdavax AT gmail DOT comEmanuele Di Saverioemanuele.disaverio AT gmail DOT com
  2. 2. DEMO
  3. 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 Sanna 3 emanuele.disaverio | gerdavax AT gmail.com
  4. 4. Speaker (“Lei non sa chi sono io!”)• Stefano Sanna – Head of Android Lab @ Open Reply• Emanuele Di Saverio – Senior Design Technologist @ frogInsieme hanno pubblicato “Android Programmazione Avanzata” per le Edizioni FAGMilano in collaborazione con Samsung Italia Emanuele Di Saverio - Stefano Sanna 4 emanuele.disaverio | gerdavax AT gmail.com
  5. 5. NFCNear Field Communication
  6. 6. 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.org Emanuele Di Saverio - Stefano Sanna 6 emanuele.disaverio | gerdavax AT gmail.com
  7. 7. Principio di funzionamentoIl componente attivo emette uncampo elettromagnetico cheinduce una corrente sul circuitodel componente passivo. Talecorrente è sufficiente adalimentare il microcontrollore abordo, ricevere il dato, effettuarel’elaborazione e trasmettere unarisposta http://www.scienceprog.com/how-does-rfid-tag-technology-works/ Emanuele Di Saverio - Stefano Sanna 7 emanuele.disaverio | gerdavax AT gmail.com
  8. 8. 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 Emanuele Di Saverio - Stefano Sanna 8 emanuele.disaverio | gerdavax AT gmail.com
  9. 9. Scenari applicativi • Pagamento • Sicurezza, controllo accessi • Ticketing • Tracking di merci • Gaming • MedicalGoogle Wallet sample image Emanuele Di Saverio - Stefano Sanna 9 emanuele.disaverio | gerdavax AT gmail.com
  10. 10. riterModalità operative e r/w read Tag by TI peer-to-peer Samsung Nexus S card emu latio n ACR122U USB Reader Samsung Galaxy Nexus Emanuele Di Saverio - Stefano Sanna 10 emanuele.disaverio | gerdavax AT gmail.com
  11. 11. Modalità operative per piattaforma Java Micro Windows BlackBerry Android Symbian bada iOS Edition Phone reader JSR 257 2.3.x iPhone 5? WP 8? writer API P2P proprietarie 4.0.x iPhone 5? WP 8? card JSR 257 API privata iPhone 5? WP 8?emulation JSR 177 Emanuele Di Saverio - Stefano Sanna 11 emanuele.disaverio | gerdavax AT gmail.com
  12. 12. Alcuni tipi di tag Emanuele Di Saverio - Stefano Sanna 12 emanuele.disaverio | gerdavax AT gmail.com
  13. 13. Si fa presto a dire tag...TecnologieTipi NFC Prodotti http://www.androidavanzato.it Emanuele Di Saverio - Stefano Sanna 13 emanuele.disaverio | gerdavax AT gmail.com
  14. 14. 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 Emanuele Di Saverio - Stefano Sanna 14 emanuele.disaverio | gerdavax AT gmail.com
  15. 15. API Android
  16. 16. Chip NXP PN65N NFC su Android all’interno di un Nexus S• Prima API introdotta sulla API 2.3, Nexus S – Reader/writer – “prototipo” di supporto P2P• Consolidamento API in Ice Cream Sandwich – NFC Push Emanuele Di Saverio - Stefano Sanna 16 emanuele.disaverio | gerdavax AT gmail.com
  17. 17. 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 Emanuele Di Saverio - Stefano Sanna 17 emanuele.disaverio | gerdavax AT gmail.com
  18. 18. android.nfc (reader/writer)• NfcManager – servizio di sistema che fornisce un riferimento allNfcAdapter• NfcAdapter – modella il modulo NFC del terminale. È utilizzato per l’accesso al Foreground Dispatching System• NdefMessage – rappresenta lunità elementare di comunicazione tra dispositivi NFC.• NdefRecord – linformazione atomica contenuta in un NdefMessage, costituita da payload e metadati• Tag – modella il tag letto dal dispositivo e consente di conoscerne le technology associate Emanuele Di Saverio - Stefano Sanna 18 emanuele.disaverio | gerdavax AT gmail.com
  19. 19. android.nfc (P2P)• NfcAdapter.CreateNdefMessageCallback – callback invocata quando la piattaforma chiede allapp di predisporre un messaggio NDEF da inviare via NFC Push ad un altro terminale NFC• NfcAdapter.OnNdefPushCompleteCallback – callback invocata quando linvio 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 Emanuele Di Saverio - Stefano Sanna 19 emanuele.disaverio | gerdavax AT gmail.com
  20. 20. Permission • Per poter utilizzare l’API NFC è necessario dichiarare la permission e richiedere la feature hardware sull’AndroidManifest dell’applicazione:<uses-permission android:name="android.permission.NFC" /><uses-feature android:name="android.hardware.nfc" android:required="true" /> Emanuele Di Saverio - Stefano Sanna 20 emanuele.disaverio | gerdavax AT gmail.com
  21. 21. android.nfc.tech• TagTechnology – È linterfaccia 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) Emanuele Di Saverio - Stefano Sanna 21 emanuele.disaverio | gerdavax AT gmail.com
  22. 22. 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) Emanuele Di Saverio - Stefano Sanna 22 emanuele.disaverio | gerdavax AT gmail.com
  23. 23. 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 Emanuele Di Saverio - Stefano Sanna 23 emanuele.disaverio | gerdavax AT gmail.com
  24. 24. Logica di dispatching dell’Intent http://developer.android.com/guide/topics/nfc/nfc.html Emanuele Di Saverio - Stefano Sanna 24 emanuele.disaverio | gerdavax AT gmail.com
  25. 25. 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 legge tutti i manifest per individuare lActivity più adatta a gestirlo; se più di di una è candidata, viene mostrata la finestra dellActivity Chooser Emanuele Di Saverio - Stefano Sanna 25 emanuele.disaverio | gerdavax AT gmail.com
  26. 26. IntentFilter per NDEF_DISCOVERED È necessario specificare il MIME Type del record desiderato (text/plain, application/vnd.myapp.feat, ...):<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 Sanna 26 emanuele.disaverio | gerdavax AT gmail.com
  27. 27. IntentFilter per TECH_DISCOVERED Occorre indicare l’elenco di tecnologie supportate<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> Emanuele Di Saverio - Stefano Sanna 27 emanuele.disaverio | gerdavax AT gmail.com
  28. 28. Elenco tecnologie per TECH_DISCOVERED <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> AND <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"> AND <tech-list>OR <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> AND <tech>android.nfc.tech.MifareClassic</tech> <tech>android.nfc.tech.Ndef</tech> </tech-list> </resources> Emanuele Di Saverio - Stefano Sanna 28 emanuele.disaverio | gerdavax AT gmail.com
  29. 29. IntentFilter per TAG_DISCOVERED<activity android:name=".NFCReaderActivity"> <intent-filter> <action android:name="android.nfc.action.TAG_DISCOVERED"/> </intent-filter></activity> Emanuele Di Saverio - Stefano Sanna 29 emanuele.disaverio | gerdavax AT gmail.com
  30. 30. Foreground Dispatching • Un’Activity in esecuzione può chiedere al di avere prelazione sulle notifiche NFC://...mNfcAdapter = NfcAdapter.getDefaultAdapter(mContext);//... Con questi parametri è possibile specificare l’action da ricevere e il filtro per tecnologie e metadati. Non specificare@Override nulla equivale ad un’action TAG_DISCOVEREDpublic 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);} Emanuele Di Saverio - Stefano Sanna 30 emanuele.disaverio | gerdavax AT gmail.com
  31. 31. È ora di leggere un tag!@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 Sanna 31 emanuele.disaverio | gerdavax AT gmail.com
  32. 32. Lettura di un NDEF Message// [...]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(); Emanuele Di Saverio - Stefano Sanna 32 emanuele.disaverio | gerdavax AT gmail.com
  33. 33. Decodifica del payload RTD_TEXT • Il primo byte del payload contiene informazioni sull’encoding (UTF-8 o UTF-16) e sulla lunghezza del codice IANA della lingua del testo:// [...]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 Sanna 33 emanuele.disaverio | gerdavax AT gmail.com
  34. 34. 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 BROWSER Emanuele Di Saverio - Stefano Sanna 34 emanuele.disaverio | gerdavax AT gmail.com
  35. 35. Dagli smartphone agli oggetti(extra)
  36. 36. 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 Emanuele Di Saverio - Stefano Sanna 36 emanuele.disaverio | gerdavax AT gmail.com
  37. 37. Arduino MEGA + MFRC522 Emanuele Di Saverio - Stefano Sanna 37 emanuele.disaverio | gerdavax AT gmail.com
  38. 38. Lettura dell’ID di un tag MIFAREint count = 0; Imposta il chip RFID in modalitàvoid setup() { lettura automatica dell’ID del tag 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(":"); } } Emanuele Di Saverio - Stefano Sanna 38} emanuele.disaverio | gerdavax AT gmail.com
  39. 39. RISORSE
  40. 40. Alcuni dei terminali NFC venduti in Italia Nokia 603 (JME) Nokia 6131 NFC (JME) Nokia N9 (MeeGo) Samsung Galaxy S II NFC Sony Xperia S (Android) Samsung Samsung GalaxyBlackBerry 9380 BlackBerry 9900 Samsung S5230N (JME) Nexus S (Android) Nexus (Android) Emanuele Di Saverio - Stefano Sanna 40 emanuele.disaverio | gerdavax AT gmail.com
  41. 41. Dove acquistare tag e lettori• SmartCardFocus – http://www.smartcardfocus.com• ebay! Emanuele Di Saverio - Stefano Sanna 41 emanuele.disaverio | gerdavax AT gmail.com
  42. 42. Bibliografia• Near Field Communication: from theory to practice Vedat Coskun, Kerem Ok, Busra Ozdenizci Wiley• Android Programmazione Avanzata Emanuele Di Saverio, Stefano Sanna Edizioni FAG Milano Emanuele Di Saverio - Stefano Sanna 42 emanuele.disaverio | gerdavax AT gmail.com
  43. 43. Contatti• Emanuele Di Saverio – emanuele.disaverio AT gmail DOT com – @hazam• Stefano Sanna – gerdavax AT gmail DOT com – @gerdavax – http://www.gerdavax.it Emanuele Di Saverio - Stefano Sanna 43 emanuele.disaverio | gerdavax AT gmail.com
  44. 44. GRAZIE :-)
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×