SlideShare uma empresa Scribd logo
1 de 51
Baixar para ler offline
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
                                             n
Samsung 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                                                                                                  Phone




reader 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
                               • Medical
Google 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...
Tecnologie




Tipi 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 richiesta
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://
www.repubblica.it"));

startActivity(intent);                                                                          Apre il browser




Intent 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 all'NfcAdapter
• NfcAdapter
 - modella il modulo NFC del terminale
• NdefMessage
 - rappresenta l'unità elementare di comunicazione tra dispositivi NFC
• NdefRecord
 - l'informazione 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 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


                                        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
 - È 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)
                                         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 l'Activity più adatta
  a gestirlo; se più di di una è
  candidata, viene mostrata la
  finestra dell'Activity 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>




                                                                                                             AND
OR




             <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);
//...

@Override
public 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!

@Override
public 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 MIFARE
int count = 0;                                                         Imposta il chip RFID in modalità
                                                                       lettura automatica dell’ID del tag
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(":");
        }
    }

}


                                              Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
Risorse
X
La 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 Nexus
Nokia 6131           Samsung          (Android)
NFC (JME)         Galaxy S II NFC




                                                                                                               Samsung S5230N
                                                                                                                   (JME)

                                                                                   Samsung Galaxy
BlackBerry 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

Mais conteúdo relacionado

Destaque

Bassilichi @ Smart City Exhibition 2013
Bassilichi @ Smart City Exhibition 2013Bassilichi @ Smart City Exhibition 2013
Bassilichi @ Smart City Exhibition 2013Bassilichi S.p.A.
 
Smau Roma 2011 Carlo Maria Medaglia
Smau Roma 2011 Carlo Maria MedagliaSmau Roma 2011 Carlo Maria Medaglia
Smau Roma 2011 Carlo Maria MedagliaSMAU
 
Mobile payments definizioni sicurezza e contesto normativo dic2010
Mobile payments definizioni sicurezza e contesto normativo dic2010Mobile payments definizioni sicurezza e contesto normativo dic2010
Mobile payments definizioni sicurezza e contesto normativo dic2010CATTID "Sapienza"
 
Le radici artistiche della visualizzazione dei big data. Big data visualizati...
Le radici artistiche della visualizzazione dei big data. Big data visualizati...Le radici artistiche della visualizzazione dei big data. Big data visualizati...
Le radici artistiche della visualizzazione dei big data. Big data visualizati...Valerio Eletti
 
How much is the m pos worth
How much is the m pos worthHow much is the m pos worth
How much is the m pos worthWallet-E srl
 
La sicurezza delle applicazioni di Mobile Payment_Antonella Marino
La sicurezza delle applicazioni di Mobile Payment_Antonella MarinoLa sicurezza delle applicazioni di Mobile Payment_Antonella Marino
La sicurezza delle applicazioni di Mobile Payment_Antonella MarinoCATTID "Sapienza"
 
Cmplx school spoleto_ve_reti1su3_22ago2016
Cmplx school spoleto_ve_reti1su3_22ago2016Cmplx school spoleto_ve_reti1su3_22ago2016
Cmplx school spoleto_ve_reti1su3_22ago2016Valerio Eletti
 
La Tecnologia RFID NFC per la tracciabilità e l'anticontraffazione nell'abbig...
La Tecnologia RFID NFC per la tracciabilità e l'anticontraffazione nell'abbig...La Tecnologia RFID NFC per la tracciabilità e l'anticontraffazione nell'abbig...
La Tecnologia RFID NFC per la tracciabilità e l'anticontraffazione nell'abbig...Softintime Srl
 
4° CMWL - Complexity Management Winter Lab 2017 - Systems and Design Thinking
4° CMWL - Complexity Management Winter Lab 2017 - Systems and Design Thinking4° CMWL - Complexity Management Winter Lab 2017 - Systems and Design Thinking
4° CMWL - Complexity Management Winter Lab 2017 - Systems and Design ThinkingComplexity Institute
 
La singolarità è vicina - Al Complexity Literacy Meeting il libro presentato ...
La singolarità è vicina - Al Complexity Literacy Meeting il libro presentato ...La singolarità è vicina - Al Complexity Literacy Meeting il libro presentato ...
La singolarità è vicina - Al Complexity Literacy Meeting il libro presentato ...Complexity Institute
 
Corso la gestione del tempo (time management)
Corso la gestione del tempo (time management)Corso la gestione del tempo (time management)
Corso la gestione del tempo (time management)Olympos Group srl
 
Nuovi scenari sociali, reti digitali e accumulo di big data. Un approccio sis...
Nuovi scenari sociali, reti digitali e accumulo di big data. Un approccio sis...Nuovi scenari sociali, reti digitali e accumulo di big data. Un approccio sis...
Nuovi scenari sociali, reti digitali e accumulo di big data. Un approccio sis...Valerio Eletti
 

Destaque (12)

Bassilichi @ Smart City Exhibition 2013
Bassilichi @ Smart City Exhibition 2013Bassilichi @ Smart City Exhibition 2013
Bassilichi @ Smart City Exhibition 2013
 
Smau Roma 2011 Carlo Maria Medaglia
Smau Roma 2011 Carlo Maria MedagliaSmau Roma 2011 Carlo Maria Medaglia
Smau Roma 2011 Carlo Maria Medaglia
 
Mobile payments definizioni sicurezza e contesto normativo dic2010
Mobile payments definizioni sicurezza e contesto normativo dic2010Mobile payments definizioni sicurezza e contesto normativo dic2010
Mobile payments definizioni sicurezza e contesto normativo dic2010
 
Le radici artistiche della visualizzazione dei big data. Big data visualizati...
Le radici artistiche della visualizzazione dei big data. Big data visualizati...Le radici artistiche della visualizzazione dei big data. Big data visualizati...
Le radici artistiche della visualizzazione dei big data. Big data visualizati...
 
How much is the m pos worth
How much is the m pos worthHow much is the m pos worth
How much is the m pos worth
 
La sicurezza delle applicazioni di Mobile Payment_Antonella Marino
La sicurezza delle applicazioni di Mobile Payment_Antonella MarinoLa sicurezza delle applicazioni di Mobile Payment_Antonella Marino
La sicurezza delle applicazioni di Mobile Payment_Antonella Marino
 
Cmplx school spoleto_ve_reti1su3_22ago2016
Cmplx school spoleto_ve_reti1su3_22ago2016Cmplx school spoleto_ve_reti1su3_22ago2016
Cmplx school spoleto_ve_reti1su3_22ago2016
 
La Tecnologia RFID NFC per la tracciabilità e l'anticontraffazione nell'abbig...
La Tecnologia RFID NFC per la tracciabilità e l'anticontraffazione nell'abbig...La Tecnologia RFID NFC per la tracciabilità e l'anticontraffazione nell'abbig...
La Tecnologia RFID NFC per la tracciabilità e l'anticontraffazione nell'abbig...
 
4° CMWL - Complexity Management Winter Lab 2017 - Systems and Design Thinking
4° CMWL - Complexity Management Winter Lab 2017 - Systems and Design Thinking4° CMWL - Complexity Management Winter Lab 2017 - Systems and Design Thinking
4° CMWL - Complexity Management Winter Lab 2017 - Systems and Design Thinking
 
La singolarità è vicina - Al Complexity Literacy Meeting il libro presentato ...
La singolarità è vicina - Al Complexity Literacy Meeting il libro presentato ...La singolarità è vicina - Al Complexity Literacy Meeting il libro presentato ...
La singolarità è vicina - Al Complexity Literacy Meeting il libro presentato ...
 
Corso la gestione del tempo (time management)
Corso la gestione del tempo (time management)Corso la gestione del tempo (time management)
Corso la gestione del tempo (time management)
 
Nuovi scenari sociali, reti digitali e accumulo di big data. Un approccio sis...
Nuovi scenari sociali, reti digitali e accumulo di big data. Un approccio sis...Nuovi scenari sociali, reti digitali e accumulo di big data. Un approccio sis...
Nuovi scenari sociali, reti digitali e accumulo di big data. Un approccio sis...
 

Semelhante a Introduzione ad NFC

Android - Programmazione Avanzata
Android -  Programmazione AvanzataAndroid -  Programmazione Avanzata
Android - Programmazione AvanzataStefano Sanna
 
Mobile+network intervento polimi
Mobile+network intervento polimiMobile+network intervento polimi
Mobile+network intervento polimiGiovanni Rota
 
Mobile security & privacy - Paranoia in movimento
Mobile security & privacy - Paranoia in movimentoMobile security & privacy - Paranoia in movimento
Mobile security & privacy - Paranoia in movimentoAlfredo Morresi
 
Kinect + .NET = NUI : Interfacce naturali facili con Kinect!!!
Kinect + .NET = NUI : Interfacce naturali facili con Kinect!!!Kinect + .NET = NUI : Interfacce naturali facili con Kinect!!!
Kinect + .NET = NUI : Interfacce naturali facili con Kinect!!!Massimo Bonanni
 
Android - ishan fernando - android nfc presentation
Android - ishan fernando - android nfc presentationAndroid - ishan fernando - android nfc presentation
Android - ishan fernando - android nfc presentationWhymca
 
Whymca nfc presentation
Whymca nfc presentationWhymca nfc presentation
Whymca nfc presentationMyti S.r.l.
 
Whymca nfc presentation
Whymca nfc presentationWhymca nfc presentation
Whymca nfc presentationMyti S.r.l.
 
Mobile payments monetica febbraio2012
Mobile payments monetica febbraio2012Mobile payments monetica febbraio2012
Mobile payments monetica febbraio2012CATTID "Sapienza"
 
NFC (Near Field Communication - Comunicazione di prossimità)
NFC (Near Field Communication - Comunicazione di prossimità)NFC (Near Field Communication - Comunicazione di prossimità)
NFC (Near Field Communication - Comunicazione di prossimità)Luca Santoro
 
v2 Presentazione Lelli
v2 Presentazione Lelliv2 Presentazione Lelli
v2 Presentazione LelliMatteo Lelli
 
WEBdeBS NFC Presentation
WEBdeBS NFC PresentationWEBdeBS NFC Presentation
WEBdeBS NFC PresentationMyti S.r.l.
 
Bluetooth low energy & Lumia Sensor Core per Windows Phone 8.1
Bluetooth low energy & Lumia Sensor Core per Windows Phone 8.1Bluetooth low energy & Lumia Sensor Core per Windows Phone 8.1
Bluetooth low energy & Lumia Sensor Core per Windows Phone 8.1Massimo Bonanni
 
Funzionalità e portabilità dei sistemi operativi per piattaforme mobili
Funzionalità e portabilità dei sistemi operativi per piattaforme mobiliFunzionalità e portabilità dei sistemi operativi per piattaforme mobili
Funzionalità e portabilità dei sistemi operativi per piattaforme mobiliNicola Losito
 
Asynchronous Java ME and XML
Asynchronous Java ME and XMLAsynchronous Java ME and XML
Asynchronous Java ME and XMLAndrea Castello
 
Lezione 11 del 13 marzo 2012 - L'ECOSISTEMA DELLE APPS
Lezione 11 del 13 marzo 2012 - L'ECOSISTEMA DELLE APPSLezione 11 del 13 marzo 2012 - L'ECOSISTEMA DELLE APPS
Lezione 11 del 13 marzo 2012 - L'ECOSISTEMA DELLE APPSGianluigi Cogo
 
Touchatag un&#039;applicazione di internet delle cose 2010-11-10
Touchatag  un&#039;applicazione di internet delle cose   2010-11-10Touchatag  un&#039;applicazione di internet delle cose   2010-11-10
Touchatag un&#039;applicazione di internet delle cose 2010-11-10Ionela
 

Semelhante a Introduzione ad NFC (20)

Micro Applicazioni Mobile
Micro Applicazioni MobileMicro Applicazioni Mobile
Micro Applicazioni Mobile
 
Android - Programmazione Avanzata
Android -  Programmazione AvanzataAndroid -  Programmazione Avanzata
Android - Programmazione Avanzata
 
Slide
SlideSlide
Slide
 
Mobile+network intervento polimi
Mobile+network intervento polimiMobile+network intervento polimi
Mobile+network intervento polimi
 
City life nfc
City life nfcCity life nfc
City life nfc
 
City Life NFC
City Life NFCCity Life NFC
City Life NFC
 
Mobile security & privacy - Paranoia in movimento
Mobile security & privacy - Paranoia in movimentoMobile security & privacy - Paranoia in movimento
Mobile security & privacy - Paranoia in movimento
 
Kinect + .NET = NUI : Interfacce naturali facili con Kinect!!!
Kinect + .NET = NUI : Interfacce naturali facili con Kinect!!!Kinect + .NET = NUI : Interfacce naturali facili con Kinect!!!
Kinect + .NET = NUI : Interfacce naturali facili con Kinect!!!
 
Android - ishan fernando - android nfc presentation
Android - ishan fernando - android nfc presentationAndroid - ishan fernando - android nfc presentation
Android - ishan fernando - android nfc presentation
 
Whymca nfc presentation
Whymca nfc presentationWhymca nfc presentation
Whymca nfc presentation
 
Whymca nfc presentation
Whymca nfc presentationWhymca nfc presentation
Whymca nfc presentation
 
Mobile payments monetica febbraio2012
Mobile payments monetica febbraio2012Mobile payments monetica febbraio2012
Mobile payments monetica febbraio2012
 
NFC (Near Field Communication - Comunicazione di prossimità)
NFC (Near Field Communication - Comunicazione di prossimità)NFC (Near Field Communication - Comunicazione di prossimità)
NFC (Near Field Communication - Comunicazione di prossimità)
 
v2 Presentazione Lelli
v2 Presentazione Lelliv2 Presentazione Lelli
v2 Presentazione Lelli
 
WEBdeBS NFC Presentation
WEBdeBS NFC PresentationWEBdeBS NFC Presentation
WEBdeBS NFC Presentation
 
Bluetooth low energy & Lumia Sensor Core per Windows Phone 8.1
Bluetooth low energy & Lumia Sensor Core per Windows Phone 8.1Bluetooth low energy & Lumia Sensor Core per Windows Phone 8.1
Bluetooth low energy & Lumia Sensor Core per Windows Phone 8.1
 
Funzionalità e portabilità dei sistemi operativi per piattaforme mobili
Funzionalità e portabilità dei sistemi operativi per piattaforme mobiliFunzionalità e portabilità dei sistemi operativi per piattaforme mobili
Funzionalità e portabilità dei sistemi operativi per piattaforme mobili
 
Asynchronous Java ME and XML
Asynchronous Java ME and XMLAsynchronous Java ME and XML
Asynchronous Java ME and XML
 
Lezione 11 del 13 marzo 2012 - L'ECOSISTEMA DELLE APPS
Lezione 11 del 13 marzo 2012 - L'ECOSISTEMA DELLE APPSLezione 11 del 13 marzo 2012 - L'ECOSISTEMA DELLE APPS
Lezione 11 del 13 marzo 2012 - L'ECOSISTEMA DELLE APPS
 
Touchatag un&#039;applicazione di internet delle cose 2010-11-10
Touchatag  un&#039;applicazione di internet delle cose   2010-11-10Touchatag  un&#039;applicazione di internet delle cose   2010-11-10
Touchatag un&#039;applicazione di internet delle cose 2010-11-10
 

Mais de Stefano Sanna

Mobile Security su Android - LinuxDay 2018
Mobile Security su Android - LinuxDay 2018Mobile Security su Android - LinuxDay 2018
Mobile Security su Android - LinuxDay 2018Stefano Sanna
 
Android Things, from mobile apps to physical world
Android Things, from mobile apps to physical worldAndroid Things, from mobile apps to physical world
Android Things, from mobile apps to physical worldStefano Sanna
 
Android Things Linux Day 2017
Android Things Linux Day 2017 Android Things Linux Day 2017
Android Things Linux Day 2017 Stefano Sanna
 
Android Things in action
Android Things in actionAndroid Things in action
Android Things in actionStefano Sanna
 
Introduzione alla tecnologia iBeacon
Introduzione alla tecnologia iBeaconIntroduzione alla tecnologia iBeacon
Introduzione alla tecnologia iBeaconStefano Sanna
 
Augmented Smartphone
Augmented SmartphoneAugmented Smartphone
Augmented SmartphoneStefano Sanna
 
Bluetooth Low Energy
Bluetooth Low EnergyBluetooth Low Energy
Bluetooth Low EnergyStefano Sanna
 
Google TV: la nuova frontiera Android
Google TV: la nuova frontiera AndroidGoogle TV: la nuova frontiera Android
Google TV: la nuova frontiera AndroidStefano Sanna
 
Enlarge your screen: introducing the Google TV
Enlarge your screen: introducing the Google TVEnlarge your screen: introducing the Google TV
Enlarge your screen: introducing the Google TVStefano Sanna
 
Android & Bluetooth: hacking e applicazioni
Android & Bluetooth: hacking e applicazioniAndroid & Bluetooth: hacking e applicazioni
Android & Bluetooth: hacking e applicazioniStefano Sanna
 
Application Store: opportunita' e trappole
Application Store: opportunita' e trappoleApplication Store: opportunita' e trappole
Application Store: opportunita' e trappoleStefano Sanna
 
Android Bluetooth Hacking
Android Bluetooth HackingAndroid Bluetooth Hacking
Android Bluetooth HackingStefano Sanna
 
Free Software e Open Hardware
Free Software e Open HardwareFree Software e Open Hardware
Free Software e Open HardwareStefano Sanna
 
Playing with Mobile 2.0
Playing with Mobile 2.0Playing with Mobile 2.0
Playing with Mobile 2.0Stefano Sanna
 
Comunicazione Pervasiva
Comunicazione PervasivaComunicazione Pervasiva
Comunicazione PervasivaStefano Sanna
 
Introduzione alla tecnologia Sun SPOT
Introduzione alla tecnologia Sun SPOTIntroduzione alla tecnologia Sun SPOT
Introduzione alla tecnologia Sun SPOTStefano Sanna
 
Sensoristica Avanzata per Dispositivi Mobili
Sensoristica Avanzata per Dispositivi MobiliSensoristica Avanzata per Dispositivi Mobili
Sensoristica Avanzata per Dispositivi MobiliStefano Sanna
 
Introducing the Sun SPOTs
Introducing the Sun SPOTsIntroducing the Sun SPOTs
Introducing the Sun SPOTsStefano Sanna
 

Mais de Stefano Sanna (20)

Mobile Security su Android - LinuxDay 2018
Mobile Security su Android - LinuxDay 2018Mobile Security su Android - LinuxDay 2018
Mobile Security su Android - LinuxDay 2018
 
Android Things, from mobile apps to physical world
Android Things, from mobile apps to physical worldAndroid Things, from mobile apps to physical world
Android Things, from mobile apps to physical world
 
Android Things Linux Day 2017
Android Things Linux Day 2017 Android Things Linux Day 2017
Android Things Linux Day 2017
 
Android Things in action
Android Things in actionAndroid Things in action
Android Things in action
 
Introduzione alla tecnologia iBeacon
Introduzione alla tecnologia iBeaconIntroduzione alla tecnologia iBeacon
Introduzione alla tecnologia iBeacon
 
Augmented Smartphone
Augmented SmartphoneAugmented Smartphone
Augmented Smartphone
 
Bluetooth Low Energy
Bluetooth Low EnergyBluetooth Low Energy
Bluetooth Low Energy
 
Google TV: la nuova frontiera Android
Google TV: la nuova frontiera AndroidGoogle TV: la nuova frontiera Android
Google TV: la nuova frontiera Android
 
Enlarge your screen: introducing the Google TV
Enlarge your screen: introducing the Google TVEnlarge your screen: introducing the Google TV
Enlarge your screen: introducing the Google TV
 
Android & Bluetooth: hacking e applicazioni
Android & Bluetooth: hacking e applicazioniAndroid & Bluetooth: hacking e applicazioni
Android & Bluetooth: hacking e applicazioni
 
Application Store: opportunita' e trappole
Application Store: opportunita' e trappoleApplication Store: opportunita' e trappole
Application Store: opportunita' e trappole
 
Android Bluetooth Hacking
Android Bluetooth HackingAndroid Bluetooth Hacking
Android Bluetooth Hacking
 
Android
AndroidAndroid
Android
 
Free Software e Open Hardware
Free Software e Open HardwareFree Software e Open Hardware
Free Software e Open Hardware
 
Playing with Mobile 2.0
Playing with Mobile 2.0Playing with Mobile 2.0
Playing with Mobile 2.0
 
Sun SPOT
Sun SPOTSun SPOT
Sun SPOT
 
Comunicazione Pervasiva
Comunicazione PervasivaComunicazione Pervasiva
Comunicazione Pervasiva
 
Introduzione alla tecnologia Sun SPOT
Introduzione alla tecnologia Sun SPOTIntroduzione alla tecnologia Sun SPOT
Introduzione alla tecnologia Sun SPOT
 
Sensoristica Avanzata per Dispositivi Mobili
Sensoristica Avanzata per Dispositivi MobiliSensoristica Avanzata per Dispositivi Mobili
Sensoristica Avanzata per Dispositivi Mobili
 
Introducing the Sun SPOTs
Introducing the Sun SPOTsIntroducing the Sun SPOTs
Introducing the Sun SPOTs
 

Introduzione ad NFC

  • 1. Introduzione ad NFC Stefano Sanna Guest seminar del corso “Applicazioni per dispositivi mobili” L’Aquila, 11 Giugno 2012
  • 2. 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”
  • 3. 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”
  • 4. 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”
  • 5. 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”
  • 6. 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”
  • 7. 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”
  • 8. 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”
  • 9. Modalità operative Tag by TI r/w riter e read peer-to-peer Samsung Nexus S card emu latio n Samsung Galaxy Nexus ACR122U USB Reader Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
  • 10. 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”
  • 11. Modalità operative Java Micro Windows BlackBerry Android Symbian bada iOS Edition Phone reader 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”
  • 12. Scenari applicativi • Pagamento • Sicurezza e controllo accessi • Ticketing • Tracking di merci • Gaming • Social • Medical Google Wallet sample image Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
  • 13. Alcuni tipi di tag Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
  • 14. Si fa presto a dire tag... Tecnologie Tipi NFC Prodotti http://www.androidavanzato.it Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
  • 15. 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”
  • 17. 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”
  • 18. 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”
  • 19. Intent • In base alla Action e ai dati associati all’Intent, il sistema decide qual è il componente più adatto a svolgere l’azione richiesta Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http:// www.repubblica.it")); startActivity(intent); Apre il browser Intent 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”
  • 20. 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”
  • 21. 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”
  • 22. android.nfc (reader/writer) • NfcManager - servizio di sistema che fornisce un riferimento all'NfcAdapter • NfcAdapter - modella il modulo NFC del terminale • NdefMessage - rappresenta l'unità elementare di comunicazione tra dispositivi NFC • NdefRecord - l'informazione 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”
  • 23. 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 Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
  • 24. 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”
  • 25. 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) Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
  • 26. 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”
  • 27. 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”
  • 28. Logica di dispatching dell’Intent http://developer.android.com/guide/topics/nfc/nfc.html Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
  • 29. 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 l'Activity più adatta a gestirlo; se più di di una è candidata, viene mostrata la finestra dell'Activity Chooser Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
  • 30. 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”
  • 31. 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”
  • 32. 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> AND OR <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”
  • 33. 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”
  • 34. Foreground Dispatching • Un’Activity in esecuzione può chiedere al sistema di avere prelazione sulle notifiche NFC: //... mNfcAdapter = NfcAdapter.getDefaultAdapter(mContext); //... @Override public 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
  • 35. È ora di leggere un tag! @Override public 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”
  • 36. 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”
  • 37. 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”
  • 38. 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”
  • 39. 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”
  • 41. 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”
  • 42. Arduino MEGA + MFRC522 Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
  • 43. Lettura dell’ID di un tag MIFARE int count = 0; Imposta il chip RFID in modalità lettura automatica dell’ID del tag 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(":"); } } } Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
  • 45. X La 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”
  • 46. Alcuni dei terminali NFC venduti in Italia Nokia 603 (Symbian) Sony Samsung Galaxy Xperia S Nokia N9 (MeeGo) Samsung S III (Android) (Android) Galaxy Nexus Nokia 6131 Samsung (Android) NFC (JME) Galaxy S II NFC Samsung S5230N (JME) Samsung Galaxy BlackBerry 9380 BlackBerry 9900 HTC One X Mini 2 (Android) Samsung Nexus S (Android) Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
  • 47. Dove acquistare tag e lettori • SmartCardFocus - http://www.smartcardfocus.com • ebay! Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
  • 48. 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”
  • 49. Contatti • gerdavax AT gmail DOT com • @gerdavax • http://www.gerdavax.it Corso “Applicazioni per dispositivi mobili”- Guest seminar “Introduzione ad NFC”
  • 50. 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”