• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Introduzione ad NFC
 

Introduzione ad NFC

on

  • 2,767 views

Guest seminar del corso "Applicazioni per dispositivi mobili" tenuto presso l'Università degli Studi dell'Aquila. Giugno 2012. Il seminario introduce i concetti fondamentali della tecnologia NFC e ...

Guest seminar del corso "Applicazioni per dispositivi mobili" tenuto presso l'Università degli Studi dell'Aquila. Giugno 2012. Il seminario introduce i concetti fondamentali della tecnologia NFC e mostra l'utilizzo della modalità reader/writer in ambiente Android.

Statistics

Views

Total Views
2,767
Views on SlideShare
2,765
Embed Views
2

Actions

Likes
4
Downloads
112
Comments
2

2 Embeds 2

http://fabiolalli.com 1
http://nfcmarketing.it 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel

12 of 2 previous next

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Introduzione ad NFC Introduzione ad NFC Presentation Transcript

    • Introduzione ad NFC Stefano Sanna Guest seminar del corso “Applicazioni per dispositivi mobili” L’Aquila, 11 Giugno 2012
    • Agenda• Presentazioni :-)• Near Field Communication• Breve panoramica sull’application model di Android• NFC API di Android• Bibliografia• Contatti Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
    • Speaker• Head of Android Lab @ Open Reply• Mobile app developer (10+ years) - First app: 1999 on PSION 5MX!• Technical Writer - Android Programmazione Avanzata (con E. Di Saverio; Ed. FAG) - Java Micro Edition (Hoepli)• Pizza & Pasta lover :-) Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
    • Near Field Communication• È una tecnologia a radiofrequenza (13.56MHz) per la comunicazione a corto raggio tra oggetti di tipo - attivo: smartphone con chip ed API 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 Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
    • NFC vs Bluetooth• Bluetooth - consente la comunicazione a corto raggio (pochi metri) ma ha una tempo di setup medio lungo (specie con pairing) - permette il trasferimento dati ad alta velocità in modalità streaming• NFC - NFC non richiede setup o pairing: la comunicazione è pressoché istantanea - è orientato al trasferimento dati “one-shot”: in caso di necessità di stream continuo si può passare ad un altro trasporto (Bluetooth o WiFi)• NFC può essere utilizzato per automatizzare il pairing di due dispositivi Bluetooth Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
    • NFC vs QR Code• QR Code - sono praticamente “a costo zero” perché utilizzano tecnologie esistenti e diffusissime (stampa per la produzione e fotocamera dello smartphone per la lettura) - l’utente “deve prendere la mira” verso l’oggetto da inquadrare - non offrono alcuna protezione (crittografia asimmetrica) essendo totalmente passivi - sono read-only• NFC - richiede una tecnologia nuova (soprattutto sugli smartphone) - la comunicazione non richiede setup particolare (touch&go) - i tag possono avere funzionalità crittografiche - i tag possono essere letti e scritti Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
    • Principio di funzionamento• Il componente attivo emette un campo 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 http://www.scienceprog.com/how-does-rfid-tag-technology-works/ Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
    • Qualche numero• 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 più diffusi dotati di funzionalità NFC (hardware + software) Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
    • Modalità operative Tag by TI r/w riter e read peer-to-peer Samsung Nexus S card emu latio nSamsung Galaxy Nexus ACR122U USB Reader Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
    • Modalità operative• Reader/writer - lo smartphone legge e scrive un tag passivo, che può svolgere funzioni di semplice identificazione, memorizzazione di dati o protezione di contenuti attraverso crittografia• Peer-to-peer - due smartphone comunicano tra loro scambiando piccole quantità di dati: una URL, un biglietto da visita, la configurazione Bluetooth• Card emulation - lo smartphone è riconosciuto da un lettore esterno (collegato a PC o un altro smartphone in modalità reader/writer) come un tag dotato di identificativo, memoria e funzioni crittografiche. In modalità Card Emulation lo smartphone può svolgere funzioni di carta di credito o di “mobile wallet” Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
    • Modalità operative Java Micro Windows BlackBerry Android Symbian bada iOS Edition Phonereader writer JSR 257 OS7 2.3.x iOS 6? WP 8? P2P API proprietarie OS7 4.0.x iOS 6? WP 8? card JSR 257 OS7 API privata iOS 6? WP 8? emulation JSR 177 Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
    • Scenari applicativi • Pagamento • Sicurezza e controllo accessi • Ticketing • Tracking di merci • Gaming • Social • MedicalGoogle Wallet sample image Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
    • Alcuni tipi di tag Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
    • Si fa presto a dire tag...TecnologieTipi NFC Prodotti http://www.androidavanzato.it Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
    • 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 Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
    • Android API
    • Android application model• Activity - rappresenta(va) una unità di interazione utente di un’app• Fragment - introdotti in Android 3, rappresentano unità atomiche di interazione con l’utente. Più Fragment costituiscono la vista di una Activity• Service - sono moduli applicativi indipendenti privi di UI. Sono eseguiti in background e possono servire più applicazioni• Broadcast Receiver - Ricevono messaggi broadcast inviati dal sistema o da altre app• Content Provider - Forniscono accesso condiviso a sorgenti di dati Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
    • Intent• Sono rappresentazioni astratte di: - azioni che l’utente vuole intraprendere (visualizzare una foto o inviare un’email) - funzionalità che una applicazione vuol avviare (una Activity, un Service...) - eventi propagati nel sistema operativo (è arrivato un SMS, lo stato della batteria è cambiato)• Sono costituiti da ACTION da compiere su DATA inviati come attributi Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
    • Intent• In base alla Action e ai dati associati all’Intent, il sistema decide qual è il componente più adatto a svolgere l’azione richiestaIntent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.repubblica.it"));startActivity(intent); Apre il browserIntent intent = new Intent(Intent.ACTION_SEND);intent.setType("text/plain");intent.putExtra(Intent.EXTRA_TEXT, "http://www.repubblica.it");startActivity(intent); Consente di scegliere con quale app “inviare” il testo Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
    • NFC su Android• Prima API introdotta sulla API 2.3, Nexus S - Reader/writer Chip NXP PN65N all’interno di un Nexus S - “prototipo” di supporto P2P• Consolidamento API in Ice Cream Sandwich - NFC Push Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
    • Android NFC API• L’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 Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
    • android.nfc (reader/writer)• NfcManager - servizio di sistema che fornisce un riferimento allNfcAdapter• NfcAdapter - modella il modulo NFC del terminale• NdefMessage - rappresenta lunità elementare di comunicazione tra dispositivi NFC• NdefRecord - linformazione atomica contenuta in un NdefMessage, costituita da payload e metadati• Tag - rappresentazione generica del tag letto dal dispositivo Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
    • 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 Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
    • 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" /> Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
    • 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) Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
    • 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) Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
    • 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 Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
    • Logica di dispatching dell’Intent http://developer.android.com/guide/topics/nfc/nfc.html Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
    • 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 Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
    • 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> Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
    • IntentFilter per TECH_DISCOVERED<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 Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
    • Elenco tecnologie per TECH_DISCOVERED <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <tech-list> AND <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> ANDOR <tech>android.nfc.tech.NfcA</tech> <tech>android.nfc.tech.NdefFormatable</tech> </tech-list> </resources> 32 <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> Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
    • IntentFilter per TAG_DISCOVERED<activity android:name=".NFCReaderActivity"> <intent-filter> <action android:name="android.nfc.action.TAG_DISCOVERED"/> </intent-filter></activity> Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
    • Foreground Dispatching • Un’Activity in esecuzione può chiedere al sistema di avere prelazione sulle notifiche NFC://...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 registrarsi per un’Action Guest seminar “Introduzione ad NFC” Corso “Applicazioni per dispositivi mobili”- TAG_DISCOVERED
    • È 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 }} Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
    • 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(); Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
    • 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");} Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
    • Scrittura di un tag con TNF_ABSOLUTE_URI// [...]Bundle bundle = intent.getExtras();Tag tag = bundle.getParcelable(NfcAdapter.EXTRA_TAG);Ndef ndefTag = Ndef.get(tag);NdefRecord record = new NdefRecord(NdefRecord.TNF_ABSOLUTE_URI , "http://www.repubblica.it".getBytes(Charset.forName("US-ASCII")), new byte[0], new byte[0]);NdefMessage message = new NdefMessage(new NdefRecord[] { record });ndefTag.connect();ndefTag.writeNdefMessage(message);ndefTag.close(); Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
    • Application Record e Android• Android 4 introduce due interessanti novità in ambito NFC: - Android Application Record (AAR): 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) [DEMO: APPTAG] - Android Beam: implementa la modalità NFC Push che permette lo scambio di messaggi NDEF tra due terminali. È supportata nativamente da alcune app di sistema e da un numero crescente di app di terze parti [DEMO BROWSER] Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
    • Dagli smartphone agli oggetti
    • 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 Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
    • Arduino MEGA + MFRC522 Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
    • Lettura dell’ID di un tag MIFAREint count = 0; Imposta il chip RFID in modalità lettura automatica dell’ID del tagvoid 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(":"); } }} Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
    • Risorse
    • XLa tecnologia si diffonde... Questa slide è già obsoleta! Tre nuovi importanti terminali sono ora disponibili sul mercato italiano!!! Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
    • Alcuni dei terminali NFC venduti in Italia Nokia 603 (Symbian) Sony Samsung Galaxy Xperia S Nokia N9 (MeeGo) Samsung S III (Android) (Android) Galaxy NexusNokia 6131 Samsung (Android)NFC (JME) Galaxy S II NFC Samsung S5230N (JME) Samsung GalaxyBlackBerry 9380 BlackBerry 9900 HTC One X Mini 2 (Android) Samsung Nexus S (Android) Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
    • Dove acquistare tag e lettori• SmartCardFocus - http://www.smartcardfocus.com• ebay! Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
    • Bibliografia• Near Field Communication: from theory to practice - Vedat Coskun, Kerem Ok, Busra Ozdenizci - Wiley Publishing 2011• Android Developers - http://developer.android.com• Android Programmazione Avanzata - E. Di Saverio, S. Sanna - Edizioni FAG Milano, 2012 Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
    • Contatti• gerdavax AT gmail DOT com• @gerdavax• http://www.gerdavax.it Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
    • Licenza• Questo seminario è un adattamento del talk “NFC: tecnologia e applicazioni” di Emanuele Di Saverio e Stefano Sanna presentato al Codemotion 2012 a Roma• Alcune immagini sono tratte dal libro “Android Programmazione Avanzata”; altre immagini sono di proprietà dei rispettivi titolari• I contenuti originali di questa presentazione sono distribuiti su licenza Creative Commons - Attribution - NonCommercial - ShareAlike - http://creativecommons.org/licenses/by-nc-sa/3.0/ Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
    • Grazie