Blog

Sådan fungerer Baby Monitor Timmy teknisk

WebRTC, Firebase og end-to-end-beskyttelse – forklaret uden buzzword-tåge.

Tre byggesten, ét mål

Bag kulissen er Timmy bygget på en ret pragmatisk måde: Flutter til appen, WebRTC til lyd og video i realtid, og Firebase til koordinering. Jeg ville ikke bygge en enorm platform, der sender alt gennem skyen. Hver del skal vide så lidt som muligt og stadig fungere pålideligt sammen med de andre.

WebRTC: Direkte forbindelse, krypteret som standard

WebRTC (Web Real-Time Communication) overfører lyd og video mellem baby- og forældreenheden. I bedste fald flyder dataene direkte mellem de to enheder, peer-to-peer, uden nogen medieserver imellem.

Alle WebRTC-forbindelser bruger DTLS-SRTP som standard. Hvis nogen opsnapper netværkspakker, får de ikke lyd eller video, der kan læses. Denne kryptering er en del af protokollen og kan ikke bare slås fra i WebRTC.

Det var vigtigt for mig: Medier fra børneværelset hører ikke hjemme på min server. De bliver mellem dine enheder.

Signalering via Firebase Firestore

Før WebRTC kan starte, skal enhederne finde hinanden og aftale, hvordan de kan oprette forbindelse. Den del kaldes signalering. Timmy bruger Googles cloud-database Firebase Firestore til det.

Der udveksles kun tekniske forbindelsesdata:

Lyd og video ender ikke i Firebase. Firestore transporterer kun de tekniske forbindelsesdata. Timmy krypterer også dette signaleringslag, så Firestore ikke bliver et mødested i klartekst for SDP og ICE.

TURN-servere: Når den direkte vej ikke virker

Nogle netværk blokerer direkte forbindelser, for eksempel strenge firewalls eller visse mobiloperatører. Så har WebRTC brug for et TURN-relæ (Traversal Using Relays around NAT).

Timmy prøver først den lokale TURN-server og bruger Cloudflare som reserve, når det lokale relæ ikke er tilgængeligt eller er overbelastet. Relæet videresender krypterede pakker. Det får ikke nøglerne til lyd eller video; WebRTC-krypteringen forbliver intakt.

TURN-legitimationsoplysninger kommer fra en Firebase Cloud Function og er kun gyldige i 24 timer. Permanente legitimationsoplysninger i en babyalarm-app ville efter min smag være for risikabelt.

Nearby Connections: Enheder finder automatisk hinanden

For at undgå besværlige opsætningstrin mellem baby- og forældreenheden bruger Timmy Nearby Connections. Google leverer dette opdagelseslag via Bluetooth og WiFi.

Automatisk parring i Timmy fungerer uden manuel indtastning af kode: Enhederne finder hinanden og det samme mødested til nøgleudvekslingen. Hvis det ikke lykkes, kan du indtaste en kode på 4 tegn. Parringskoden forlader aldrig enheden; Firestore ser kun en kryptografisk hash (SHA-256) som dokument-id.

Anonym godkendelse

Timmy bruger Firebase Anonymous Authentication. Første gang appen startes, får hver enhed et midlertidigt, anonymt id. Der er ingen konto, ingen e-mailadresse og ingen adgangskode. Id'et findes kun for at håndhæve Firestore-reglerne: Kun godkendte enheder må læse eller skrive sessionsdata.

Arkitekturen: Hvem sender, og hvem modtager?

Timmy har to tilstande:

Betjening som push-to-talk og kamera til/fra bruger en DataChannel, en anden WebRTC-kanal, der sender små krypterede beskeder direkte mellem enhederne.

Hvorfor Flutter?

Flutter er Googles framework til apps på flere platforme. For Timmy betyder det, at jeg kan skrive meget af logikken én gang og bruge den på Android og iOS. Timmy findes til Android, og iOS-versionen er tæt på udgivelse. Mindre dobbeltarbejde i koden betyder færre steder, hvor fejl kan snige sig ind.

Opsummering

Den tekniske regel er enkel: Timmy skal kun håndtere de data, den faktisk har brug for. WebRTC beskytter medierne, Firebase koordinerer opsætningen af forbindelsen, TURN ser kun krypterede pakker, og Nearby Connections gør parringen nemmere.

God teknologi forsvinder lidt ind i hverdagen. Den virker uden at gøre børneværelset til et skyprojekt.


Flere artikler