Creiamo un nuovo progetto MIT App Inventor (che per semplicità ho chiamato con lo stesso
nome dato all'app in Dropbox)
Ovvero AIDropSync, ovviamente il nome può (e dovrebbe) essere scelto a piacere.
Aggiungiamo subito due componenti che ci
serviranno in futuro:
- un Web Component per “comunicare” con Dropbox
- un TinyDB Component per memorizzare le password e i codici di accesso che otterremo in modo da non dover ripetere il processo di autenticazione ad ogni apertura della nostra app
Inseriamo anche un pulsante per avviare la procedura di autenticazione e una label “di debug” per seguire lo stato
del processo.
Il layout, volutamente scarno, della nostra applicazione sarà il seguente:
Per effettuare l’autenticazione utilizzeremo
la procedura descritta in questa pagina: https://blogs.dropbox.com/developers/2012/07/using-oauth-1-0-with-the-plaintext-signature-method/
Leggendo le istruzioni al link riportato, si evince
che le chiavi utilizzate durante
tutto il processo sono le seguenti: app
key, app secret (che ci ha
fornito Dropbox al passo precedente), request
token, request token secret, access token, access token
secret. Per semplicità
memorizzerò ognuna, man mano che la otterrò, in una variabile globale:
Tanto per cominciare, poiché come anticipato il processo di autenticazione va effettuato
una sola volta dopodiché i codici di accesso e le password possono essere
archiviati e riutilizzati, facciamo in modo che all’avvio, l'applicazione
verifichi se nel TinyDB sono presenti le
chiavi già memorizzate, oppure se si deve provvedere ad una nuova
autenticazione:
Se non ci sono chiavi memorizzare, alla
pressione del tasto “Autenticazione”
avviamo il processo di autenticazione vero e proprio. Il primo step è il
seguente:
quindi:
(utilizziamo la variabile globale “step” in quanto per completare la
procedura dovremo inviare due richieste
di tipo “GET” al server di Dropbox e leggere
per due volte la risposta. Al fine di riutilizzare lo stesso componente Web1, la variabile ci serve per
definire a che punto del processo siamo arrivati. Sarà comunque più chiaro in
seguito)
Ora dobbiamo intercettare la risposta del server di Dropbox. Esiste per questo l’apposito
“blocco”
Per capire qual è la struttura della risposta del server, possiamo visualizzarne i
quattro elementi (url, responseCode, responseType, responseCount)
grazie alla label di debug (lo faremo solo questa volta a titolo di esempio):
Lanciando l'app otteniamo il seguente
risultato:
La prima cosa importante da notare è il responseCode che, essendo uguale a
“200”, segnala che l'operazione è andata a buon fine. Varrebbe la pena di
inserire qualche genere di controllo sul responseCode in modo da gestire
eventuali failure del metodo ma non
lo faremo in questa semplice app di esempio.
Ancora più importanti sono i due codici che
vengono forniti nel responseContent e
che sono rispettivamente quello che avevamo chiamato requestTokenSecret e requestToken.
Dobbiamo fare in modo che questi due codici
vengano estratti dalla stringa di testo e registrati nelle due variabili
globali che avevamo appositamente predisposto a questo scopo.
Per estrarre parti di una stringa contenuti
tra una stringa di “inizio” e una di “fine” esistono vari modi. Ho trovato
interessante l’approccio descritto in questo bell’articolo (http://www.imagnity.com/tutorials/app-inventor/web-component-json-response-on-app-inventor)
e che ho solo leggermente modificato nella seguente procedura:
A questo punto non dovremo fare altro che
richiamare questa procedura tutte le volte che dovremo estrarre dei codici dal
“responseContent” di una risposta
dal server Dropbox.
Tornando quindi all'evento GotText (ripulito dalle visualizzazioni
di debug impiegate poco fa). Nel primo step del processo di autenticazione possiamo
estrarre i codici che ci servono in questo modo:
Otterremo il seguente risultato:
Trovo ottima l'idea di questo tutorial, tuttavia mi viene segnalato un errore nella composizione della lista relativa agli heathers: sono il solo o capita anche a qualcun altro?
RispondiEliminaSaluti e grazie
Leeboris
Headers, non heathers! Scusate!
EliminaA me mi restituisce un errore 401 " Invalid OAuth request" anche se ho controllato 1000 volte ed è scritto tutto come nel tutorial.
RispondiEliminaNon riesco a trovare nulla.
Grazie
Ciao