Comunicació síncrona entre diferents dispositius - Validem els usuaris


En aquest apartat introduirem l’objecte FirebaseDB per implementar una aplicació de missatgeria instantània.



Més concretament es pretén donar resposta a les preguntes següents:


  • Què és l’objecte FireBaseDB?
  • Quins avantatges té FireBaseDB respecte TinyDB i TinyWebDB?
  • Com el podem utilitzar per comunicar dispositius?


Podem comunicar diferents dispositius mòbils aconseguint que aquests comparteixin dades en el núvol. Per fer-ho disposem de varis serveis i el que explicarem en aquest apartat és l'objecte FirebaseDB, associat al servei FireBase.

FireBase és un sistema gestor de bases de dades de Google que permet emmagatzemar i compartir dades en temps real. Això vol dir que permet que diferents dispositius accedeixin a dades compartides en el mateix instant que les actualitzem. Per fer-ho possible, App Inventor disposa d’un objecte incorporat a la seva llibreria d’objectes, en l’apartat Experimental, anomenat FireBaseDB.

Aquest objecte permet escriure, llegir i eliminar informació de FireBase. El seu funcionament és similar a TinyDB i a TinyWebDB. Respecte el primer la gran diferència és que les dades s’emmagatzemen al núvol enlloc del propi dispositiu mòbil. Amb el segon comparteix la propietat d'emmagatzematge al núvol, però el millora en l'aspecte que en modificar-se les dades al núvol es generen esdeveniments avisant-nos-en.

Els mètodes que utilitzarem per consultar la informació que conté o per desar-hi dades són els següents:



I per capturar la resposta d’aquests mètodes, en tractar-se de respostes que rebrem uns instants després, utilitzarem els següents esdeveniments:



Aquests factors combinats converteixen aquest objecte en una eina que permet la transferència immediata d’informació entre dos dispositius mòbils sense importar la distància a la qual es trobin.

Aquest objecte està encara en estat experimental i per tant en el futur podria patir modificacions en el seu funcionament.

Creem una aplicació de missatgeria instantània

Per avaluar les possibilitats d’aquest objecte crearem una petita aplicació que permeti la comunicació síncrona mitjançant un xat entre dos dispositius mòbils. Per no complicar massa l'app, com que el que interessa és experimentar amb l'objecte FirebaseDB, hem limitat la capacitat del xat a dos usuaris simultanis.

Per poder comprovar correctament aquesta app ens caldrà disposar d’un parell de dispositius mòbils o treballar simultàniament amb l’emulador i un dispositiu físic.

L’objecte FireBase ja ve configurat amb una sèrie de característiques definides, que no haurem de modificar i que tot seguit comentem:

  • FireBaseURL: Amb el valor d'aquest camp indiquem que utilitzarem un compte comú al qual hi accedim amb l’opció DEFAULT. En el futur hi podríem posar les dades d’un compte propi de FireBase.
  • FireBaseToken: Cadena d’autenticació. La genera el propi App Inventor en el moment de crear l'objecte.
  • ProjecteBucket: Si dues aplicacions comparteixen el mateix ProjectBucket i el mateix compte, FireBaseURL, accediran a la mateixa base de dades i conseqüentment podran compartir les dades. Per defecte, agafa com a valor el nom de la pròpia app però el podríem modificar si ho considerem necessari.

En el nostre cas, farem córrer la mateixa aplicació en dos dispositius diferents i per tant, en accedir a les mateixes dades, podran intercanviar-se informació.

Hem dissenyat una interfície que ens permet tenir en una sola pantalla tota la informació necessària. Té el següent aspecte:



Hem utilitzat tres objectes d'organització dels elements que descrivim tot seguit així com els elements que contenen:

  • TableArrangement1: 2 columnes i 4 fileres. A la 1ª filera hi ha els botons per unir-se al xat i sortir-ne. A la 2ª el quadre de text per introduir el nostre nom d'usuari. A la 3ª hi ha labels que ens informaran de quanta gent hi ha al xat i a la 4ª ens indica el nom dels participants al xat.
  • TableArrangement2: 2 columnes i 2 fileres. Dins aquesta taula hi posarem diferents objectes que ens permetran comprovar que l'app funciona correctament. En concret hi haurà dos quadres de text que anomenarem TextBox3 i TextBox4 i que utilitzarem més endavant i un botó que anomenarem B1Delete que ens permetrà reiniciar els valors de Firebase. Un cop l'app funcioni correctament, aquesta taula la podrem ocultar i no ens caldrà utilitzar més aquests components.
  • HorizontalArrangement1: Dins aquest objecte hi haurà el quadre de text en el qual introduirem les nostres intervencions i el boto que ens permetrà enviar-les.

Aquestes intervencions s'aniran mostrant una darrera l'altre en un quadre de text anomenat TBIntervencions. Quan configureu aquest quadre, deixeu marcada la propietat Multilínia i desmarqueu la propietat Enabled (no s'hi ha de poder escriure).



Gestionem els usuaris

Per gestionar correctament el xat ens calen un seguit de variables que haurem d'anar actualitzant:



A Firebase hi mantindrem tres etiquetes que ens informaran dels usuaris que hi ha al xat. En iniciar l'app en consultarem el valor:



I estarem atents a la resposta amb el següent bloc de codi. La informació que rebrem la utilitzarem per actualitzar el valor de les diferents variables, així com per informar a l'usuari del seu valor:



Si l'usuari vol entrar al xat, haurà d'introduir el seu nom al camp de text TBNom i clicar el botó Entrar:



En fer la petició, l'app comprovarà si s'ha introduït un nom i si hi ha altres usuaris al xat. Si encara hi ha lloc ens hi inscriurà, i en cas contrari ens denegarà l'accés.

Si mentre estem entrant l’usuari es modifiquen les dades del Firebase corresponents als usuaris actius al xat caldrà capturar-ho i actualitzar la informació als labels. Amb això també detectarem si nosaltres ens hem afegit correctament.



Per comprovar que les dades que rebem tenen el valor que haurien de tenir, hem afegit un parell de línies que mostren, als objectes TextBox3 i TextBox4, l'etiqueta modificada a FireBase i el seu valor. Aquestes dues línies tan sols són útils durant el desenvolupament de l'app. Un cop tot funciona correctament, es poden eliminar així com els quadres de text utilitzats.

I per completar l’apartat de gestió d’usuaris, tan sols ens queda programar el botó que ens permetrà sortir del xat:



Veiem en el bloc de codi previ, com, quan sortim del xat, l'aplicació haurà d'esborrar el nostre nom d'usuari de l'etiqueta que correspongui, Usuari1 o Usuari2, reduir-ne el nombre de participants i activar o desactivar els botons adients.

Si tanquem l’aplicació sense sortir del xat quedarà registrat que encara hi som i no podrem tornar a entrar-hi fins que actualitzem correctament les variables.

Per evitar la situació esmentada en l'avís anterior, és força pràctic disposar d'un botó que ens permeti reiniciar els valors de les etiquetes al seu estat inicial, esborrar les intervencions que hagin quedat gravades a FireBase dels usuari participants del xat i configurar correctament els botons d'entrada i sortida del xat:



Un cop haguem fet les proves i tinguem l'app plenament operativa aquest botó ja no serà necessari i el podrem ocultar.