Hiru oinarri, helburu bakarra
Barrutik begiratuta, Timmy modu nahiko pragmatikoan dago eginda: Flutter aplikaziorako, WebRTC denbora errealeko audiorako eta bideorako, eta Firebase koordinaziorako. Ez nuen dena hodeitik pasaraziko zuen plataforma erraldoirik sortu nahi. Zati bakoitzak ahalik eta gutxien jakin behar zuen, eta, hala ere, gainerakoekin modu fidagarrian funtzionatu.
WebRTC: konexio zuzena, lehenespenez zifratua
WebRTCk (Web Real-Time Communication) audioa eta bideoa eramaten ditu haurraren gailuaren eta gurasoaren gailuaren artean. Egoerarik onenean, datuak zuzenean bi gailuen artean, peer-to-peer moduan, multimedia-zerbitzaririk tartean gabe.
WebRTC konexio guztiek DTLS-SRTP erabiltzen dute lehenespenez. Norbaitek sareko paketeak atzematen baditu, ez du audio edo bideo ulergarririk lortuko. Zifratze hori protokoloaren parte da, eta ezin da besterik gabe WebRTCn desaktibatu.
Hori zen niretzat garrantzitsuena: haurraren gelako multimedia ez da nire zerbitzarian egon behar. Zure gailuen artean geratzen da.
Seinaleztapena Firebase Firestore bidez
WebRTC hasi aurretik, gailuek elkar aurkitu eta nola konekta daitezkeen negoziatu behar dute. Zati horri seinaleztapena deitzen zaio. Timmyk Firebase Firestore erabiltzen du horretarako, Googleren hodeiko datu-basea.
Konexioari buruzko datu teknikoak baino ez dira trukatzen:
- SDP eskaintzak eta erantzunak: Deskribatu gailuen gaitasunak (onartutako kodekak, bereizmenak eta abar).
- ICE hautagaiak: Gailuak elkarengana iristeko erabil ditzaketen sare-bide posibleak.
Audioa eta bideoa ez dira Firebase-ra iristen. Firestorek konexioari buruzko datu teknikoak baino ez ditu garraiatzen. Timmyk seinaleztapen-geruza hori ere zifratzen du; horrela, Firestore ez da SDP eta ICEren testu arrunteko topagune bihurtzen.
TURN zerbitzariak: bide zuzenak funtzionatzen ez duenean
Sare batzuek konexio zuzenak blokeatzen dituzte; esaterako, suebaki zorrotzek edo mugikorreko operadore batzuek. Orduan WebRTCk TURN errele bat behar du (Traversal Using Relays around NAT).
Timmyk lehenik tokiko TURN zerbitzaria probatzen du, eta Cloudflare erabiltzen du ordezko gisa tokiko errelea erabilgarri ez dagoenean edo gainkargatuta dagoenean. Erreleak zifratutako paketeak birbidaltzen ditu. Ez ditu soinuaren edo bideoaren gakoak jasotzen; WebRTCren zifratzeak bere horretan jarraitzen du.
TURN kredentzialak Firebase Cloud Function batetik datoz, eta 24 orduz bakarrik balio dute. Haurtxo-monitore aplikazio batean kredentzial iraunkorrak izatea arriskutsuegia litzateke niretzat.
Gertuko konexioak: gailuek automatikoki aurkitzen dute elkar
Haurraren gailuaren eta gurasoarenaren arteko konfigurazio-pauso deserosoak saihesteko, Timmyk Nearby Connections erabiltzen du. Googlek Bluetooth eta WiFi bidez eskaintzen du aurkikuntza-geruza hori.
Timmyko parekatze automatikoa eskuz koderik sartu gabe dabil: gailuek elkar aurkitzen dute eta gako-trukerako topagune bera aurkitzen dute. Huts egiten badu, 4 karaktereko kode bat sar dezakezu. Parekatze-kodea ez da inoiz gailutik ateratzen; Firestorek hash kriptografiko bat (SHA-256) baino ez du ikusten, dokumentuaren identifikatzaile gisa.
Autentifikazio anonimoa
Timmyk Firebase Anonymous Authentication erabiltzen du. Lehen aldiz abiaraztean, gailu bakoitzak aldi baterako ID anonimo bat jasotzen du. Ez dago konturik, helbide elektronikorik, ezta pasahitzik ere. IDa Firestoreko arauak betearazteko baino ez da: autentifikatutako gailuek bakarrik irakurri edo idatz ditzakete saioko datuak.
Arkitektura: nork bidaltzen du, nork jasotzen du
Timmyk bi modu ditu:
- Haurraren modua (igorlea): Gailuak mikrofonoaren bidez audioa hartzen du eta WebRTC bidez bidaltzen dio gurasoaren gailuari. Nahi izanez gero, kamera aktiba daiteke; orduan bideoa ere zuzenean bidaltzen da.
- Gurasoaren modua (hartzailea): Gailuak audioa eta bideoa jasotzen ditu, kameraren seinalea erakusten du, eta «sakatu eta hitz egin» aukera eskaintzen du haurraren gailura ahots-mezu laburrak bidaltzeko.
«Sakatu eta hitz egin» eta kamera piztu edo itzaltzea bezalako kontroletarako DataChannel erabiltzen da, gailuen artean zuzenean mezu txiki zifratuak bidaltzen dituen beste WebRTC kanal bat.
Zergatik Flutter?
Flutter Googleren plataforma anitzeko aplikazioak sortzeko garapen-esparrua da. Timmyrentzat, horrek esan nahi du logikaren zati handi bat behin idatzi eta Androiden zein iOSen erabil dezakedala. Timmy Androiden dago eskuragarri, eta iOSerako bertsioa kaleratzear dago. Kode gutxiago bikoizteak akatsak sartzeko aukera gutxiago egotea dakar.
Laburpena
Arau teknikoa sinplea da: Timmyk benetan behar dituen datuak baino ez ditu ukitu behar. WebRTCk multimedia babesten du, Firebasek konexioaren prestaketa koordinatzen du, TURNek zifratutako paketeak baino ez ditu ikusten, eta Nearby Connectionsek parekatzea errazten du.
Teknologia ona neurri batean desagertu egiten da eguneroko bizitzan. Bere lana egiten du, haurraren gela hodeiko proiektu bihurtu gabe.