UNIVERSITÀ DEGLI STUDI DI PARMA

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "UNIVERSITÀ DEGLI STUDI DI PARMA"

Transcript

1 UNIVERSITÀ DEGLI STUDI DI PARMA DIPARTIMENTO DI MATEMATICA E INFORMATICA Corso di Laurea in Informatica Tesi di Laurea SUPPORTO ALL'UTILIZZO DI SERVIZI DI SOCIAL NETWORK NELLA PIATTAFORMA AMUSE Relatore: Prof. Federico Bergenti Candidato: Alessandro Bertoletti Anno Accademico 2013/2014

2 Indice 1 AMUSE Introduzione JADE WADE Architettura Funzionalità AMUSE API Client API Server API Social Network Introduzione Facebook Graph API Facebook App Access Token Permission Facebook SDK per Android Studio del problema Introduzione Studio della piattaforma AMUSE Autenticazione e Registrazione Gestione degli Amici Possibili Soluzioni Login Gestione degli Amici Implementazione e Funzionamento Implementazione Implementazione login tramite social network

3 INDICE INDICE Implementazione di Trova Amici Funzionamento Riferimenti bibliograci 44 A Login with Social Network in AMUSE 45 A.1 Introduction A.1.1 Prerequisites A.2 Necessary Material A.2.1 Create a Facebook App A.2.2 Add Facebook SDK to Your Project A.3 Add Facebook Features A.3.1 Add Login with Facebook A.3.2 Play with Facebook Friends

4 Introduzione L'obiettivo di questa tesi è indagare sulla possibilità di integrazione dei servizi di Social Network e AMUSE. L'idea di base è quella di aancare ai servizi già esistenti di AMUSE, quali login e ricerca di amici, quelli di un social network permettendo così all'utente nale un utilizzo più semplice e immediato dell'applicazione AMUSE-based sviluppata. Il lavoro è stato svolto nel modo più trasparente possibile, studiando a fondo la piattaforma AMUSE e cercando le varie soluzioni possibili: una volta trovata la migliore si è passati alla fase di sviluppo, cercando di modicare il meno possibile le funzionalità già implementate in AMUSE. Il social network scelto per testare la piattaforma è Facebook, questo perché, ad oggi, è il social network più utilizzato in Europa e in Italia e ore una SDK migliore delle altre. Lo sviluppo della tesi è organizzato nel modo seguente: Il capitolo 1 introduce più in dettaglio la piattaforma AMUSE e ne spiega il funzionamento. Il capitolo 2 introduce i servizi di Facebook integrati con AMUSE. Il capitolo 3 fa una panoramica sui social network, per poi spiegare Facebook e i suoi servizi. Il capitolo 4 spiega le modiche apportate al sistema AMUSE per integrare i servizi di Social Network. Nel capitolo 5 vi è spazio per conclusioni e sviluppi futuri. Inne, nell' appendice è possibile trovare un tutorial, scritto in lingua inglese, il quale spiega come inserire all'interno della propria applicazione le feature introdotte. 3

5 Capitolo 1 AMUSE 1.1 Introduzione AMUSE (Agent-based Multi-User Social Environment) è una piattaforma software che facilita lo sviluppo di applicazioni social distribuite, le quali portano gli utenti a cooperare o a competere per la realizzazione di obiettivi comuni o privati. Per questo motivo, lo scopo principale di AMUSE è la realizzazione di giochi multiplayer on-line. La piattaforma AMUSE è un sistema JADE-based e, per la gestione dei componenti e delle comunicazioni, adopera le soluzioni già implementate WADE e JADE JADE JADE (Java Agent DEvelopment Framework) è un Framwork implementato completamente in Java. Il suo scopo è quello di semplicare l'implementazione di sistemi multi-agente attraverso un middle-ware che compila il codice secondo le speciche FIPA e che aiuta le fasi di debug e di sviluppo grazie a un set di tools graci. Un sistema JADE può essere distribuito tra varie macchine (le quali non hanno bisogno di avere lo stesso sistema operativo) e la loro congurazione può essere controllata attraverso una GUI remota. Insieme all'astrazione degli agenti, JADE fornisce una semplice ma potente task execution, un compositore di modelli, comunicazione peer-to-peer tra agenti basata sullo scambio di messaggi asincroni, un servizio di pagine gialle e molte altre caratteristiche avanzate che facilitano lo sviluppo di un sistema distribuito. JADE è un software gratuito ed è distribuito da Telecom Italia, detentore del copyright, in open source secondo i termini e le condizioni della licenza LGPL. 4

6 1.2 Architettura AMUSE WADE WADE (Workows and Agents Development Environment) è una piattaforma software basata su JADE, la quale fornisce supporto per l'esecuzione di task deniti secondo la metafora del workow. La componente chiave di WADE è la classe WorkowEngineAgent che estende la classe Agent della libreria JADE incorporando un piccolo e leggero motore di workow. Oltre ai normali behaviours di JADE, un WorkowEngineAgent è capace di eseguire workow in accordo a specici formalismi di WADE. Questi formalismi sono scritti in linguaggio JAVA. Uno dei principali vantaggi dell'approccio a workow è la possibilità di rappresentare i processi in forma graca, WADE ore un servizio di sviluppo, chiamato WOLF, che facilita la creazione di applicazioni WADE-based. WOLF è un plug-in di Eclipse che permette di sfruttare tutte le funzionalità dell'ide Eclipse in aggiunta alle potenzialità oerte da WADE. WADE è un software gratuito ed è distribuito da Telecom Italia, detentore del copyright, in open source secondo i termini e le condizioni della licenza LGPL. 1.2 Architettura La seguente gura mostra una panoramica dell'architettura di AMUSE: tutte le applicazioni AMUSE-based comprendono la logica necessaria per il lato client insieme a un'eventuale interfaccia graca. Le applicazioni client fanno uso della libreria AMUSE client library per interagire con altri client e con il server. Nella versione corrente (AMUSE 1.0 rilasciata il 10/12/2014) sono supportati solo le applicazione Android-based. Nella maggior parte dei casi le applicazioni AMUSE-based hanno bisogno di una specica logica che deve essere eseguita nel lato server. Queste 5

7 1.3 Funzionalità AMUSE applicazioni, nel terminologia di AMUSE, sono chiamate applicazioni serverbased. Per l'esecuzioni di queste logiche la piattaforma AMUSE fornisce un ambiente PaaS (Platform as a Service): le applicazioni non sono a conoscenza dei dettagli relativi all'hardware, sistemi operativi e altro riguardanti il server. D'altra parte il sistema è distribuito su un ambiente cloud e AMUSE ha il compito di assicurarsi che ogni lavoro abbia le risorse necessarie per il suo corretto funzionamento. AMUSE mette a disposizione la AMUSE Application Administration Interface, con la quale è possibile registrare, installare, congurare e avviare le speciche logiche server-side delle varie applicazioni sviluppate. Una volta lanciate, i client possono connettersi e sfruttare i servizi messi a disposizione. Nei casi in cui le applicazioni non necessitano di una logica a lato server, in AMUSE ci riferiamo ad esse come applicazioni client-only. Per avviare questo tipo di applicazioni, basta una registrazione sulla AMUSE Application Administration Interface. 1.3 Funzionalità Le funzionalità di AMUSE si dividono in Core e in Gaming. Le Core, al contrario delle Gaming, non sono solo orientate allo sviluppo di giochi e possono essere usate in generiche applicazioni multi utente. Le funzioni Core le troviamo nel package com.amuse.client.features.core, mentre le Gaming, nel package com.amuse.client.features.gaming. Le principali sono: Gestione Applicazioni: questa funzione ore la possibilità di registrare, installare, congurare e attivare le applicazioni sviluppate, le quali sono disponibili presso la AMUSE Application Administration Interface accessibile via Web. Gestione Utenti: questa funzione si occupa della registrazione e della autenticazione degli utenti e supporta in parte minimale la gestione dei proli utenti. Le API client che si occupano di questo sono contenute nella classe com.amuse.client.features.core.usermanagementfeature. Sincronizzazione del Clock: questa funzione si incarica della sincronizzazione degli eventi, in modo tale che la stessa applicazione su terminali dierenti esegua contemporaneamente un'azione (questa funzione ha una particolare importanza per i giochi real-time, dove un match inizia, gestisce eventi e nisce allo stesso tempo per tutti i giocatori). 6

8 1.3 Funzionalità AMUSE Scambio di messaggi di testo: questa funzione ore la possibilità di mandare e ricevere messaggi di testo da o verso altri utenti con la stessa applicazione. Questo servizio è accessibile attraverso le API contenute nella classe com.amuse.client.features.core.textmessagefeature. Nel caso in cui il ricevente non sia connesso nel momento in cui il messaggio è stato inviato, il messaggio sarà automaticamente salvato nel lato server dell'applicazione e sarà consegnato non appena il ricevente si sarà connesso. Gestione delle pipe Peer-to-peer: questa funzione ore la possibilità di stabilire una connessione diretta tra i client, i quali potranno in seguito scambiarsi specici oggetti. Le API sono accessibili tramite l'interfaccia com.amuse.client.features.core.pipemanagementfeature. Coordinazione match Peer-to-peer: questa funzione ore la possibilità di organizzare match one-to-one in modo persistente: se un utente si disconnette durante il match, potrà riconnettersi in un momento successivo. La partecipazione al match utilizza la metafora dell'invito: l'organizzatore manda una richiesta all'avversario in modo esplicito specicando il suo nome o chiede alla piattaforma AMUSE di trovargli un avversario casuale. Una volta accettato l'invito da parte dell'avversario, il match ha inizio. Le applicazioni basate su questo approccio non richiedono nessuna logica da parte del server, e possono essere sviluppate come applicazioni client-only. Le API contenute nella classe com.amuse.client.features.gaming.matchcoordinationfeature orono questo servizio. Coordinamento centralizzato del match: questo servizio si occupa dell'organizzazione di match che comprendono due o più giocatori, i quali possono entrare o uscire dalla partita, mentre è ancora in svolgimento. La partecipazione al match utilizza la metafora dei tavoli: l'organizzatore del match crea un tavolo vuoto, dove gli avversari possono sedersi per unirsi alla partita. Non appena il numero minimo di giocatori è stato raggiunto il match ha inizio. I tavoli sono disposti in stanze, dove un giocatore deve accedere prima di sedersi in un qualsiasi tavolo. Le applicazioni basate su questo approccio richiedono una specica logica che governi il lato server, infatti queste applicazioni vengono chiamate server-based. La logica deve essere implementata estendendo la classe com.amuse.agents.gra.gamesroomagent la quale contiene i meccanismi base per la gestione dei tavoli all'interno delle stanze e per la coordinazione dei match giocati sui vari tavoli. 7

9 1.4 AMUSE API AMUSE 1.4 AMUSE API La piattaforma AMUSE è così composta: una piattaforma sulla quale viene gestita la logica di AMUSE, insieme a quella specica per ogni gioco che ne necessita. un set di client API per lo sviluppo di applicazioni sul sistema operativo Android per implementare tutti gli aspetti di gioco prima menzionati un set di server API che servono, quando necessario, a gestire la logica di gioco tra i vari client connessi Client API Le client API di AMUSE sono contenute nel package com.amuse.client e organizzate nei suoi vari sub-package. La classe AmuseClient, facente parte del package com.amuse.client.android, è il punto di ingresso per accedere a tutte le funzionalità client AMUSE, in particolare il suo metodo connect(), ci permette la connessione e l'autenticazione nella piattaforma AMUSE. Una volta autenticato l'account con successo, il metodo getfeature() ci permette di recuperare le classi che implementano le feature contenute nei package scritti sopra. Tutte le API di AMUSE che richiedono l'iterazione con la piattaforma AMUSE lavorano in modo asincrono: infatti come argomento richiedono sempre una Callback la quale contiene il metodo onsuccess(), che viene invocato quando l'operazione è stata completata con successo, e il metodo onfailure(), invocato nel caso contrario. La logica di gioco in una applicazione AMUSE si descrive implementando l'interfaccia Table.Listener, la quale mette a disposizione i seguenti metodi: handlematchstarting(), invocato quando si è raggiunto il numero minimo di giocatori in un tavolo e il match può iniziare; handleplayerjoined(), invocato quando un giocatore entra nel tavolo in cui il giocatore corrente risiede; handleplayerleft(), invocato quando un giocatore lascia il tavolo in cui il giocatore corrente risiede, questo può succedere sia prima che dopo l'inizio del match; handleplayermoved(), invocato quando un altro giocatore compie una mossa del gioco; 8

10 1.4 AMUSE API AMUSE handlematchevent(), invocato quando occorre un evento specico non direttamente correlato alla mossa di un giocatore; handlematchfinished(), invocato quando il match nisce. Per noticare al lato server dell'applicazione che il giocatore corrente ha eseguito una mossa, bisogna chiamare il metodo move() della classe Table contenuta nel package com.amuse.client.features.gaming Server API La logica a lato server di un'applicazione AMUSE-based è necessaria soltanto quando l'applicazione ha implementato la classe GamesRoomFeature. Essa viene descritta implementando uno o più istanze di un agente estendendo la classe GamesRoomAgent. Il nome dell'agente corrisponde al nome della stanza. Ogni GamesRoomAgent contiene al suo interno un numero di oggetti TableManager, ognuno dei quali, gestisce un tavolo all'interno della stanza. Inoltre, la classe GamesRoomAgent, mette a disposizione una serie di metodi che verranno invocati solo in occasione di eventi rilevanti per la sessione di gioco, i quali devono essere rideniti per implementare la logica di gioco. I metodi più rilevanti da ridenire sono: handletablecreate(), invocato quando il server riceve l'ordine di creare un tavolo; handlematchstartup(), invocato appena il numero minimo di giocatori per l'inizio del match è stato raggiunto; handlemove(), invocato quando un giocatore ha eseguito una mossa; handleplayerjoined(), invocato quando un giocatore entra in un tavolo; handleplayerleft(), invocato quando un giocatore esce da tavolo. I tavoli di gioco possono essere creati in due modi: attraverso il metodo createtable() della classe GamesRoomAgent o come conseguenza di una richiesta da parte di un utente, così da poter creare un tavolo privato al quale solo gli invitati possano accedere; in tutti e due i casi viene chiamato il metodo handletablecreated(). Durante la fase di creazione di un tavolo è possibile specicare un minimo numero di giocatori sopra il quale il match inizierà e un numero massimo di giocatori partecipanti alla partita. Quando il match è giunto al termine, si utilizza il metodo setmatchfinished() della classe TableManager per noticare la terminazione del match al GamesRoomAgent. 9

11 Capitolo 2 Social Network 2.1 Introduzione Con l'espressione social network si identica un servizio informatico on line che permette la realizzazione di reti sociali virtuali. Si tratta di siti Web che consentono agli utenti di condividere contenuti testuali, immagini, video e audio e di interagire tra loro. Secondo la denizione, data dagli studiosi Boyd-Ellison [3], si possono denire siti di social network i servizi web che permettono: la creazione di un prolo pubblico o privato all'interno di un sistema vincolato, l'articolazione di una lista di contatti, la possibilità di scorrere la lista di amici dei propri contatti. Generalmente, prevedono una registrazione mediante la creazione di un prolo personale protetto da password partendo da informazioni come il proprio nome, cognome, indirizzo no ad arrivare agli interessi e alle passione che abbiamo. Inoltre si ha la possibilità di eettuare ricerche nel database della struttura informatica per localizzare altri utenti e organizzarli in gruppi e liste di contatti. Un importante sviluppo delle reti sociali è rappresentato dalla possibilità di creare da parte di chiunque ne abbia le competenze (sviluppatori con linguaggi solitamente proprietari) applicazioni orientate alla comunità degli iscritti. Tale famiglia di applicazioni, beneciano della rete di contatti e delle informazioni individuali degli iscritti (es. Facebook, Google+, Twitter) per facilitare operazioni quali registrazioni e accessi a servizi esterni al social network. 10

12 2.2 Facebook Social Network 2.2 Facebook Facebook è un servizio di rete sociale lanciato nel febbraio del 2004, posseduto e gestito dalla corporazione Facebook Inc., basato su una piattaforma software scritta in vari linguaggi di programmazione. Fondato a Harvard negli Stati Uniti da Mark Zuckerberg e dai suoi compagni di università Eduardo Saverin, Dustin Moskovitz e Chris Hughes, era originariamente stato progettato esclusivamente per gli studenti dell'università di Harvard, ma fu presto aperto anche agli studenti di altre scuole della zona di Boston, della Ivy League e della Stanford University. Successivamente fu aperto anche agli studenti delle scuole superiori e poi a chiunque dichiarasse di avere più di 13 anni di età. Da allora Facebook raggiunse un enorme successo: secondo Alexa dal giugno 2013 è diventato il sito Web più visitato al mondo, superando Google; ha cambiato profondamente molti aspetti legati alla socializzazione e all'interazione tra individui, sia sul piano privato che quello economico e commerciale. È disponibile in oltre 70 lingue e nell'ottobre 2012 conta circa un miliardo di utenti attivi che eettuano l'accesso almeno una volta al mese, classicandosi come primo servizio di rete sociale per numero di utenti attivi. Gli utenti possono accedere al sito previa una registrazione gratuita, durante la quale vengono richiesti dati personali come nome, cognome, data di nascita e indirizzo . Completata la registrazione, gli utenti possono creare un prolo personale, includere altri utenti nella propria rete sociale, aggiungendoli come amici, scambiare messaggi tramite una chat integrata oppure condividere uno stato, una foto o un qualsivoglia contenuto multimediale Graph API Le Graph API sono API pensate dagli sviluppatori Facebook per scambiare informazioni con la piattaforma di Facebook. Sono delle richieste HTTP di basso livello e possono essere usate per richiedere dati relativi a un utente, postare uno stato sulla propria pagina di Facebook, caricare foto e tutti gli altri compiti di cui abbiamo bisogno. Le Graph API essendo HTTP based possono essere usate insieme a qualsiasi linguaggio di programmazione. Facebook ha adottato la metafora social graph per la rappresentazione delle informazioni sulla sua piattaforma, da qui deriva il nome di queste API. Il grafo è composto da: nodi: che rappresentano informazioni come per esempio un utente, una foto o un commento; 11

13 2.2 Facebook Social Network archi: che rappresentano le connessioni tra i nodi, come per esempio un commento a una foto; campi: sono i campi che i nodi possono avere, come la data di compleanno di un utente. Ogni nodo del grafo ha un ID unico, il quale permette di raggiungerne il contenuto. Questo è un esempio per richiedere un nodo: GET graph.facebook.com /{id-nodo Ad esempio, se volessimo ottenere le informazioni del nostro prolo personale basterà richiedere GET graph.facebook.com /v2.3/me La risposta da parte di Facebook, ci comunica le informazioni base del prolo utente, quali ID, nome cognome, il link al prolo e altre informazioni, il tutto formattato in stile JSON. { "id": " ", "birthday": "10/08/1991", "first_name": "Alessandro", "gender": "male", "last_name": "Bertoletti", "link": "https://www.facebook.com/ /", "locale": "it_it", "name": "Alessandro Bertoletti", "timezone": 2, "updated_time": " T22:34: ", "verified": true Per questioni di sicurezza e di privacy, per eseguire richieste Graph API è necessario disporre di una Facebook App alla quale riferirci e di un Access Token con cui autenticarci. Inoltre alcuni dati sono disponibili solo dopo il consenso delle Permission da parte dell'utente. 12

14 2.2 Facebook Social Network Facebook App Le Facebook App sono applicazioni Web che permettono l'interazione tra la nostra applicazione e i server di Facebook. Per creare una Facebook App, è necessario per prima cosa collegarsi al sito web https://developers.facebook.com/, cliccare su Add a new app e scegliere la piattaforma con la quale andremo a interrogare i server di Facebook: possiamo scegliere tra una vasta tipologia di piattaforme tra le quali le più famose sono ios, Android, sito Web e Facebook Canvas. Possono convivere più piattaforme alla volta, ognuna di esse sarà identicabile singolarmente tramite un ID. L'applicazione sarà reperibile grazie a due codici che identicheranno la coppia Facebook App e piattaforma scelta: l'app ID e l'app Secret. Il primo è un codice numerico che rappresenta la nostra applicazione, il secondo è un codice segreto che non dovrà mai essere pubblicato e ha la funzione di autenticare le richieste fatte dall'applicazione verso i server di Facebook. Inoltre sarà ora possibile autenticare un utente Facebook tramite il Facebook Login Access Token Un Access Token è una stringa che identica un utente, un'applicazione o una pagina e può essere usato da quest'ultimi per eseguire una richiesta ai server Graph API. Gli Access Token sono ottenibili eseguendo il login su Facebook e contengono le informazioni sulla data di scadenza del token, da chi è stato generato e a che tipo di dati abbiamo accesso. Esistono vari tipi di Access Token dierenziati dai vari tipi di utilizzo: User Access Token Sono i token utilizzati più spesso. Questo tipo di token è sempre necessario quando l'applicazione chiama un API per leggere, modicare o scrivere i dati di utente Facebook. Generalmente vengono ottenuti tramite una nestra di login e richiedono l'autorizzazione di una persona sica per portare a termine la creazione. App Access Token Questo tipo di token è necessario per modicare e leggere le impostazioni di una applicazione Facebook. Viene generato a partire da un codice segreto, chiamato App Secret, utilizzato durante le chiamate che cambiano le impostazioni a livello di Facebook App. Page Access Token Questo Access Token è molto simile allo User Access Token con la dierenza che permette gli accessi di lettura, modica e scrittura a una pagina Facebook. Si ottiene solo dopo aver 13

15 2.2 Facebook Social Network validato uno User Access Token richiedendo il permesso manages page permission tramite apposita chiamata Graph API. Client Token - Il Client Token è un identicatore che può essere abbinato a una applicazione nativa mobile o desktop il quale identica la applicazione Facebook a cui fa riferimento. Questo token non è pensato per essere segreto, per questo ha accesso a ristrette chiamate Graph API. Gli User Access Token si dividono in due tipi: short-lived token e longlived token. I primi, solitamente, hanno una durata di circa una o due ore al massimo, mentre i secondi hanno una vita di 60 giorni. Le applicazioni mobile che usano la SDK di Facebook generano degli long-lived token. Una delle caratteristiche più importanti degli Access Token è che essi sono portabili: una volta ottenuto può essere usato per fare richieste da un client mobile, da un Web browser o dal nostro server. Infatti, se abbiamo ottenuto il Token tramite un'applicazione mobile, possiamo inviarlo al nostro server per poi eseguire delle chiamate direttamente da quest'ultimo Permission Come accennato nel paragrafo precedente, gli Access Token ci garantiscono l'accesso ai dati dell'utente. Le Permission sono il metodo per richiedere accesso alle risorse che non sono reperibili liberamente: l'utente può infatti selezionare le informazioni alle quali l'applicazione può avere o non avere accesso. Le Permission sono stringhe che vengono passate insieme a una richiesta di login o a una chiamata Graph API. Questo è un esempio di Permission: - garantisce l'accesso all' dell'utente friends - garantisce l'accesso agli amici che hanno utilizzato la stessa applicazione Facebook publish_actions - permette all'applicazione di pubblicare contenuti sulla propria pagina Facebook Facebook SDK per Android La Facebook SDK per Android permette di integrare i servizi oerti dal Social Network nel sistema operativo Android, alcune di queste feature richiedono che l'utente abbia installata sul proprio telefono la Facebook per Android app. Grazie alla SDK di Facebook sarà possibile: 14

16 2.2 Facebook Social Network il Login tramite Facebook: permette agli utenti di accedere all'applicazione con la loro identità Facebook senza che ci sia bisogno di reinserire le proprie credenziali Facebook; la condivisione di risultati o contenuti: consente alle persone di pubblicare su Facebook direttamente dall'applicazione; l'accesso alle Graph API: l'accesso alle Graph API consente di ottenere o inviare dati ai social graph di Facebook. É possibile interrogare i dati, aprire nuove storie, caricare foto e altro ancora. l'invio di richieste: permette agli utenti di inviare le richieste ai loro amici per provare l'applicazione. 15

17 Capitolo 3 Studio del problema 3.1 Introduzione Il problema datomi da risolvere è cercare la possibilità di sfruttare i servizi oerti dai social network nella piattaforma AMUSE. Il tutto deve essere svolto nel modo più trasparente possibile: la logica della piattaforma AMUSE non deve cambiare, ne subire cambiamenti drastici. In questo capitolo verrà spiegato lo studio fatto sulla piattaforma AMUSE elencando le funzionalità e le classi coinvolte. I servizi da integrare in AMUSE sono l'autenticazione e la ricerca di amici contro o con cui giocare tramite Social Network. AMUSE, come già descritto, è composto da un lato server e da un lato client. Il lato server si occupa della registrazione e dell'autenticazione degli utenti, della logica del sistema e di tutti gli altri servizi oerti dalla piattaforma, mentre il lato client fornisce allo sviluppatore le chiamate per interagire con quest'ultima. Per uno studio più approfondito è stato necessario installare la piattaforma AMUSE in locale. Questa operazione è risultata particolarmente complessa causa la mancanza di documentazione o di una guida che spiegasse come fare. Dopo vari tentativi, si è riusciti a risolvere tutte le problematiche e ad avviare un server AMUSE locale. 3.2 Studio della piattaforma AMUSE Autenticazione e Registrazione A lato server la responsabile delle autenticazioni e delle registrazioni è la classe AuthenticationService contenuta nel package com.amuse.admin.services. 16

18 3.2 Studio della piattaforma AMUSE Studio del problema Al suo interno, infatti, sono presenti due metodi: il metodo authenticate() e il metodo managenewaccount(). Il primo viene invocato quando al server riceve una richiesta di autenticazione, i parametri che richiede sono una stringa, che contiene lo username e la password dell'utente separate dal carattere : e un oggetto di tipo Logger. Al suo interno la stringa viene spezzata per il carattere : attraverso il metodo extractcredentialsinfo() contenuto nella classe AmuseUtils la quale ritorna un array di stringhe. Così facendo si ricavano lo username e la password, che occupano rispettivamente le posizioni zero e uno dell'array di stringhe ritornato. Successivamente viene controllata la corrispondenza tra lo username e la password, prima controllando l'esistenza dello username all'interno del database e, in caso aermativo, se username e password appartengono allo stesso utente. Nel caso in cui l'autenticazione sia andata a buon ne, il metodo authenticate() ritorna una stringa contenente lo username, in caso contrario lancia un'eccezione contenente la descrizione dell'errore. Il secondo, invece, viene invocato quando il server riceve una richiesta di registrazione, il parametro richiesto è una stringa contenente lo username e la password dell'utente da registrare separati dal carattere :. La stringa viene spezzata per il carattere : attraverso il metodo, già menzionato precedentemente, extractcredentialsinfo(). Ricavati username e password, si richiede al database l'esistenza o meno di un account avente lo stesso username: se esiste viene lanciata un'eccezione, in caso contrario viene registrato un nuovo account con le credenziali uguali allo username e alla password ricevute. Nel package com.amuse.client.android è presente la classe AmuseClient, la quale è responsabile della connessione con la piattaforma AMUSE. Come prima cosa, deve essere invocato il metodo getinstance() per ricevere un'istanza AmuseClient inizializzata correttamente. Il metodo getinstance() vuole tre parametri: il nome dell'applicazione, il context dell'applicazione e una callback contente i metodi onsuccess() e onfailure(). Questa operazione viene eseguita in modo asincrono e quindi l'oggetto AmuseClient recuperato è reso disponibile nel metodo onsuccess() della callback. Successivamente, specichiamo le variabili di connessione come l'indirizzo dell'host, il numero della porta e il protocollo da utilizzare con il metodo setconnectionproperties() di AmuseClient. Inne con il metodo setloginmanager() della classe AmuseClient settiamo un oggetto LoginManager e invochiamo il metodo connect(), il quale richiede a sua volta una callback come parametro. Il metodo connect() si occupa di stabilire una connessione con l'host utilizzando le impostazioni precedentemente settate. A seconda del contenuto della risposta invocherà il metodo onsuccess() o il metodo onfailure() della callback passatogli come parametro. 17

19 3.2 Studio della piattaforma AMUSE Studio del problema L'oggetto LoginManager è responsabile della cattura delle credenziali: verica se le credenziali dell'utente sono già disponibili all'interno del client, in caso aermativo le invia al server AMUSE all'atto della connessione, in caso contrario le richiede all'utente. L'utente può scegliere di inserire le credenziali di un account AMUSE esistente oppure di creare un nuovo account. In ogni caso tali informazioni vengono fornite al client sotto forma di un oggetto LoginInfo, un oggetto che contiene username, password e un'informazione booleana, che indica se si tratta di un account nuovo o di un account esistente, chiamando il metodo logindone() della classe DefaultLoginManager contenuta nel modulo Android-client Gestione degli Amici L'interfaccia ContactsManagementFeature si occupa della gestione degli amici: grazie ad essa è possibile aggiungere, ricercare e rimuovere altri account AMUSE, i quali risulteranno nostri amici. Per prima cosa deve essere inizializzato un oggetto ContactsManagementFerature, chiamando il metodo getfeature() della classe AmuseClient. In seguito con il metodo initialize(), che necessita di un oggetto callback come parametro, sincronizziamo con il server la lista degli amici aggiunti in passato, in modo tale da poter subito visualizzare a schermo gli amici correnti. Aiutandoci con un'interfaccia graca, come per esempio un campo di inserimento testo e un bottone, possiamo richiedere all'utente lo username dell'amico da aggiungere. Inserito lo username da ricercare e premuto il bottone, la ricerca del suddetto viene eseguita con il metodo addcontanct(). Questo metodo come parametri richiede una stringa, che sarà lo username da ricercare, e una callback: se la ricerca ha un esito positivo l'amico viene aggiunto in automatico nella lista amici del utente e viene invocato il metodo onsuccess() della callback; in caso contrario viene segnalato l'errore che l'operazione non è giunta a compimento. Completata la fase di ricerca degli amici, è possibile ora invitarli per giocare un match insieme: con il metodo createtable(), contenuto nella classe GamesRoomFeature, passandogli come parametro una lista di stringa contenente lo username degli amici sarà possibile creare un tavolo con loro. 18

20 3.3 Possibili Soluzioni Studio del problema 3.3 Possibili Soluzioni Login L'architettura pensata per l'implementazione del Login tramite Facebook è suddivisa in vari passi. 1. L'utente nale esegue l'accesso premendo il bottone Accedi tramite Facebook visualizzato sul client Android; 2. I server Facebook, dopo aver autenticato l'account, rispondono generando un Access Token univoco associato alla sessione; 3. Il client, utilizzando l'access Token, richiede l'id dell'account Facebook ai server Facebook; 4. I server Facebook rispondono inviando le informazioni richieste; 5. Il client esegue l'accesso sulla piattaforma AMUSE con le informazioni ottenute da Facebook: username uguale all'id e password uguale all'access Token; 6. Il server AMUSE utilizza l'access Token per eseguire una richiesta ai server Facebook richiedendo l'id al quale l'access Token è legato; 7. Facebook risponde con i dati richiesti; 8. La piattaforma AMUSE confronta i dati ricevuti dal client con quelli appena ricevuti dal server Facebook: nel caso coincidessero l'utente è autenticato con la sua identità Facebook, in caso contrario il tentativo di Login viene riutato. 19

21 3.3 Possibili Soluzioni Studio del problema Figura 3.1: Architettura di Login Gestione degli Amici Per il problema Trova Amici sono state pensate varie architetture: 1. Soluzione interna; 2. Soluzione esterna; 3. Soluzione diretta. 1. Soluzione interna Questa soluzione prevede due azioni separate: Richiesta della lista amici 1. Il Client richiede la lista amici al server AMUSE; 2. Il Server AMUSE accede al database interno e ritorna la lista degli amici relativi all'account richiesto; 20

22 3.3 Possibili Soluzioni Studio del problema 3. Il Client visualizza la lista amici ricevuta; Aggiornamento della lista amici 1. Il server AMUSE richiede la lista amici di un utente direttamente ai server Facebook; 2. Il server Facebook invia la lista degli amici relativi all'account Facebook; 3. Il server AMUSE elabora gli amici mantenendo soltanto quelli aventi un account AMUSE associato e li salva all'interno del proprio database; Figura 3.2: Soluzione interna Questa architettura ha il vantaggio di portare un completo controllo sulla gestione degli amici, tuttavia gli svantaggi sono parecchi. Gli amici di Facebook di un utente possono cambiare anche più volte al giorno: sarebbe, quindi, necessario implementare una procedura di aggiornamento della lista presente sul database interno del server AMUSE, da eseguire più volte al giorno e per ogni utente registrato, un carico di lavoro notevole che potrebbe rallentare tutta la piattaforma. Inoltre questa modica è contraria all'obiettivo della trasparenza. 21

23 3.3 Possibili Soluzioni Studio del problema 2. Soluzione Esterna Questa architettura prevede cinque passi: 1. Richiesta della lista amici da parte del Client; 2. Il server AMUSE inoltra la richiesta al server Facebook; 3. Il server Facebook restituisce la lista completa degli amici relativi all'account Facebook; 4. Il server AMUSE elabora gli amici e li invia come risposta al client; 5. Il Client visualizza la lista amici ricevuta. Figura 3.3: Soluzione esterna In questa soluzione la lista all'interno del database viene aggiornata solo quando l'utente richiede gli amici di Facebook. Il vantaggio di quest'ultima architettura, rispetto alla soluzione interna è quello di avere un carico di lavoro solo su richiesta, quindi in generale minore. Lo svantaggio rispetto alla soluzione interna è la velocità con cui l'utente riceverà gli amici su terminale. 3. Soluzione Diretta Questa soluzione è composta da soli tre passi: 1. Richiesta ai server Facebook della lista amici da parte del Client; 2. Risposta da parte Facebook; 22

24 3.3 Possibili Soluzioni Studio del problema Figura 3.4: Soluzione diretta 3. Il Client visualizza la lista amici ricevuta. Nella soluzione diretta il server AMUSE non viene interrogato: il client Android si occupa di richiedere le informazioni degli amici direttamente ai Server Facebook. Il vantaggio rispetto alle altre soluzioni è la velocità con la quale si ottengono i dati, a discapito di un controllo minore su di essi. Un altro vantaggio importante è che con questa soluzione non c'è bisogno di alcuna modica a lato server AMUSE. 23

25 Capitolo 4 Implementazione e Funzionamento In questo capitolo sarà fatta un'analisi più approfondita sulla soluzione implementata facendone vedere anche il funzionamento con un'applicazione Android sviluppata per questo motivo. 4.1 Implementazione Implementazione login tramite social network Per implementare l'architettura scelta per il login tramite social network è stato necessario modicare i metodi e le classi che gestiscono l'autenticazione e la registrazione degli utenti nella piattaforma AMUSE a lato server. Come già accennato nei capitoli precedenti, la classe responsabile di questi servizi, a lato server, è la classe AuthenticationService, la quale contiene i metodi authenticate() e managenewaccount(): il primo serve per l'autenticazione mentre il secondo per la creazione di un nuovo account. Per permettere che l'architettura funzioni è stato necessario creare degli standard di comunicazione tra il client e il server: innanzitutto è stata introdotta la nozione dominio. Con dominio si indica la provenienza di un account: per esempio, se un account è nativo AMUSE il suo dominio sarà AMUSE, nel caso sia un account Facebook sarà FACEBOOK eccetera. Il dominio viene gestito come una stringa, e sarà posto dopo lo username separato dal carattere speciale $, per esempio <username>$<dominio>. Per implementare questa nuova caratteristica sono stati creati nella classi AmuseUtils due metodi: registerdomain() e getdomain(). RegisterDomain() 24

26 4.1 Implementazione Implementazione e Funzionamento è un metodo che deve essere invocato a lato client: passandogli come parametro una stringa contenente il nome del dominio, ne permette la gestione all'interno dell'applicazione, salvandola in una lista di stringhe. Questo consentirà di superare i controlli che si occupano della giusta formattazione dello username prima di essere inviato al server: se ad esempio è stato registrato il dominio FACEBOOK uno username del tipo <username>$facebook verrà considerato valido. private static List<String> domains = new ArrayList<String>(); public static void registerdomain(string domain) { domains.add(domain); Il metodo getdomain() è utilizzato per estrarre i domini: infatti questo metodo, dopo aver ottenuto una stringa contenente uno username come parametro, ritornerà il dominio associato. Può essere utilizzato sia a lato server che client. public static String getdomain(string username) { int k = username.indexof(domain_separator_string); if (k > 0) { return username.substring(k+1, username.length()); else { return AMUSE_DOMAIN; Un altro standard scelto per la gestione di account con dominio esterno ad AMUSE, è stato quello di inviare le informazioni relative all'account come se fosse un nuovo account, in modo tale, da gestirlo a lato server con il metodo managenewaccount(). Quest'ultimo, quindi prevederà una porzione di codice che sarà responsabile dell'autenticazione di account con dominio diverso da AMUSE: per prima cosa dovrà essere vericata l'esistenza dell'account all'interno del dominio di appartenenza. In caso aermativo verrà interrogato il database interno del sistema: se l'account non è presente, verrà registrato come nuovo account e autorizzato, nel caso in cui lo username sia già all'interno del database 25

27 4.1 Implementazione Implementazione e Funzionamento l'account verrà autorizzato con l'identità del dominio di provenienza. Ecco in seguito, la porzione di codice che gestisce questo meccanismo per il social network Facebook: private synchronized String managenewaccount(string accountstr) throws JADESecurityException { try { String[] ss = AMUSEUtils.extractCredentialsInfo(accountStr); String username = ss[0]; String password = ss[1]; String domain = AMUSEUtils.getDomain(username); // Check that the username does not contain the '_' special character used in agent names if (username.indexof(utils.agent_name_separator_string) > 0) { throw new JADESecurityException("Username cannot contain the '_' special character"); // Check that the username contain a domain if (domain.compareto("amuse") == 0){ // Check that the username does not exist yet. If not register the new account HibernateUtils.beginTransaction(); AccountDAO dao = new AccountDAOHibernate(HibernateUtils.getSession()); AccountPojo acnt = dao.getaccount(username); if (acnt == null) { acnt = new AccountPojo(); acnt.setusername(username); acnt.setpassword(password); dao.makepersistent(acnt); // Account creation OK mylogger.log(logger.info, "AuthenticationService - NEW Account successfully created. Username = "+username); return username; else { // Username already exist throw new JADESecurityException("Username "+username+" already in use"); 26

28 4.1 Implementazione Implementazione e Funzionamento else if (domain.compareto("facebook") == 0) { AccountDAOFacebook daofacebook = new AccountDAOFacebook(); //Check if the id coincide with the id associated at the access token if (daofacebook.verifyaccount(username, password)){ HibernateUtils.beginTransaction(); AccountDAO dao = new AccountDAOHibernate(HibernateUtils.getSession()); AccountPojo acnt = dao.getaccount(username); if (acnt == null) { acnt = new AccountPojo(); acnt.setusername(username); acnt.setpassword(password.substring(0, 30)); dao.makepersistent(acnt); // Account creation OK mylogger.log(logger.info, "AuthenticationService - NEW Account successfully created. Username = "+username); return username; else { return username; else { throw new JADESecurityException("Invalid facebook account"); else { throw new JADESecurityException("Username "+username+" does not contain a registered domain"); catch (JADESecurityException jse) { throw jse; catch (HibernateException he) { throw new JADESecurityException("Error creating account. "+he.getmessage()); catch (Exception e) { throw new JADESecurityException("Account "+accountstr+" does not 27

29 4.1 Implementazione Implementazione e Funzionamento have the expected form <username>:<password>"); finally { HibernateUtils.commitTransaction(); Come si può vedere, il metodo managenewaccount richiede come parametro una stringa: quest'ultima contiene le credenziali necessarie per la registrazione di un nuovo account. Nel caso in cui l'utente stesse tentando l'accesso tramite Facebook, la stringa prevista sarà formattata nel seguente modo: <IDFacebook>$FACEBOOK:<AccessToken>, dove l'id di Facebook, è una stringa numerica unica che rappresenta un account Facebook, mentre l'access Token è il Token di accesso rilasciato da Facebook. La stringa in ingresso viene spezzata attraverso il metodo, della classe AmuseUtils, extractcredentialsinfo(), il risultato viene poi assegnato alle variabile username; username quindi conterrà <IDFacebook>$FACEBOOK, mentre la password sarà <AccessToken>. Successivamente, con il metodo getdomain(), viene estratto il dominio all'interno dello username. A questo punto uno statement if controlla il contenuto della stringa domain, e di conseguenza sceglie la porzione di codice adatta al dominio. Nel caso di un account Facebook, per prima cosa viene creato un oggetto AccountDAOFacebook: con il suo metodo verifyaccount() è responsabile della verica delle credenziali Facebook. Questo metodo richiede come parametri due stringhe: la prima è l'id di Facebook, la seconda è l'access Token associato. public boolean verifyaccount(string username, String accesstoken) throws JADESecurityException { String id = username.replace("$facebook", ""); String urls = "https://graph.facebook.com/v2.3/me?fields=id&access_token=" +accesstoken; try { URL url = new URL(urlS); HttpURLConnection con = (HttpURLConnection) url.openconnection(); con.setrequestmethod("get"); int responsecode = con.getresponsecode(); if (responsecode!= 200) throw new JADESecurityException("Connection problem with 28

30 4.1 Implementazione Implementazione e Funzionamento Facebook Server"); else{ BufferedReader in = new BufferedReader( new InputStreamReader(con.getInputStream())); StringBuffer response = new StringBuffer(); String inputline; while ((inputline = in.readline())!= null) { response.append(inputline); in.close(); JSONObject object = new JSONObject(response.toString()); String idrequest = object.getstring("id"); if (id.compareto(idrequest) == 0) return true; catch (MalformedURLException e) { e.printstacktrace(); catch (ProtocolException e) { e.printstacktrace(); catch (IOException e) { e.printstacktrace(); catch (JSONException e) { e.printstacktrace(); return false; Nel codice si può notare che in questo caso non è stata usata nessuna Facebook SDK, questo perchè ancora non è stata rilasciata per il linguaggio di programmazione Java. Come prima cosa viene estratto l'id dell'account Facebook dalla stringa username, quindi si costruisce l'url necessario alla richiesta HTTP ai server Facebook per richiedere le informazioni necessarie alla convalida, ovvero l'id della'account Facebook associato all'access Token ricevuto. La risposta è formattata in stile JSON, è quindi necessario un parser apposito per l'interpretazione. Inne, estratto l'id dalla risposta, lo si confronta con l'id estratto dalla stringa username: se i due risultassero uguali ritornerà il valore booleano true, in caso contrario false. Successivamente, il controllo ritorna alla funzione managenewaccount, il quale inizia una transazione con il database: se esiste già un account con 29

31 4.1 Implementazione Implementazione e Funzionamento lo stesso username il login viene autorizzato, se non esiste viene creato un record all'interno della tabella User contenente lo username e una sottostringa dell'access Token. Quest'ultima modica non è rilevante, in quanto la password in un account Facebook non verrà mai richiesta. Oltre al metodo managenewaccount() è stato necessario apportare le stesse modiche al metodo authenticate(): il lato client di AMUSE salva all'interno del device le credenziali che hanno portato al successo una procedura di login. All'apertura dell'applicazione la classe LoginManager controlla la presenza o meno di queste credenziali e nel caso vengano trovate, esegue direttamente l'accesso senza richiederle all'utente: questa operazione esegue un login e non più una registrazione, per questo motivo a lato server viene chiamato il metodo authenticate(). public static String authenticate(string accountstr, Logger logger) throws JADESecurityException { try { String[] ss = AmuseUtils.extractCredentialsInfo(accountStr); String username = ss[0]; String password = ss[1]; String domain = AmuseUtils.getDomain(username); // Check that the username does not contain the '_' special character used in agent names if (username.indexof(amuseutils.agent_name_separator_string) > 0) { throw new JADESecurityException("Username cannot contain the '_' special character"); // Check that the username contain a domain if (domain.compareto("amuse") == 0){ // Check that the specified username and password corresponds to a valid account HibernateUtils.beginTransaction(); AccountDAO dao = new AccountDAOHibernate(HibernateUtils.getSession()); AccountPojo acnt = dao.getaccount(username); if (acnt!= null) { if (acnt.getpassword().equals(password)) { return username; else { 30

32 4.1 Implementazione Implementazione e Funzionamento throw new JADESecurityException("Incorrect password"); else { throw new JADESecurityException("Unknown username "+username); else if (domain.compareto("facebook") == 0) { AccountDAOFacebook daofacebook = new AccountDAOFacebook(); //Check if the id coincide with the id associated at the access token if (daofacebook.verifyaccount(username, password)){ return username; else { throw new JADESecurityException("Invalid facebook account"); else { throw new JADESecurityException("Username "+username+" does not contain a registered domain"); catch (JADESecurityException jse) { throw jse; catch (HibernateException he) { logger.log(logger.warning, "Error checking account "+accountstr, he); throw new JADESecurityException("Error checking account. "+he.getmessage()); catch (Exception e) { throw new JADESecurityException("Account "+accountstr+" does not have the expected form <username>:<password>"); finally { HibernateUtils.commitTransaction(); 31

33 4.1 Implementazione Implementazione e Funzionamento Il comportamento è identico al metodo managenewaccount(), manca soltanto il controllo e la scrittura sul database. A lato client le classi principali che gestiscono la procedura di autenticazione e di registrazione dell'attuale versione di AMUSE, sono le classi AmuseClient e LoginManager: la prima si occupa della connessione con il server, mentre la seconda è responsabile della cattura delle credenziali inserite dall'utente. É stato dunque necessario implementare un meccanismo in grado di ottenere le giuste informazioni da Facebook e di inviare quest'ultime al server AMUSE. Di seguito, una porzione di codice presa dall'activity principale dell'applicazione. public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main_activity_layout); AvatarManager.initialize(R.drawable.ic_launcher, null, -1, -1); AmuseUtils.registerDomain("FACEBOOK"); loginmanager = new DefaultLoginManager(this); loginmanager.setvisibleloginfields(new int[]{r.id.loginform); // Connect to the Amuse server ((MyApp) getapplication()).connect(loginmanager, new Callback<Void>() {... Come si può vedere, una delle prime chiamate è al metodo registerdomain() della classe AmuseUtils. Questo metodo è essenziale per il corretto funzionamento dell'architettura in quanto permette di superare i controlli eseguiti nel metodo createcredentials() della classe AmuseUtils. Infatti, createcredentials(), dati in input uno username e una password, controlla la presenza di eventuali caratteri speciali, tra i quali anche il $, e in caso aermativo, lancia un'eccezione e termina la procedura di login; in caso contrario ritorna una stringa formattata secondo gli standard AMUSE pronta per essere inviata al server. É stata, dunque, necessaria una modica a quest'ultimo metodo. public static String createcredentials(string username, String password) throws IllegalArgumentException { if (username == null username.length() == 0) { 32

34 4.1 Implementazione Implementazione e Funzionamento throw new IllegalArgumentException("Username non specificato"); if (username.contains(":") username.contains(agent_name_separator_string) username.contains(" ") username.contains("#")) { throw new IllegalArgumentException("Username invalido: lo username puo' contenere solo caratteri alfanumerici"); // If the username contains the domain-separator check that the substring following it is one of the registered domains int k = username.indexof(domain_separator_string); if (k > 0) { String d = username.substring(k+1); if (!domains.contains(d)) { throw new IllegalArgumentException("Username invalido: lo username puo' contenere solo caratteri alfanumerici"); // Password is not checked or obfuscated in case the user belongs to a registered domain return username+":"+password; else { if (password == null password.length() == 0) { throw new IllegalArgumentException("Password non specificata"); String encodedpassword = Obfuscator.obfuscate(password); return username+":"+encodedpassword; Al controllo sulla presenza dei caratteri speciali è stata aggiunta una clausula nel caso venga trovato all'interno della stringa username il carattere $: se la sottostringa a destra del carattere speciale è una stringa uguale a un dominio registrato con il metodo registerdomain() il metodo ritorna una stringa formattata nello standard AMUSE contenente le credenziali, in caso contrario lancia un'eccezione. Da notare che la password, ovvero l'access Token, in questo caso non viene ouscato, questo perché il server ha bisogno che l'access Token sia in chiaro per poter autenticare l'accesso. All'interno della classe principale dell'applicazione, sarà presente il metodo facebooklogin(): 33

35 4.1 Implementazione Implementazione e Funzionamento public void facebooklogin(string username, String password) { loginmanager.logindone(new LoginInfo(username, password, true)); Questo metodo, sarà invocato una volta ricevute le credenziali dai server Facebook, e permetterà l'accesso al sever AMUSE con il metodo logindone(). Per ottenere le informazioni relative all'account Facebook, è necessario implementare il Login tramite Facebook usando la Facebook SDK. Quest'ultima mette a disposizione una serie di classi e di metodi che aiutano lo sviluppatore a sfruttare i diversi servizi Facebook. Prima di poterla utilizzare, l'sdk deve essere inizializzata all'interno dell'applicazione: questo passo è possibile farlo con il metodo sdkinitialize(): private CallbackManager callbackmanager; public void oncreate(){ super.oncreate() FacebookSdk.sdkInitialize(getActivity()); callbackmanager = CallbackManager.Factory.create();... Per implementare il Login tramite Facebook può essere utilizzata la classe LoginButton, contenuto nel package com.facebook.login.widget. LoginButton è una view di Android che estende la classe Button e che disegna a schermo il classico bottone di Login di Facebook. Per aggiungere la view LoginButton a un'applicazione Android, è necessario scrivere all'interno del le XML dell'interfaccia graca dell'activity il tag: <com.facebook.login.widget.loginbutton android:layout_width="wrap_content" android:layout_height="wrap_content" /> Una volta stabilita la posizione all'interno dell'interfaccia graca, è possibile settare le Permissions e la callback da eseguire non appena il Login tramite Facebook è stato eseguito. Con i metodi setreadpermissions() e setpublishpermissions() è possibile aggiungere delle Permission al Login, in 34

36 4.1 Implementazione Implementazione e Funzionamento modo tale da poter accedere alle informazioni necessarie contenute sul prolo Facebook. Per registrare la callback si utilizza il metodo registercallback(), il quale richiede in input un oggetto CallbackManager() e una FacebookCallback. La classe CallbackManager si occupa di gestire e registrare le callback all'interno dell'sdk, mentre FacebookCallback è un oggetto callback che contiene al suo interno tre metodi: onsuccess(), invocato nel caso il login su Facebook sia andato a buon ne, oncancel(), invocato nel caso l'utente riuti tutte le Permissions richieste, e onerror(), invocato quando succede qualcosa di inaspettato durante la procedura di login. Di seguito un esempio di come è stato implementato questo meccanismo: loginbutton = (LoginButton) view.findviewbyid(r.id.facebook_login_button); loginbutton.setreadpermissions("user_friends"); // Callback registration loginbutton.registercallback(callbackmanager, new FacebookCallback<LoginResult>() public void onsuccess(loginresult loginresult) { GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() public void oncompleted(jsonobject object, GraphResponse response) { if (object!= null) { try { String id = object.getstring("id")+"$facebook"; facebooklogin(id, AccessToken.getCurrentAccessToken().getToken()); catch (JSONException e) { e.printstacktrace(); ); Bundle parameters = new Bundle(); parameters.putstring("fields", "id"); request.setparameters(parameters); 35

37 4.1 Implementazione Implementazione e Funzionamento public void oncancel() { // App public void onerror(facebookexception exception) { //App code ); Nel caso il login abbia avuto successo, l'oggetto LoginResult contiene al suo interno il nuovo Access Token generato. Nella chiamata onsuccess della FacebookCallback, viene eettuta una richiesta tramite la classe GraphRequest. Questa classe, è messa a disposizione dalla Facebook SDK per Android e permette di interagire con le Graph API. In particolare, con il metodo newmerequest() è possibile richiedere le informazioni relative all'account associato all'access Token appena generato. La costruzione della richiesta è semplice: come parametri di input richiede un Access Token e una callback GraphJSONObjectCallback, nella quale sarà necessario fare l'override del metodo oncomplete(). Il metodo callback oncomplete() riceve come parametri due oggetti: un JSONobject, che contiene la risposta del server formattata in stile JSON, e un GraphResponse che contiene, oltre alla risposta, altre informazioni relative ad essa. Settata la callback, è possibile richiedere speciche informazioni alla richiesta aggiungendo parametri con il metodo setparameters() della class GrapRequest. Per eseguire la richiesta, è necessario invocare il metodo executeasync(), il quale permette l'esecuzione della richiesta su un thread secondario in modo tale da non bloccare l'esecuzione dell'applicazione. Per completare l'implementazione, è indispensabile eettuare l'override del metodo onactivityresult() dell'activity e richiamare al suo interno il metodo onactivityresult() dell'oggetto public void onactivityresult(int requestcode, int resultcode, Intent data) { super.onactivityresult(requestcode, resultcode, data); callbackmanager.onactivityresult(requestcode, resultcode, data); 36

38 4.1 Implementazione Implementazione e Funzionamento Questo metodo permetterà all'applicazione di raccogliere i risultati del Login Implementazione di Trova Amici Per implementare la funzione Trova Amici, è stato scelta la soluzione diretta descritta nel capitolo precedente, per questo motivo non sono state necessarie modiche al server AMUSE: per la ricerca degli amici vengono contattati direttamente i server di Facebook. Grazie alle Graph API di Facebook è possibile ricevere gli amici dell'utente che hanno eseguito il login tramite la Facebook App creata. La richiesta HTTP da eseguire è la seguente: GET /v2.3/me/friends HTTP/1.1 Host: graph.facebook.com Per l'esecuzione di questa richiesta, l'utente al momento del login deve accettare la Permission user_friends, che da accesso alla lista amici dell'utente. La Facebook SDK per Android permette di eseguire la richiesta tramite il metodo newmyfriendsrequest() della classe GraphRequest, già descritta precedentemente. Un esempio di implementazione è il seguente: GraphRequest.newMyFriendsRequest(AccessToken.getCurrentAccessToken(), new GraphJSONArrayCallback() public void oncompleted(jsonarray objects, GraphResponse response) { for (int i=0; i<objects.length(); i++){ try { JSONObject friend = objects.getjsonobject(i); String name = friend.getstring("name"); String id = friend.getstring("id"); Profile p = new Profile(id, null, null, null, name, null); facebookfriendslist.add(p); catch (JSONException e) { e.printstacktrace(); friendsadapter.notifydatasetchanged(); 37

39 4.1 Implementazione Implementazione e Funzionamento ).executeasync(); Il metodo newmyfriendsrequest() richiede come input due parametri: un Access Token e una callback di tipo GraphJSONArrayCallback contenente un metodo oncomplete(), il quale verrà invocato una volta ricevuto il risultato. Il risultato è contenuto in un oggetto JSONArray che ha al suo interno l'id Facebook e il nome degli amici. In questo caso, per ogni amico viene creato un oggetto Prole. La classe Prole, messa a disposizione dalla Facebook SDK per Android, è un oggetto in grado di rappresentare un prolo Facebook. In seguito l'oggetto Prole è aggiunto alla lista degli amici di Facebook, la quale è usata da contenitore nell'adapter friendsadapter. Questo meccanismo ha lo scopo di disegnare a schermo la lista degli amici, ragurata da una ListView. Per selezionare uno o più amici con cui giocare basterà toccare lo schermo su uno o più di essi: il tocco sarà gestito dal metodo setonitemclicklistener() della classe ListView, il quale aggiungerà o toglierà, a una lista rappresentante gli amici invitati, l'amico selezionato. facebookfriendslistview.setonitemclicklistener(new OnItemClickListener() public void onitemclick(adapterview<?> parent, View view, int position, long id) { ImageView friendfacebookselect = (ImageView) view.findviewbyid(r.id.facebook_friend_selected); String usernamefriend = facebookfriendslist.get(position).getid()+"$facebook"; if (friendfacebookselect.getvisibility() == View.VISIBLE) { friendfacebookselect.setvisibility(view.invisible); invitedfriends.remove(usernamefriend); else { friendfacebookselect.setvisibility(view.visible); invitedfriends.add(usernamefriend); ); Ad ogni ID Facebook della lista viene aggiunta la stringa $FACEBOOK come postsso, questo permette al server di riconoscere gli account Facebook, 38

40 4.2 Funzionamento Implementazione e Funzionamento i quali sono salvati, all'interno del database del server AMUSE, nella forma <IDFacebook>$FACEBOOK dalla procedura di registrazione di un nuovo account. Una volta scelti gli amici con cui giocare, basterà chiamare il metodo createtable()della classe GamesRoomFeature, passandogli la lista degli amici selezionati come parametro, il quale richiederà al server di creare un tavolo insieme suddetti. 4.2 Funzionamento Per mostrare il funzionamento del lavoro di tesi, queste feature sono state implementate in un'applicazione AMUSE-based da me creata: Wadoku. Wadoku è un gioco multi-player online il cui scopo è quello di far competere i giocatori per completare, inserendo più numeri possibile, una griglia Sudoku. Si gioca tutti contro tutti: per ogni numero inserito correttamente saranno assegnati tre punti e comparirà anche nelle tabelle degli altri giocatori; per ogni numero errato varrà tolto un punto. Il gioco prevede al massimo quattro giocatori e il giocatore con il punteggio più alto vince il match. La schermata di accesso dell'applicazione prevede due campi testo con i relativi bottoni di Login o Register insieme al bottone di colore blu con la scritta Login with Facebook. Figura 4.1: Schermata di Login 39

41 4.2 Funzionamento Implementazione e Funzionamento Premendo sul tasto Login with Facebook verrà aperta una dialog per l'accettazione delle Permission, in questa applicazione saranno richieste le Permission user_friends e public_prole. Figura 4.2: Schermata richiesta Permission Accettate le Permission, avremo eseguito l'accesso all'interno di AMUSE con la nostra identità Facebook. La schermata principale dell'applicazione prevede quattro bottoni. Premendo su Start a new Match l'applicazione si metterà in ricerca di altri 40

PROGETTO - Ingegneria del Software. Università degli Studi di Milano Polo di Crema. Corso di laurea in Scienze Matematiche, Fisiche e Naturali

PROGETTO - Ingegneria del Software. Università degli Studi di Milano Polo di Crema. Corso di laurea in Scienze Matematiche, Fisiche e Naturali Università degli Studi di Milano Polo di Crema Corso di laurea in Scienze Matematiche, Fisiche e Naturali INFORMATICA Corso di Ingegneria del Software progetto IL SISTEMA CALENDAR Presentato al dott. Paolo

Dettagli

Walter Martino per Lhg12 Socialnetworks

Walter Martino per Lhg12 Socialnetworks Walter Martino per Lhg12 Socialnetworks Lighthousegenova12.org 1 Origine dei socialnetworks Socialnetwork - servizio di rete sociale. Negli USA un gruppo di studenti universitari, per tenersi in contatto

Dettagli

Istituto Tecnico Industriale Statale Dionigi Scano Cagliari. Candidato: Medda Daniele Classe 5ª C Informatica Anno scolastico 2013/2014.

Istituto Tecnico Industriale Statale Dionigi Scano Cagliari. Candidato: Medda Daniele Classe 5ª C Informatica Anno scolastico 2013/2014. Istituto Tecnico Industriale Statale Dionigi Scano Cagliari Candidato: Medda Daniele Classe 5ª C Informatica Anno scolastico 2013/2014 relate Un esperimento di social networking open source 1 Introduzione

Dettagli

Nuvola It Data Space

Nuvola It Data Space MANUALE UTENTE INDICE 1. Descrizione servizio... 3 1.1. Informazioni sul servizio di Telecom Italia... 3 1.2. Ruoli e Autenticazione per il servizio di Telecom Italia... 3 1.3. Strumenti... 5 1.4. Documentazione...

Dettagli

Programmazione in ambiente

Programmazione in ambiente Università Politecnica delle Marche Dipartimento di Ingegneria dell Informazione Programmazione in ambiente Android Laura Montanini - laura.montanini@univpm.it Corso di Tecnologie per le TLC 2013-2014

Dettagli

Introduzione al linguaggio Java: Servlet e JSP

Introduzione al linguaggio Java: Servlet e JSP Introduzione al linguaggio Java: Servlet e JSP Corso di Gestione della Conoscenza d Impresa A. A. 2006/2007 Dipartimento di Informatica Università degli Studi di Bari 1 Servlet e JSP: il contesto Un applicazione

Dettagli

Riferimento rapido di Novell Vibe Mobile

Riferimento rapido di Novell Vibe Mobile Riferimento rapido di Novell Vibe Mobile Marzo 2015 Introduzione L'accesso mobile al sito di Novell Vibe può essere disattivato dall'amministratore di Vibe. Se non si riesce ad accedere all'interfaccia

Dettagli

Programmabilità di rete con l'infrastruttura Cisco basata sulle applicazioni

Programmabilità di rete con l'infrastruttura Cisco basata sulle applicazioni White paper Programmabilità di rete con l'infrastruttura Cisco basata sulle applicazioni Panoramica Questo documento analizza il supporto alla programmabilità nell'infrastruttura ACI (Application Centric

Dettagli

MOBILE WEB DESIGN TUTORIAL ANDROID METAIO AUGMENTED REALITY

MOBILE WEB DESIGN TUTORIAL ANDROID METAIO AUGMENTED REALITY MOBILE WEB DESIGN TUTORIAL ANDROID METAIO AUGMENTED REALITY 1 Sommario 1. INTRODUZIONE... 3 2. GET METAIO... 4 2.1. PREREQUISITI... 4 2.2. INTALLAZIONE... 4 2.3. PROGETTI ESEMPLIFICATIVI... 4 3. USARE

Dettagli

Progetto Febbraio 2013 - Appello 1: Diffusione di tweets sul grafo di Twitter

Progetto Febbraio 2013 - Appello 1: Diffusione di tweets sul grafo di Twitter UNIVERSITÀ DEGLI STUDI DI MILANO, DIPARTIMENTO DI INFORMATICA LAUREA TRIENNALE IN COMUNICAZIONE DIGITALE CORSO DI RETI DI CALCOLATORI ANNO ACCADEMICO 2011/2012 Progetto Febbraio 2013 - Appello 1: Diffusione

Dettagli

BlackBerry Internet Service Uso del browser dello smartphone BlackBerry Versione: 2.8. Manuale dell'utente

BlackBerry Internet Service Uso del browser dello smartphone BlackBerry Versione: 2.8. Manuale dell'utente BlackBerry Internet Service Uso del browser dello smartphone BlackBerry Versione: 2.8 Manuale dell'utente SWDT653811-793266-0827030425-004 Indice Guida introduttiva... 2 Informazioni sui piani di servizi

Dettagli

GEODROP APPLICATIONS. Developer. Public. Private. Reseller

GEODROP APPLICATIONS. Developer. Public. Private. Reseller GEODROP APPLICATIONS Public Developer Reseller Private Le Applicazioni di Geodrop Guida per Developer alle Applicazioni Guida alle applicazioni v1.1-it, 21 Dicembre 2012 Indice Indice...2 Cronologia delle

Dettagli

Internet Architettura del www

Internet Architettura del www Internet Architettura del www Internet è una rete di computer. Il World Wide Web è l insieme di servizi che si basa sull architettura di internet. In una rete, ogni nodo (detto host) è connesso a tutti

Dettagli

Software per la gestione di musei di arte contemporanea1

Software per la gestione di musei di arte contemporanea1 Software per la gestione di musei di arte contemporanea1 Identificativo del progetto: CA Nome documento: System Design(SD) Identificativo del documento: 6 CA_SD_E1_R1 Data del documento: 21/05/2012 Prima

Dettagli

Livello cinque (Livello application)

Livello cinque (Livello application) Cap. VII Livello Application pag. 1 Livello cinque (Livello application) 7. Generalità: In questo livello viene effettivamente svolto il lavoro utile per l'utente, contiene al suo interno diverse tipologie

Dettagli

BlackBerry Internet Service Uso del browser dello smartphone BlackBerry Versione: 2.6. Manuale dell'utente

BlackBerry Internet Service Uso del browser dello smartphone BlackBerry Versione: 2.6. Manuale dell'utente BlackBerry Internet Service Uso del browser dello smartphone BlackBerry Versione: 2.6 Manuale dell'utente SWDT228826-600991-0122103435-004 Indice Guida introduttiva... 2 Informazioni di base sul sito Web

Dettagli

Sistemi Mobili e Wireless Android Introduzione alla piattaforma

Sistemi Mobili e Wireless Android Introduzione alla piattaforma Sistemi Mobili e Wireless Android Introduzione alla piattaforma Stefano Burigat Dipartimento di Matematica e Informatica Università di Udine www.dimi.uniud.it/burigat stefano.burigat@uniud.it Cos'è Android?

Dettagli

Specifiche Tecnico-Funzionali

Specifiche Tecnico-Funzionali AuthSIAR - Modulo di Autenticazione e Autorizzazione Sardegna IT S.r.l. Analisi Tecnico-Funzionale Assessorato all Agricoltura della Regione Sardegna SIAR Sistema Informativo Agricolo Regionale AuthSIAR

Dettagli

BlackBerry Internet Service Uso dell'applicazione di configurazione della posta elettronica dello smartphone BlackBerry Versione: 2.

BlackBerry Internet Service Uso dell'applicazione di configurazione della posta elettronica dello smartphone BlackBerry Versione: 2. BlackBerry Internet Service Uso dell'applicazione di configurazione della posta elettronica dello smartphone BlackBerry Versione: 2.6 Manuale dell'utente SWDT229221-613076-0127040357-004 Indice Guida introduttiva...

Dettagli

Sistema integrato dei portali RAS: specifiche di integrazione

Sistema integrato dei portali RAS: specifiche di integrazione Sistema integrato dei portali RAS: specifiche di integrazione Linee guida tecniche per l'integrazione con il presentation layer del CMS RAS Data: File: Allegato 3 - Specifiche di integrazione SIP-RAS.odt

Dettagli

Tecniche di progettazione e sviluppo di applicazioni mobile

Tecniche di progettazione e sviluppo di applicazioni mobile Slide del corso FSE Tecniche di progettazione e sviluppo di applicazioni mobile svolto presso AREA Science Park Padriciano - Trieste - Italy diegozabot@yahoo.it Android Introduzione diegozabot@yahoo.it

Dettagli

Session tracking Session tracking HTTP: è stateless, cioè non permette di associare una sequenza di richieste ad un dato utente. Ciò vuol dire che, in generale, se un browser richiede una specifica pagina

Dettagli

BlackBerry Internet Service Versione: 3.1. Manuale dell'utente

BlackBerry Internet Service Versione: 3.1. Manuale dell'utente BlackBerry Internet Service Versione: 3.1 Manuale dell'utente SWDT987396-1026956-0512110918-004 Indice Guida introduttiva... 2 Informazioni sui piani di servizi di messaggistica di BlackBerry Internet

Dettagli

Manuale LiveBox APPLICAZIONE IOS V. 3.0.3 (465) http://www.liveboxcloud.com

Manuale LiveBox APPLICAZIONE IOS V. 3.0.3 (465) http://www.liveboxcloud.com 2015 Manuale LiveBox APPLICAZIONE IOS V. 3.0.3 (465) http://www.liveboxcloud.com LiveBox Srl non rilascia dichiarazioni o garanzie in merito al contenuto o uso di questa documentazione e declina qualsiasi

Dettagli

Carte Laurea triennale in Comunicazione Digitale Laboratorio di Informatica Generale

Carte Laurea triennale in Comunicazione Digitale Laboratorio di Informatica Generale Appelli di gennaio, febbraio e aprile 2005 Carte Laurea triennale in Comunicazione Digitale Laboratorio di Informatica Generale 1 Descrizione Il progetto consiste nel realizzare un programma per gestire

Dettagli

Manuale LiveBox APPLICAZIONE IOS. http://www.liveboxcloud.com

Manuale LiveBox APPLICAZIONE IOS. http://www.liveboxcloud.com 2014 Manuale LiveBox APPLICAZIONE IOS http://www.liveboxcloud.com LiveBox Srl non rilascia dichiarazioni o garanzie in merito al contenuto o uso di questa documentazione e declina qualsiasi garanzia espressa

Dettagli

Indice: Introduzione 1 Strumenti di lavoro 2 Istallare Eclipse e SDK 3 Istallare l ADT in eclipse 4. Powered by: Vincenzo Acinapura

Indice: Introduzione 1 Strumenti di lavoro 2 Istallare Eclipse e SDK 3 Istallare l ADT in eclipse 4. Powered by: Vincenzo Acinapura Indice: Introduzione 1 Strumenti di lavoro 2 Istallare Eclipse e SDK 3 Istallare l ADT in eclipse 4 Introduzione Salve a tuttiù Mi presento mi chiamo Vincenzo Acinapura e studio ingegneria informatica,

Dettagli

ANDROID 4.2 JELLY BEAN Installazione e configurazione dell ambiente

ANDROID 4.2 JELLY BEAN Installazione e configurazione dell ambiente INTRODUZIONE Per sviluppare applicazioni in grado di girare su sistemi Android servono tre cose: il Java JDK (Java Development Kit), che contiene tutti gli strumenti necessari a sviluppare nel linguaggio

Dettagli

maildocpro Manuale Installazione

maildocpro Manuale Installazione maildocpro Manuale Installazione versione 3.4 maildocpro Manuale Installazione - Versione 3.4 1 Indice Indice... 2 Creazione database... 3 Database: MAILDOCPRO... 3 Database: SILOGONWEB... 5 Configurazione

Dettagli

Il linguaggio C# Eventi ed eccezioni

Il linguaggio C# Eventi ed eccezioni Tecniche di Programmazione avanzata Corso di Laurea Specialistica in Ingegneria Telematica Università Kore Enna A.A. 2009-2010 Alessandro Longheu http://www.diit.unict.it/users/alongheu alessandro.longheu@diit.unict.it

Dettagli

Verifica utente integrata Guida all'implementazione per il cliente 2015-05-04 Riservato Versione 2.9

Verifica utente integrata Guida all'implementazione per il cliente 2015-05-04 Riservato Versione 2.9 Verifica utente integrata Guida all'implementazione per il cliente 2015-05-04 Riservato Versione 2.9 INDICE Introduzione... 2 Scopo e destinatari... 2 Informazioni sul documento... 2 Termini comunemente

Dettagli

Manuale LiveBox WEB ADMIN. http://www.liveboxcloud.com

Manuale LiveBox WEB ADMIN. http://www.liveboxcloud.com 2014 Manuale LiveBox WEB ADMIN http://www.liveboxcloud.com LiveBox Srl non rilascia dichiarazioni o garanzie in merito al contenuto o uso di questa documentazione e declina qualsiasi garanzia espressa

Dettagli

Ambiente Virtuale Inclusivo per la Persona Autistica MANUALE OPERATORE. Release 1.0-13/10/09. Copyright Lynx 2009 http://www.lynxlab.

Ambiente Virtuale Inclusivo per la Persona Autistica MANUALE OPERATORE. Release 1.0-13/10/09. Copyright Lynx 2009 http://www.lynxlab. MANUALE OPERATORE Release 1.0-13/10/09 Copyright Lynx 2009 http://www.lynxlab.com Indice generale MANUALE OPERATORE...1 1.1 Definizioni...3 1.2 Ambienti...3 1.3 Release e copyright...3 2. Utenti...4 2.1

Dettagli

Laboratorio Reti di Calcolatori Laurea Triennale in Comunicazione Digitale. Anno Accademico 2013/2014

Laboratorio Reti di Calcolatori Laurea Triennale in Comunicazione Digitale. Anno Accademico 2013/2014 Laboratorio Reti di Calcolatori Laurea Triennale in Comunicazione Digitale Anno Accademico 2013/2014 Creazione App FB 1. App Dashboard https://developers.facebook.com/apps e cliccare su «+Crea Applicazione»

Dettagli

Applicazioni web. Sommario. Parte 6 Servlet Java. Applicazioni web - Servlet. Alberto Ferrari 1. Servlet Introduzione alle API ed esempi

Applicazioni web. Sommario. Parte 6 Servlet Java. Applicazioni web - Servlet. Alberto Ferrari 1. Servlet Introduzione alle API ed esempi Applicazioni web Parte 6 Java Alberto Ferrari 1 Sommario Introduzione alle API ed esempi Tomcat Server per applicazioni web Alberto Ferrari 2 Alberto Ferrari 1 Java: da applet a servlet In origine Java

Dettagli

News sharing. Matteo Zignani. 21 dicembre 2013

News sharing. Matteo Zignani. 21 dicembre 2013 UNIVESITÁ DEGLI STUDI DI MILANO LAUREA TRIENNALE IN COMUNICAZIONE DIGITALE PROGETTO LABORATORIO DI RETI DI CALCOLATORI News sharing Matteo Zignani 21 dicembre 2013 1 PRESENTAZIONE DEL PROBLEMA Un elemento

Dettagli

Manuale LiveBox APPLICAZIONE ANDROID. http://www.liveboxcloud.com

Manuale LiveBox APPLICAZIONE ANDROID. http://www.liveboxcloud.com 2014 Manuale LiveBox APPLICAZIONE ANDROID http://www.liveboxcloud.com LiveBox Srl non rilascia dichiarazioni o garanzie in merito al contenuto o uso di questa documentazione e declina qualsiasi garanzia

Dettagli

Installazione Client/Server

Installazione Client/Server Installazione Client/Server Sommario 1. Moduli di BIM...3 2. Installazione della suite...5 3. Configurazione moduli...9 3.1. BIMVision / BIMReader...9 3.1.1. Configurazione file di amministrazione...9

Dettagli

Università degli Studi di Bologna Facoltà di Ingegneria. Tecnologie Web L-A A.A. 2014 2015. Esercitazione 08 DAO e Hibernate

Università degli Studi di Bologna Facoltà di Ingegneria. Tecnologie Web L-A A.A. 2014 2015. Esercitazione 08 DAO e Hibernate Università degli Studi di Bologna Facoltà di Ingegneria Tecnologie Web L-A A.A. 2014 2015 Esercitazione 08 DAO e Hibernate Agenda Pattern DAO e framework Hibernate progetto d'esempio relativo alla gestione

Dettagli

DATABASE IN RETE E PROGRAMMAZIONE LATO SERVER

DATABASE IN RETE E PROGRAMMAZIONE LATO SERVER DATABASE IN RETE E PROGRAMMAZIONE LATO SERVER L architettura CLIENT SERVER è l architettura standard dei sistemi di rete, dove i computer detti SERVER forniscono servizi, e computer detti CLIENT, richiedono

Dettagli

Manuale LiveBox WEB ADMIN. http://www.liveboxcloud.com

Manuale LiveBox WEB ADMIN. http://www.liveboxcloud.com 2014 Manuale LiveBox WEB ADMIN http://www.liveboxcloud.com LiveBox Srl non rilascia dichiarazioni o garanzie in merito al contenuto o uso di questa documentazione e declina qualsiasi garanzia espressa

Dettagli

Manuale LiveBox APPLICAZIONE ANDROID. http://www.liveboxcloud.com

Manuale LiveBox APPLICAZIONE ANDROID. http://www.liveboxcloud.com 2014 Manuale LiveBox APPLICAZIONE ANDROID http://www.liveboxcloud.com LiveBox Srl non rilascia dichiarazioni o garanzie in merito al contenuto o uso di questa documentazione e declina qualsiasi garanzia

Dettagli

SMS API. Documentazione Tecnica YouSMS HTTP API. YouSMS Evet Limited 2015 http://www.yousms.it

SMS API. Documentazione Tecnica YouSMS HTTP API. YouSMS Evet Limited 2015 http://www.yousms.it SMS API Documentazione Tecnica YouSMS HTTP API YouSMS Evet Limited 2015 http://www.yousms.it INDICE DEI CONTENUTI Introduzione... 2 Autenticazione & Sicurezza... 2 Username e Password... 2 Connessione

Dettagli

Sommario. 1. Introduzione.2. 2. Pre-requisiti.. 3. 3. Specifiche tecniche...4. 4. Parametri e variabili..5. 5. Tutela della Privacy...

Sommario. 1. Introduzione.2. 2. Pre-requisiti.. 3. 3. Specifiche tecniche...4. 4. Parametri e variabili..5. 5. Tutela della Privacy... Accesso al servizio Sms Gateway Release 1.5.0 (ultimo aggiornamento 12 ottobre 2002) Sommario 1. Introduzione.2 2. Pre-requisiti.. 3 3. Specifiche tecniche......4 4. Parametri e variabili..5 5. Tutela

Dettagli

Manuale LiveBox WEB ADMIN. http://www.liveboxcloud.com

Manuale LiveBox WEB ADMIN. http://www.liveboxcloud.com 2015 Manuale LiveBox WEB ADMIN http://www.liveboxcloud.com LiveBox Srl non rilascia dichiarazioni o garanzie in merito al contenuto o uso di questa documentazione e declina qualsiasi garanzia espressa

Dettagli

Programmazione Android

Programmazione Android Programmazione Android Giovanni Perbellini, Stefano Cordibella Università di Verona EDALab S.r.l. Agenda Introduzione Android Overview Ambiente di sviluppo Esempi Helloworld Weather 2 1 Cos è Android?

Dettagli

createsession existssession alivesession deletesession deleteallsession getcredit getcreditsubaccount addtransactionsubaccount addsubaccount

createsession existssession alivesession deletesession deleteallsession getcredit getcreditsubaccount addtransactionsubaccount addsubaccount PROTOCOLLO DI INVIO SOAP SOAP è un protocollo per lo scambio di messaggi basato su protocollo HTTP e scambio dei dati in XML, quindi disponibile per qualsiasi piattaforma/linguaggio di programmazione,

Dettagli

Applicazioni web. Parte 5 Socket

Applicazioni web. Parte 5 Socket Agent and Object Technology Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma Applicazioni web Parte 5 Michele Tomaiuolo tomamic@ce.unipr.it Protocolli Internet I computer

Dettagli

Il tuo manuale d'uso. BLACKBERRY INTERNET SERVICE http://it.yourpdfguides.com/dref/1117397

Il tuo manuale d'uso. BLACKBERRY INTERNET SERVICE http://it.yourpdfguides.com/dref/1117397 Può anche leggere le raccomandazioni fatte nel manuale d uso, nel manuale tecnico o nella guida di installazione di. Troverà le risposte a tutte sue domande sul manuale d'uso BLACKBERRY INTERNET SERVICE

Dettagli

Manuale d'uso del Microsoft Apps for Symbian

Manuale d'uso del Microsoft Apps for Symbian Manuale d'uso del Microsoft Apps for Symbian Edizione 1.0 2 Informazioni su Microsoft Apps Informazioni su Microsoft Apps Microsoft Apps incorpora le applicazioni aziendali di Microsoft nel telefono Nokia

Dettagli

SESSION TRACKING DISPENSE

SESSION TRACKING DISPENSE SESSION TRACKING DISPENSE SESSION TRACKING Sessione: In modo generico potremmo dire che una sessione consiste in tutto il tempo in cui un utente, scambiando informazioni con il server, può dire di aver

Dettagli

Programmazione Java Avanzata

Programmazione Java Avanzata Programmazione Java Avanzata Accesso ai Dati Ing. Giuseppe D'Aquì Testi Consigliati Eclipse In Action Core J2EE Patterns - DAO [http://java.sun.com/blueprints/corej2eepatterns/patterns/dataaccessobject.html]

Dettagli

APPENDICE A Servlet e Java Server Page

APPENDICE A Servlet e Java Server Page APPENDICE A Servlet e Java Server Page A.1 Cosa è una Servlet e come funziona Una servlet è un particolare tipo di applicazione Java, in grado di essere eseguita all'interno di un web server e di estenderne

Dettagli

La Document Orientation. Come implementare un interfaccia

La Document Orientation. Come implementare un interfaccia La Document Orientation Come implementare un interfaccia Per eliminare l implementazione di una interfaccia da parte di una classe o documento, occorre tirarla su di esso tenendo premuto il tasto ctrl.

Dettagli

Gestione password: KeePass e DropBox

Gestione password: KeePass e DropBox Gestione password: KeePass e DropBox 1 / 52 Questo tutorial è rilasciato con la licenza Creative Commons Attribuzione-Non commerciale-non opere derivate 2.5, consultabile all indirizzo http://creativecommons.org/licenses/by-nc-nd/2.5/deed.it.

Dettagli

Istruzioni per il server

Istruzioni per il server Istruzioni per il server Alessandro Bugatti (alessandro.bugatti@istruzione.it) 9 dicembre 2007 Introduzione Questa breve dispensa riassume brevemente le procedure per connettersi al server che ci permetterà

Dettagli

Seagate Access per Personal Cloud Manuale utente

Seagate Access per Personal Cloud Manuale utente Seagate Access per Personal Cloud Manuale utente 2015 Seagate Technology LLC. Tutti i diritti riservati. Seagate, Seagate Technology, il logo Wave e FreeAgent sono marchi depositati o marchi registrati

Dettagli

L ambiente di sviluppo Android Studio

L ambiente di sviluppo Android Studio L ambiente di sviluppo Android Studio Android Studio è un ambiente di sviluppo integrato (IDE, Integrated Development Environment) per la programmazione di app con Android. È un alternativa all utilizzo

Dettagli

LAVORI ESTIVI DI INFORMATICA PER LA CLASSE IV Sez. Ainf (Prof. Tessore Luca)

LAVORI ESTIVI DI INFORMATICA PER LA CLASSE IV Sez. Ainf (Prof. Tessore Luca) Ministero dell Istruzione, dell Università e della Ricerca Istituto Tecnico Industriale Statale Enrico Mattei Via Martiri di Cefalonia 46-20097 San Donato Milanese Tel. 0255691411 - Fax 025276676 itisando@tin.it

Dettagli

Caratteristiche principali. la struttura open source (escluse alcune versioni intermedie) il suo basarsi su kernel Linux.

Caratteristiche principali. la struttura open source (escluse alcune versioni intermedie) il suo basarsi su kernel Linux. Android s.o. Androidè un sistema operativo per dispositivi mobili costituito da uno stack software che include: un sistema operativo di base, i middleware per le comunicazioni le applicazioni di base.

Dettagli

BlackBerry Internet Service. Versione: 4.5.1. Manuale utente

BlackBerry Internet Service. Versione: 4.5.1. Manuale utente BlackBerry Internet Service Versione: 4.5.1 Manuale utente Pubblicato: 08/01/2014 SWD-20140108162104132 Contenuti 1 Guida introduttiva... 7 Informazioni sui piani dei servizi di messaggistica di BlackBerry

Dettagli

Corso di Applicazioni Telematiche

Corso di Applicazioni Telematiche Asynchronous JavaScript Technology and XML: Ajax Corso di Applicazioni Telematiche A.A. 2010-11 Prof. Simon Pietro Romano Università degli Studi di Napoli Federico II Facoltà di Ingegneria Rich Internet

Dettagli

Guida introduttiva all'applicazione web

Guida introduttiva all'applicazione web Guida introduttiva all'applicazione web L'applicazione web SanDisk +Cloud è un'interfaccia basata su web per accedere ai propri contenuti e gestire il proprio account. Con l'applicazione web l'utente può

Dettagli

Ajax. Introdotta da Microsoft nel 1998 è stata standardizzata e adottata da tutti i browser moderni.

Ajax. Introdotta da Microsoft nel 1998 è stata standardizzata e adottata da tutti i browser moderni. Ajax AJAX (Asynchronous JavaScript And XML) è una tecnica fondamentale per la creazione di siti e applicazioni web ad alta interattività, che consente di evitare di ricaricare intere pagine ad ogni richiesta

Dettagli

Guida all'amministrazione. BlackBerry Professional Software per Microsoft Exchange. Versione: 4.1 Service Pack: 4

Guida all'amministrazione. BlackBerry Professional Software per Microsoft Exchange. Versione: 4.1 Service Pack: 4 BlackBerry Professional Software per Microsoft Exchange Versione: 4.1 Service Pack: 4 SWD-313211-0911044452-004 Indice 1 Gestione degli account utente... 7 Aggiunta di un account utente... 7 Aggiunta manuale

Dettagli

Architetture Web. parte 1. Programmazione in Ambienti Distribuiti A.A. 2003-04

Architetture Web. parte 1. Programmazione in Ambienti Distribuiti A.A. 2003-04 Architetture Web parte 1 Programmazione in Ambienti Distribuiti A.A. 2003-04 Architetture Web (1) Modello a tre livelli in cui le interazioni tra livello presentazione e livello applicazione sono mediate

Dettagli

Programmazione Java Avanzata Concetti su Java

Programmazione Java Avanzata Concetti su Java Programmazione Java Avanzata Concetti su Java Ing. Giuseppe D'Aquì Testi di Riferimento Java ( R. Liguori, P. Liguori), O'Reilly Hops Tecniche Nuove (2008) Java Virtual Machine Il codice scritto in Java

Dettagli

Gli XML Web Service. Prof. Mauro Giacomini. Complementi di Informatica Medica 2008/2009 1

Gli XML Web Service. Prof. Mauro Giacomini. Complementi di Informatica Medica 2008/2009 1 Gli XML Web Service Prof. Mauro Giacomini Medica 2008/2009 1 Definizioni i i i Componente.NET che risponde a richieste HTTP formattate tramite la sintassi SOAP. Gestori HTTP che intercettano richieste

Dettagli

9243057 Edizione 1 IT. Nokia e Nokia Connecting People sono marchi registrati di Nokia Corporation

9243057 Edizione 1 IT. Nokia e Nokia Connecting People sono marchi registrati di Nokia Corporation 9243057 Edizione 1 IT Nokia e Nokia Connecting People sono marchi registrati di Nokia Corporation VPN Client Manuale d'uso 9243057 Edizione 1 Copyright 2005 Nokia. Tutti i diritti sono riservati. Il contenuto

Dettagli

JDBC versione base. Le classi/interfacce principali di JDBC

JDBC versione base. Le classi/interfacce principali di JDBC JDBC versione base Java Database Connectivity è il package Java per l accesso a database relazionali il package contiene interfacce e classi astratte uno dei pregi è la completa indipendenza del codice

Dettagli

Formazione e Apprendimento in Rete Open source. Il cloud computing. Dropbox e Google Drive ambienti di condivisione e collaborazione

Formazione e Apprendimento in Rete Open source. Il cloud computing. Dropbox e Google Drive ambienti di condivisione e collaborazione Formazione e Apprendimento in Rete Open source Il cloud computing Dropbox e Google Drive ambienti di condivisione e collaborazione Formazione insegnanti Generazione Web Lombardia Il Cloud, metafora per

Dettagli

A.1 Congurazione dell'ambiente di sviluppo

A.1 Congurazione dell'ambiente di sviluppo Appendice A Hardware e Software A.1 Congurazione dell'ambiente di sviluppo Per ottenere una piattaforma di sviluppo che funzioni in maniera adeguata è necessario eseguire l'installazione di diversi tool

Dettagli

Manuale utente di Avigilon Control Center Gateway. Versione 5.6

Manuale utente di Avigilon Control Center Gateway. Versione 5.6 Manuale utente di Avigilon Control Center Gateway Versione 5.6 2006-2015 Avigilon Corporation. Tutti i diritti riservati. Salvo quando espressamente concesso per iscritto, nessuna licenza viene concessa

Dettagli

GIOVANNI CALABRESE. Sito E-learning Istituto Tridente. Guida all utilizzo di Moodle per gli studenti

GIOVANNI CALABRESE. Sito E-learning Istituto Tridente. Guida all utilizzo di Moodle per gli studenti GIOVANNI CALABRESE Sito E-learning Istituto Tridente Guida all utilizzo di Moodle per gli studenti Sommario 1. COS È MOODLE... 1 1.1 Requisiti necessari...1 1.2 Configurazione del browser...1 Impostazione

Dettagli

1 2 Fase di autenticazione utente

1 2 Fase di autenticazione utente DInG my Dates di Andrea Dignani DinG my Dates è una applicazione di tipo Reminder, ovvero una app in grado di segnalare in un determinato istante di tempo all' utente un certo avvenimento/evento accaduto

Dettagli

WEBGATE400 ACTIVEX CONTROL. Manuale Programmatore

WEBGATE400 ACTIVEX CONTROL. Manuale Programmatore WEBGATE400 ACTIVEX CONTROL Manuale Programmatore Pagina 1 SOMMARIO Webgate400 ActiveX Control... 3 1 A Chi è destinato... 3 2 Pre requisiti... 3 3 Introduzione... 3 3.1 Requisiti di sistema... 3 3.2 Distribuzione

Dettagli

Sophos Mobile Control Guida utenti per Apple ios. Versione prodotto: 4

Sophos Mobile Control Guida utenti per Apple ios. Versione prodotto: 4 Sophos Mobile Control Guida utenti per Apple ios Versione prodotto: 4 Data documento: maggio 2014 Sommario 1 Sophos Mobile Control...3 2 Informazioni sulla guida...4 3 Accesso al portale self-service...5

Dettagli

Riferimento rapido dell'app mobile Novell Filr 1.0.2

Riferimento rapido dell'app mobile Novell Filr 1.0.2 Riferimento rapido dell'app mobile Novell Filr 1.0.2 Settembre 2013 Novell Riferimento rapido In Novell Filr è possibile accedere facilmente a tutti i propri file e cartelle dal desktop, dal browser o

Dettagli

SWIM v2 Design Document

SWIM v2 Design Document PROGETTO DI INGEGNERIA DEL SOFTWARE 2 SWIM v2 DD Design Document Matteo Danelli Daniel Cantoni 22 Dicembre 2012 1 Indice Progettazione concettuale Modello ER Entità e relazioni nel dettaglio User Feedback

Dettagli

INFORMATIVA PRIVACY. Politica ed informativa sull'utilizzo cookie

INFORMATIVA PRIVACY. Politica ed informativa sull'utilizzo cookie INFORMATIVA PRIVACY Politica ed informativa sull'utilizzo cookie Informazioni importanti sul consenso: utilizzando il nostro sito web o la nostra app mobile («Sito»), utilizzando i servizi forniti tramite

Dettagli

JDBC di base. Le classi/interfacce principali di JDBC

JDBC di base. Le classi/interfacce principali di JDBC JDBC di base Java Database Connectivity è il package Java per l accesso a database relazionali il package contiene interfacce e classi astratte completa indipendenza del codice dal tipo di database o di

Dettagli

Al prompt inserire il seguente comando per installare le applicazioni server di SAMBA:

Al prompt inserire il seguente comando per installare le applicazioni server di SAMBA: Server Samba Reti Windows Sommario Introduzione Installare SAMBA Configurare SAMBA Server Client Spesso le reti di computer sono costituite da sistemi eterogenei e, sebbene gestire una rete composta interamente

Dettagli

INDICE. DATEX il manuale edizione aprile 2011

INDICE. DATEX il manuale edizione aprile 2011 DATEX MANUALE INDICE INDICE... 1 INTRODUZIONE... 2 PRINCIPALI CARATTERISTICHE... 3 IL PRIMO COLLEGAMENTO... 4 INTERFACCIA... 5 DEFINIZIONE DELLE OPERAZIONI E DEI PROFILI... 6 INGRESSO CON PASSWORD NEL

Dettagli

Sophos Mobile Control Guida utenti per Apple ios. Versione prodotto: 3.5

Sophos Mobile Control Guida utenti per Apple ios. Versione prodotto: 3.5 Sophos Mobile Control Guida utenti per Apple ios Versione prodotto: 3.5 Data documento: luglio 2013 Sommario 1 Sophos Mobile Control...3 2 Informazioni sulla guida...4 3 Accesso al portale self-service...5

Dettagli

Test di unità con JUnit4

Test di unità con JUnit4 Test di unità con JUnit4 Richiamo sul test di unità Il test d unità è una metodologia che permette di verificare il corretto funzionamento di singole unità di codice in determinate condizioni. Nel caso

Dettagli

QUEUE : considerazioni. QUEUE : considerazioni. QUEUE : esempio. QUEUE : esempio

QUEUE : considerazioni. QUEUE : considerazioni. QUEUE : esempio. QUEUE : esempio QUEUE : considerazioni QUEUE : considerazioni Si è realizzata una struttura dati complessa utilizzandone una primitiva, l array. Il pregio di tale implementazione è il basso costo computazionale, mentre

Dettagli

Applicazione: Piattaforma di Comunicazione Unificata

Applicazione: Piattaforma di Comunicazione Unificata Riusabilità del software - Catalogo delle applicazioni: Amministrativi/Contabile Applicazione: Piattaforma di Comunicazione Unificata Amministrazione: Regione Piemonte - Direzione Innovazione, Ricerca

Dettagli

Gestione delle eccezioni in Java

Gestione delle eccezioni in Java Gestione delle eccezioni in Java - Introduzione al concetto di eccezioni E possibile definire un eccezione come un situazione imprevista che il flusso di un applicazione può incontrare. È possibile gestire

Dettagli

Web Services Dogane LINEE GUIDA

Web Services Dogane LINEE GUIDA Web Services Dogane LINEE GUIDA Pagina 1 di 17 Indice Indice... 2 1. INTRODUZIONE... 3 2. TEST FUNZIONALI SUI WEB SERVICES... 8 3. SICUREZZA... 14 4. FIRMA... 14 5. TRASFORMAZIONE CERTIFICATO DI FIRMA...

Dettagli

Harvest Web Data. Martino Pizzol. 28 agosto 2010. Fondazione ahref. Harvest Web Data. Martino Pizzol. Indice. I dati sul web.

Harvest Web Data. Martino Pizzol. 28 agosto 2010. Fondazione ahref. Harvest Web Data. Martino Pizzol. Indice. I dati sul web. Fondazione ahref 28 agosto 2010 1 Idatisulweb 2 3 4 5 Cosa e come Scopo Utilizzare dei dati trovati nella rete Come Bisogna trovarli Controllare le licenze Recuperarli per poterli usare Formato Dati Cos

Dettagli

Processi di stampa in attesa protetti. Guida per l'amministratore

Processi di stampa in attesa protetti. Guida per l'amministratore Processi di stampa in attesa protetti Guida per l'amministratore Settembre 2013 www.lexmark.com Sommario 2 Sommario Panoramica...3 Configurazione processi di stampa in attesa protetti...4 Configurazione

Dettagli

w w w. n e w s o f t s r l. i t Soluzione Proposta

w w w. n e w s o f t s r l. i t Soluzione Proposta w w w. n e w s o f t s r l. i t Soluzione Proposta Sommario 1. PREMESSA...3 2. NSPAY...4 2.1 FUNZIONI NSPAY... 5 2.1.1 Gestione degli addebiti... 5 2.1.2 Inibizione di un uso fraudolento... 5 2.1.3 Gestione

Dettagli

BIMPublisher Manuale Tecnico

BIMPublisher Manuale Tecnico Manuale Tecnico Sommario 1 Cos è BIMPublisher...3 2 BIM Services Console...4 3 Installazione e prima configurazione...5 3.1 Configurazione...5 3.2 File di amministrazione...7 3.3 Database...7 3.4 Altre

Dettagli

JDBC: Introduzione. Java Database Connectivity (JDBC): parte 1. Schema dei legami tra le classi principali. Principali classi/interfacce di JDBC

JDBC: Introduzione. Java Database Connectivity (JDBC): parte 1. Schema dei legami tra le classi principali. Principali classi/interfacce di JDBC JDBC: Introduzione Java Database Connectivity (JDBC): parte 1 Gianluca Moro DEIS - Università di Bologna gmoro@deis.unibo.it Java Database Connectivity è il package Java per l accesso a database relazionali

Dettagli

Metodi di verifica degli utenti in ELMS 1.1

Metodi di verifica degli utenti in ELMS 1.1 Metodi di verifica degli utenti in ELMS 1.1 2012-12-21 Kivuto Solutions Inc. [RISERVATO] SOMMARIO PANORAMICA...1 METODI DI VERIFICA...2 Verifica utente integrata (IUV, Integrated User Verification)...2

Dettagli

tesi di laurea Anno Accademico 2009/2010 relatore Ch.mo prof. Porfirio Tramontana candidato Pasquale Ludi Matr. 534\000438

tesi di laurea Anno Accademico 2009/2010 relatore Ch.mo prof. Porfirio Tramontana candidato Pasquale Ludi Matr. 534\000438 tesi di laurea Anno Accademico 2009/2010 relatore Ch.mo prof. Porfirio Tramontana candidato Pasquale Ludi Matr. 534\000438 Obbiettivi del progetto: Sviluppo di un applicazione Flex in AdobeFlashBuilder

Dettagli

Social Learning Edmodo (www. edmodo.org) Caratteristiche

Social Learning Edmodo (www. edmodo.org) Caratteristiche Social Learning Edmodo (www. edmodo.org) Caratteristiche Social Network adatto alla creazione di comunità di apprendimento dove i partecipanti possono interagire fra loro secondo la modalità asincrona

Dettagli

Framework di Middleware. per Architetture Enterprise

Framework di Middleware. per Architetture Enterprise Framework di Middleware per Architetture Enterprise Corso di Ingegneria del Software A.A.2011-2012 Un po di storia 1998: Sun Microsystem comprende l importanza del World Wide Web come possibile interfaccia

Dettagli

Quando si sa chiaramente come si deve comportare l applicazione si può analizzare una possibile soluzione applicativa.

Quando si sa chiaramente come si deve comportare l applicazione si può analizzare una possibile soluzione applicativa. Introduzione alla tecnologia JMX 1 Viene analizzata l architettura sottostante le Java Managment Extensions (JMX) mostrandone un utilizzo applicativo e analizzando altri possibili scenari d uso di Ivan

Dettagli