UNIVERSITÀ DEGLI STUDI GUGLIELMO MARCONI FACOLTÀ DI SCIENZE E TECNOLOGIE APPLICATE CORSO DI LAUREA IN INGEGNERIA INFORMATICA UN SISTEMA DI ...

Pagina creata da Gabriel Filippi
 
CONTINUA A LEGGERE
UNIVERSITÀ DEGLI STUDI GUGLIELMO MARCONI

    FACOLTÀ DI SCIENZE E TECNOLOGIE APPLICATE

    CORSO DI LAUREA IN INGEGNERIA INFORMATICA

   UN SISTEMA DI BIGLIETTISTICA IN TECNOLOGIA NFC
         COMPRENSIVO DI APP PER SMARTPHONE

Relatore:                                      Candidato:
Prof. Luca Regoli                     Gianmattia Gherardi
                                   Matr. N°: STA07049/L8

                    ANNO ACCADEMICO

                       2020/2021
INDICE

i.     Contenuti
ii.    Indice
iii.   Ringraziamenti
1. Introduzione
2. Analisi
2.1. Smart City
2.2. Descrizione del problema
3. Progettazione
3.1. Ticket NFC
3.1.1. Tecnologia NFC
3.1.1.1. Panoramica
3.1.1.2. Dispositivi NFC
3.1.1.3. Funzionamento dei tag NFC
3.1.1.4. NFC Data Exchange Protocol (NDEF)
3.1.1.5. Tag Length Value blocks (TLV blocks)
3.1.1.6. NDEF Message TLV
3.1.1.7. Terminator TLV
3.1.1.8. NDEF Record
3.1.1.9. NDEF Record Type
3.1.2. Progettazione del sistema
3.1.2.1. Use case
3.1.2.2. Logica di validazione e timbratura
3.1.2.3. Lettura e scrittura dei biglietti
3.1.2.4. Meccanismi anticontraffazione
3.2. Web API
3.2.1. Web API e servizi RESTful
3.2.1.1. Panoramica
3.2.1.2. JSON Web Token
3.2.2. Progettazione servizi per App e sistema NFC
3.2.2.1. Servizio di Autenticazione
3.2.2.2. Servizi condivisi
3.2.2.3. Servizi dedicati all’App
3.3. App per smartphone
3.3.1. Biglietti Virtuali
3.3.2. Progettazione delle funzionalità fondamentali
3.3.2.1. Registrazione utente
3.3.2.2. Login
3.3.2.3. Dashboard
3.3.2.4. Associazione Biglietto Fisico
3.3.2.5. Creazione Biglietto Virtuale
3.3.2.6. Dettaglio biglietti
3.3.2.7. Ricarica Biglietto Virtuale
3.3.2.8. Impostazioni
3.4. Database
3.4.1. Autenticazione
3.4.2. Validazione biglietti
3.4.3. Ricarica biglietti
3.4.4. Associazione e creazione biglietti
3.4.5. Schema complessivo
3.5. Visione progettuale d’insieme
4. Implementazione
4.1. Tecnologie e strumenti di sviluppo
4.1.1. Componenti Software
4.1.1.1. C# come linguaggio di programmazione back end
4.1.1.2. Xamarin per lo sviluppo di App
4.1.1.3. Visual Studio come IDE
4.1.1.4. Git come sistema di SCM e GitHub come repository
4.1.1.5. Microsoft SQL Server Express come database
4.2. Componenti Hardware
4.2.1.1. Reader NFC
4.2.1.2. Chip NFC
4.3. Creazione del database
4.3.1. Tabella SmartTicket
4.3.2. Tabella Utente (SmartTicketUser)
4.3.3. Tabella Transazione (CreditTransaction)
4.3.4. Tabella Ruolo (Role)
4.4. Libreria NFCReaderAPI
4.4.1. Classi relative ai dispositivi NFC
4.4.2. Classi relative ai messaggi NDEF
4.5. Libreria NFCTicketing
4.6. Software NFCTicketValidator
4.7. Web API (libreria NFCTicketingWebAPI)
4.7.1. Middleware SmartTicketController
4.7.2. Middleware SmartTicketAuthenticationManager
4.7.3. Middleware ExceptionHandler
4.7.4. Entity Framework Core come ORM
4.7.5. Lista degli endpoint
4.7.5.1. AuthenticateUser (authenticate)
4.7.5.2. RegisterUser (register)
4.7.5.3. AssociateTicket (associateticket)
4.7.5.4. UnbindTicket (unbindticket)
4.7.5.5. AddCredit (addcredit)
4.7.5.6. CreateVirtualTicket (createvirtualticket)
4.7.5.7. DeactivateTicket (deactivateticket)
4.7.5.8. DeleteTicket (deleteticket/{cardid})
4.7.5.9. ValidateTicket (validate)
4.7.5.10. GetTickets (gettickets)
4.8. App per smartphone
4.8.1. Schermata di Login
4.8.2. Schermata di Registrazione
4.8.3. Dashboard
4.8.4. Associazione Biglietto Fisico
4.8.5. Creazione Biglietto Virtuale
4.8.6. Dettaglio Biglietto
4.8.6.1. Biglietto Fisico
4.8.6.2. Biglietto Virtuale
4.8.7. Ricarica Biglietto
4.8.8. Impostazioni
4.9. Esempi di utilizzo
4.9.1. Biglietto Fisico
4.9.1.1. Acquisto biglietto
4.9.1.2. Ricarica biglietto
4.9.1.3. Obliterazione
4.9.2. Biglietto Virtuale
4.9.2.1. Creazione
4.9.2.2. Ricarica credito
4.9.2.3. Validazione biglietto
5. Possibili evoluzioni applicative
5.1. Timbratura Biglietto Fisico tramite smartphone
5.2. Portafoglio di biglietti a uso famigliare
5.3. Disattivazione dei biglietti
5.4. Acquisto diretto abbonamenti
6. Conclusioni
Bibliografia
ABSTRACT
Con la nascita degli smartphone ci si è trovati a possedere dei
veri e propri computer, dove telefonare non era altro che una
delle innumerevoli funzioni, ed è iniziata la diffusione di quelle
che ormai sono comunemente chiamate ‘app’. La capacità di
questi dispostivi di connettersi ad Internet e di navigare quasi
come se si usasse un laptop o un pc desktop, unitamente alla
possibilità di creare app di carattere così profondamente diverso
tra di loro, ha stravolto la nostra capacità di interagire con il
mondo che ci circonda.
Utilizzare il proprio smartphone per usufruire più facilmente del
trasporto pubblico, grazie alla possibilità di acquistare e gestire
biglietti online, non può che essere una delle logiche conseguenze
di questa rivoluzione tecnologica.
Il progetto descritto non è incentrato unicamente sullo sviluppo
di un’app che consenta la gestione di biglietti in maniera virtuale:
ancora   oggi,   infatti,   molte   persone   non    possiedono   uno
smartphone o non hanno desiderio di utilizzarlo se non per
comunicare. La realizzazione comprende, quindi, una parte molto
importante: la possibilità di migliorare l’obliterazione e l’acquisto
di titoli di viaggio sfruttando la tecnologia NFC.
Sono state analizzate le problematiche e proposti i miglioramenti
che un sistema di questo tipo può apportare alla gestione dei
biglietti per il trasporto pubblico. È stata ampliamente dettagliata
la tecnologia NFC, utilizzata per la comunicazione tra dispositivi
elettronici e fulcro del sistema di bigliettistica progettato, ed i
protocolli necessari per il suo funzionamento. È stato svolto un
importante lavoro di accentramento delle informazioni e della
documentazione relativa a questa tecnologia.
I moduli sono stati pensati secondo una logica di riusabilità anche
su diversi ambienti operativi: grande importanza è stata data alla
modularità dell’architettura del software, evitando un forte
cablaggio interno dei componenti e quindi impedendo al sistema
di risultare troppo rigido o legato a determinati dispositivi NFC
proprietari. Una particolare attenzione è stata rivolta ai sistemi di
sicurezza impiegati, al fine di limitare il più possibile i tentativi di
falsificazione o di riproduzione illegale dei biglietti.
L’implementazione dell’intero software è stata realizzata tramite
l’ausilio di tecnologie moderne e sono stati estrapolati ed esposti
diversi frammenti di codice particolarmente caratterizzanti, sia
relativi alla modularità dell’architettura del sistema di bigliettistica
in tecnologia NFC che all’applicazione per smartphone.
Sono infine state discusse alcune delle possibili evoluzioni
applicative da attivare in futuro.
BIBLIOGRAFIA
ISO/IEC                    14443,                    Wikipedia,
https://en.wikipedia.org/wiki/ISO/IEC_14443
Smart card application protocol data unit, Wikipedia,
https://en.wikipedia.org/wiki/Smart_card_application_protocol_
data_unit
ISO/IEC                     7816-4,                   ISO-IEC,
https://www.iso.org/obp/ui/#iso:std:iso-iec:7816:-4:ed-
4:v1:en
NTAG213/215/216,               Product           Data            Sheet,
https://www.nxp.com/docs/en/data-
sheet/NTAG213_215_216.pdf
Martinelli P., Che cosa è il NFC Forum e quale è il suo ruolo, 2018,
https://www.rfid-soluzioni.com/che-cosa-e-il-nfc-forum-e-
quale-e-il-suo-ruolo/
Representational         State            Transfer,           Wikipedia,
https://en.wikipedia.org/wiki/Representational_state_transfer
RESTful    Web   Services     Tutorial   with   REST    API    Example,
https://www.guru99.com/restful-web-services.html
HTTP request methods, MDN, https://developer.mozilla.org/en-
US/docs/Web/HTTP/Methods
JSON Web Tokens, https://jwt.io/
Language         Integrated         Query        (LINQ),          2017,
https://docs.microsoft.com/en-us/dotnet/csharp/programming-
guide/concepts/linq/
Introduction        to           ASP.NET          Core,           2020,
https://docs.microsoft.com/en-us/aspnet/core/introduction-to-
aspnet-core?view=aspnetcore-5.0
Entity Framework Core, 2020, https://docs.microsoft.com/en-
us/ef/core/
Xamarin, https://dotnet.microsoft.com/apps/xamarin
XAML            overview                  (WPF               .NET),          2021,
https://docs.microsoft.com/en-
us/dotnet/desktop/wpf/fundamentals/xaml?view=netdesktop-
5.0
The            Model-View-ViewModel                     Pattern,             2017,
https://docs.microsoft.com/en-us/xamarin/xamarin-
forms/enterprise-application-patterns/mvvm
C#          documentation,                  https://docs.microsoft.com/en-
us/dotnet/csharp/
Welcome         to          the       Visual        Studio        IDE,       2021,
https://docs.microsoft.com/en-us/visualstudio/get-
started/visual-studio-ide?view=vs-2019
IntelliSense               in            Visual          Studio,             2018,
https://docs.microsoft.com/en-us/visualstudio/ide/using-
intellisense?view=vs-2019
PowerShell       Documentation,             https://docs.microsoft.com/en-
us/powershell/
What is NuGet?, https://www.nuget.org/
Emulatore            di         Visual         Studio          per        Android,
https://visualstudio.microsoft.com/it/vs/msft-android-emulator/
ACR122U                         USB                  NFC                   Reader,
https://www.acs.com.hk/en/products/3/acr122u-usb-nfc-
reader/
git, https://git-scm.com/
GitHub, Wikipedia, https://en.wikipedia.org/wiki/GitHub
SQL                  Server                  Express,                    Wikipedia,
https://en.wikipedia.org/wiki/SQL_Server_Express
Factory                   method                  pattern,               Wikipedia,
https://en.wikipedia.org/wiki/Factory_method_pattern
Dependency                   injection,              Wikipedia,
https://en.wikipedia.org/wiki/Dependency_injection
Create       web      APIs        with    ASP.NET        Core,
https://docs.microsoft.com/en-us/aspnet/core/web-
api/?view=aspnetcore-5.0
Middleware di ASP.NET Core, https://docs.microsoft.com/it-
it/aspnet/core/fundamentals/middleware/?view=aspnetcore-5.0
Swagger, https://swagger.io/
Advanced Card Systems Ltd. Card and Reader Technologies,
ACR122U USB NFC Reader - Application Programming Interface
V2.04
NXP Semiconductors, UM0701-02 PN532 User Manual
Puoi anche leggere