NFC: tecnologia e applicazioni
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
No Downloads

Views

Total Views
3,583
On Slideshare
3,234
From Embeds
349
Number of Embeds
7

Actions

Shares
Downloads
82
Comments
2
Likes
3

Embeds 349

http://nfcmarketing.it 330
http://www.nfcmarketing.it 8
https://twitter.com 4
https://twimg0-a.akamaihd.net 3
https://si0.twimg.com 2
http://translate.googleusercontent.com 1
http://www.google.it 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. NFC: tecnologia e applicazioniStefano Sannagerdavax AT gmail DOT comEmanuele Di Saverioemanuele.disaverio AT gmail DOT com
  • 2. DEMO
  • 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. 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. NFCNear Field Communication
  • 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. 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. 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. 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. 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. 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. Alcuni tipi di tag Emanuele Di Saverio - Stefano Sanna 12 emanuele.disaverio | gerdavax AT gmail.com
  • 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. 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. API Android
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. È 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. 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. 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. 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. Dagli smartphone agli oggetti(extra)
  • 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. Arduino MEGA + MFRC522 Emanuele Di Saverio - Stefano Sanna 37 emanuele.disaverio | gerdavax AT gmail.com
  • 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. RISORSE
  • 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. Dove acquistare tag e lettori• SmartCardFocus – http://www.smartcardfocus.com• ebay! Emanuele Di Saverio - Stefano Sanna 41 emanuele.disaverio | gerdavax AT gmail.com
  • 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. 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. GRAZIE :-)