venerdì 3 novembre 2017

Leggere / scrivere su tabelle fusion con App Inventor 2

Dopo aver fatto una discreta parentesi introduttiva riguardante le fusion tables, è finalmente venuto il momento di vedere come è possibile leggere e scrivere dati sulle fusion tramite MIT App Inventor 2.
La particolarità di queste utilissime tabelle di google, è quella di poter essere lette e scritte da remoto.
Immaginate a dei dati online sempre disponibili per i vostri utenti, delle tabelle dove poter scrivere e leggere a piacimento dalle proprie app, ecco questo è uno dei migliori utilizzi delle google fusion tables.

Ma vediamo subito nel pratico come leggere dati presenti su una tabella fusion tramite app inventor2.
La guida presa singolarmente potrebbe risultare un po' articolata, per cui userò come appoggio i post già fatti a riguardo le fusion, e mi occuperò solo della parte di codice legata ad appinventor.


Come leggere e scrivere sulle Tabelle Fusion tramite MIT App Inventor 2


Il primo requisito da soddisfare per poter iniziare ad utilizzare le fusion tables con app inventor, è ovviamente quello di aver creato e popolato una tabella google.
Non essendo suddetto passaggio un argomento di questo articolo, vi rimando a questo post per capire meglio come fare.

Dopo aver creato la nostra tabella fusion, possiamo passare al nostro progetto app inventor.
Nel designer, cerchiamo la sezione storage (archiviazione) e trasciniamo il componente invisibile Fusion tables control (controllo tabelle fusion).

I campi immediatamente disponibili sono:
  • Api key: la chiave api dove poter mettere il codice ottenuto dalla console sviluppatore di google (non ci serve per questa guida)
  • Key file: il file chiave necessario per poter autenticare un account di servizio, necessario per poter accedere ad una tabella fusion privata, tramite app inventor
  • Query: eventuale query subito preimpostata da interfaccia visiva (lasciare vuoto)
  • Service account email: l'email dell'account di servizio, necessario per poter accedere

Leggere / scrivere su tabelle fusion con App Inventor 2

Dopo un po' di prove, ho valutato che l'approccio migliore per la maggior parte delle app, è quella di accedere tramite un account di servizio alle fusion tables.
In questo modo, sarà possibile utilizzare le tabelle fusion senza dover far autenticare l'utente utilizzatore.
Siccome anche la creazione di un account di servizio l'ho già trattata, vi rimando a questo post.

Ricapitolando quello che bisogna fare:
  1. Creare una tabella fusion in stato privato
  2. Creare un account di servizio
  3. Creare un file chiave segreta p12 per l'account di servizio

Arrivati a questo punto dunque, del designer di app inventor andiamo a scrivere l'indirizzo dell'account di servizio creato, a caricare il key file, e a spuntare la voce Use service authentication (usa account di servizio).

Adesso torniamo alla nostra fusion table e clicchiamo su share ed impostiamo la tabella come privata.
Qui, aggiungiamo l'email di servizio appena creata, spuntando la voce che dice che non si vuol dare il permesso di poter aggiungere altri utenti.
E' in questa fase che si può stabilire se l'email utilizzata sarà in sola lettura o in scrittura.
Inoltre, ricordarsi di abilitare il download della tabella (file->rename), altrimenti non sarà accessibile tramite chiamate api.

permessi tabella fusion

Finalmente possiamo passare ad app inventor 2.
Adesso andiamo in blocks (blocchi) e trasciniamo l'oggetto call fusion tables control get rows (esegui controllo tabelle fusion ottieni righe) per ottenere i dati della tabella in consultazione, oppure insert row (inserisci riga) per accedere in scrittura.

A questi comandi dovremo passare il table id, l'id della tabella, recuperabile andando nell'interfaccia di gestione della google fusion e cliccando su File -> About this table -> ID.

table id

Poi occorre specificare le columns (colonne) da leggere / modificare, separate da virgola.
E nel caso di un insert, indicare anche il values (valori) da assegnare.
Ed anche le conditions (condizioni), nel caso si sia scelto di utilizzare il blocco della select sulle fusion tables tramite where (per dirla alla sql).

Già con queste poche righe di codice, se avremo fatto tutto giusto, potremo leggere e/o scrivere sulle fusion tables tramite app inventor 2.
Se poi vogliamo scrivere query più specifiche e complesse, possiamo utilizzare i blocchi set fusiontables control query (imposta fusion tables controllo query) e call fusion tables do query (esegui fusion query).

Infine, quale che sia la sintassi usata, per intercettare il risultato della chiamata alle fusion tramite appinventor, occorre usare il blocco when fusion tables control got result (per sempre quando fusion risultato query ricevuto).

when fusion tables control got result

Se avrete fatto tutto nel modo giusto, sarete riusciti a leggere e scrivere sulle tabelle google fusion tramite mit app inventor 2, altrimenti riceverete qualche errore a video, magari di permessi.

Vi lascio con il consueto link al progetto .aia, dove per motivi di sicurezza non ho abilitato l'utente di servizio alla scrittura (e magari potrebbe anche non esistere più quando scaricherete questo progetto).

Ah già, dimenticavo, se è la prima volta che usate le api delle fusion tables, forse dovrete prima ricordarvi di abilitarle, altrimenti potreste incappare nel terribile errore "403 forbidden prokect number is not found and cannot be used for api calls".
Collegatevi al seguente indirizzo, entrate nel progetto creato per l'utente di servizio, e cercate le api per le fusion tables:
https://console.developers.google.com/apis/library
Poi cliccate su Abilita.

Abilita fusion api

Bene, adesso dovreste essere in grado di usare le fusion tables da app inventor, in modo da poter sviluppare delle applicazioni che sono in grado di salvare dei dati online.
Ad esempio se sviluppate un videogioco con appinventor, può essere utile sapere come salvare i punteggi dei giocatori online... e questo è uno dei metodi più semplici :)

Torna all'elenco delle lezioni

Piaciuto l'articolo? Lascia un commento!

EmoticonEmoticon