Hoppa till innehållet

Kundvagn · 2021 · universitetsprojekt

Kundvagn – Android-app för kundvagn

Ett universitetsprojekt: en kundvagnsapp för Android i Kotlin. Det jag brydde mig om var synken: två telefoner, en kundvagn, och Firestore som håller dem ärliga i realtid.

Lager
gränssnitt, applikation, data
Byggt med
Kotlin · Android SDK · Firebase · Firestore · Mobile Development
Länkar
källkod på GitHub
09:41 09:41 kundvagn uid 3f…A mjölk×2 · 34 kr bröd×1 · 42 kr kaffe×1 · 69 kr betala · 145 kr TELEFON A · LÄGGER TILL kundvagn uid 3f…B mjölk×2 · 34 kr bröd×1 · 42 kr kaffe×1 · 69 kr betala · 145 kr TELEFON B · LYSSNAR Firestore europe‑west1 carts/ {uid}/ items/ k7f2 { name:"kaffe", qty:1 } a91c { name:"mjölk", qty:2 } c04e { name:"bröd", qty:1 } regler: auth.uid == uid index: items.addedAt ↑ offline: skrivningar köas set() onSnapshot onSnapshot set() INGEN ANSLUTNING set() väntar lokalt → spelas upp vid återanslutning ~200 ms skrivning till synlig ändring, Jönköping → europe‑west1 → Jönköping 1 2 3 4 5
Fig. 01 — Två telefoner, en kundvagn. Firestore håller dem ärliga, även när en av dem är offline en stund.
  1. 1Firebase Auth · inloggning, en kundvagn per användare
  2. 2Snapshot-lyssnare · varje enhet hör varje skrivning
  3. 3Dokumentsökväg · carts/{uid}/items/{id}
  4. 4Offlinekö · skrivningar väntar lokalt och spelas sedan upp
  5. 5Summa · räknas om vid varje ändring

Problemet

Ett universitetsprojekt i Android-utveckling med en uppgift som låter enkel: en kundvagnsapp. Det svåra var det jag valde att bry mig om: två telefoner, en kundvagn, och att vagnen aldrig blir oense med sig själv.

Vad jag byggde

Kundvagn i Kotlin, med Firebase Authentication för inloggning och Firestore för själva vagnen. Vagnen är en levande fråga: en snapshot-lyssnare håller varje inloggad enhet synkad i realtid, så att en vara som läggs till på en telefon dyker upp på en annan inom ett ögonblick. Runt kärnan: produkthantering, automatiska summor och ett gränssnitt i Material Design som hölls medvetet enkelt.

Vad jag lärde mig

Realtidssynk är en upplevelsefråga innan den är en teknisk fråga. I samma stund som två enheter visar olika summor är förtroendet borta. Jag lärde mig också att hålla appen tunn och låta backend äga sanningen, en vana som har tjänat mig i varje system sedan dess.