Tre byggeklosser, ett mål
Bak kulissene er Timmy bygget på en ganske praktisk måte: Flutter for appen, WebRTC for lyd og video i sanntid, og Firebase for koordinering. Jeg ønsket ikke å bygge en enorm plattform som sender alt gjennom skyen. Hver del skal vite så lite som mulig og likevel fungere pålitelig sammen med de andre.
WebRTC: Direkte tilkobling, kryptert som standard
WebRTC (Web Real-Time Communication) overfører lyd og video mellom baby- og foreldreenhetene. I beste fall flyter dataene direkte mellom de to enhetene, punkt til punkt, uten noen medieserver imellom.
Alle WebRTC-tilkoblinger bruker DTLS-SRTP som standard. Hvis noen fanger opp nettverkspakker, får de ikke lesbar lyd eller video. Denne krypteringen er en del av protokollen og kan ikke bare slås av i WebRTC.
Det var det viktige for meg: Lyd og video fra barnerommet hører ikke hjemme på serveren min. De forblir mellom enhetene dine.
Signalering via Firebase Firestore
Før WebRTC kan starte, må enhetene finne hverandre og bli enige om hvordan de kan koble seg til. Den delen kalles signalering. Timmy bruker Firebase Firestore, Googles skydatabase, til dette.
Bare tekniske tilkoblingsdata utveksles:
- SDP-tilbud og -svar: Beskriver enhetenes muligheter (støttede kodeker, oppløsninger osv.).
- ICE-kandidater: Mulige nettverksveier som enhetene kan bruke for å nå hverandre.
Lyd og video havner ikke i Firebase. Firestore transporterer bare de tekniske tilkoblingsdataene. Timmy krypterer også dette signaleringslaget, slik at Firestore ikke blir et møtested med klartekst for SDP og ICE.
TURN-servere: Når den direkte veien ikke fungerer
Noen nettverk blokkerer direkte tilkoblinger, for eksempel strenge brannmurer eller enkelte mobiloperatører. Da trenger WebRTC et TURN-relé (Traversal Using Relays around NAT).
Timmy prøver først den lokale TURN-serveren og bruker Cloudflare som reserve når det lokale reléet ikke er tilgjengelig eller er overbelastet. Reléet videresender krypterte pakker. Det får ikke nøklene til lyd eller video; WebRTC-krypteringen forblir intakt.
TURN-tilgangsopplysninger kommer fra en Firebase Cloud Function og er bare gyldige i 24 timer. Permanente tilgangsopplysninger i en babycall-app ville vært for risikable etter min smak.
Nærhetstilkoblinger: Enhetene finner hverandre automatisk
For å unngå tungvinte oppsett mellom baby- og foreldreenheten bruker Timmy Nearby Connections. Google tilbyr dette oppdagelseslaget via Bluetooth og Wi-Fi.
Automatisk sammenkobling i Timmy fungerer uten at du må skrive inn en kode manuelt: Enhetene finner hverandre og finner det samme kontaktpunktet for nøkkelutvekslingen. Hvis det ikke fungerer, finnes det en kode på 4 tegn som du kan skrive inn. Sammenkoblingskoden forlater aldri enheten; Firestore ser bare en kryptografisk hash (SHA-256) som dokumentidentifikator.
Anonym autentisering
Timmy bruker Firebase Anonymous Authentication. Første gang appen åpnes, får hver enhet en midlertidig, anonym ID. Det finnes ingen konto, ingen e-postadresse og ingen passord. ID-en er bare der for å håndheve Firestore-reglene: Bare autentiserte enheter kan lese eller skrive øktdata.
Arkitekturen: Hvem sender, hvem mottar
Timmy har to moduser:
- Babymodus (sender): Enheten fanger opp lyd via mikrofonen og sender den til foreldreenheten via WebRTC. Kameraet kan eventuelt aktiveres; da sendes også video direkte.
- Foreldremodus (mottaker): Enheten mottar lyd og video, viser kamerastreamen og har snakkefunksjon for korte talebeskjeder til babyenheten.
Kontroller som snakkefunksjon og å slå kameraet av eller på bruker en DataChannel, en annen WebRTC-kanal som sender små krypterte meldinger direkte mellom enhetene.
Hvorfor Flutter?
Flutter er Googles rammeverk for apper på flere plattformer. For Timmy betyr det at jeg kan skrive mye av logikken én gang og bruke den på Android og iOS. Timmy er tilgjengelig på Android, og iOS-versjonen er snart klar for lansering. Mindre dobbeltarbeid i koden betyr færre steder feil kan snike seg inn.
Oppsummering
Den tekniske regelen er enkel: Timmy skal bare håndtere dataene den faktisk trenger. WebRTC beskytter mediene, Firebase koordinerer oppsettet av tilkoblingen, TURN ser bare krypterte pakker, og Nearby Connections gjør sammenkoblingen enklere.
God teknologi glir litt inn i hverdagen. Den fungerer uten å gjøre barnerommet til et skyprosjekt.