Prijeđi na sadržaj

Vlastiti proizvod

TacLink: taktička karta uživo za airsoft i milsim

TacLink je moj vlastiti proizvod. Organizator na webu napravi događaj, igrači mu se pridruže u aplikaciji i na karti vide svoju stranu uživo, i kad je mobitel zaključan u džepu ili na terenu nema signala.

Problem

Na airsoft i milsim igrama ekipa je raspršena po šumi i brdima i dogovara se preko radija. Teško je znati tko je gdje. Slične aplikacije traže mobilne podatke cijelo vrijeme, a teren za igru često je baš tamo gdje signala nema.

Kako radi

  • Organizator na webu ucrta područje igre, odredi strane, odrede i zapovjednike, postavi oznake na kartu i mjesto okupljanja.
  • Za svaku stranu dobiva QR kod i poveznicu koje može ispisati ili poslati u WhatsApp grupu.
  • Igrač se prijavi Apple ili Google računom, upiše nadimak i skenira QR kod svoje strane.
  • Aplikacija preuzme kartu područja i sve podatke igre, pa karta radi od prve sekunde.
  • Tijekom igre igrač vidi pozicije svoje strane, oznake protivnika, stanje suigrača i zapovijedi koje šalju zapovjednik i vođa odreda.

Lokacija sa zaključanim zaslonom

Tijekom igre mobitel je u džepu ili na prsluku. Zato aplikacija šalje lokaciju i kad je zaslon ugašen: na iPhoneu preko pozadinskih ažuriranja lokacije, a na Androidu preko servisa u prvom planu. Dok se igrač kreće, pozicija se šalje češće, a dok miruje, rjeđe, kako bi se štedjela baterija. Na iPhoneu je igra vidljiva i na zaključanom zaslonu, kao Live Activity.

Bluetooth mesh bez signala

Kad nestane signala, mobiteli na igri povezuju se Bluetoothom i jedni drugima prosljeđuju pozicije, stanja i zapovijedi. Poruke svake strane su šifrirane, pa mobitel protivničke strane može poruku proslijediti dalje, ali je ne može pročitati. Čim neki mobitel u mreži uhvati signal, postaje most prema serveru i šalje ono što se u međuvremenu skupilo.

Zašto nativno

Prva verzija TacLinka napisana je u React Nativeu i objavljena u App Storeu i na Google Playu. Nakon testne igre s igračima aplikacija je pojednostavljena, a mobilni dio napisan iznova, posebno za iOS i za Android. Rad u pozadini, Bluetooth i lokacija srž su ove aplikacije, a nativni kod do njih ima izravan pristup, bez dodatnih slojeva.

Tehnologije

iOS aplikacija napisana je u Swiftu i SwiftUI-ju, s MapLibreom za kartu, GRDB-om za lokalnu bazu i CoreBluetoothom za mesh. Android aplikacija napisana je u Kotlinu i Jetpack Composeu, s MapLibreom, Roomom i Bluetooth LE mesh mrežom. Format mesh poruka zajednički je za obje platforme i provjerava se istim testnim podacima, pa se iPhone i Android mobiteli razumiju bajt po bajt.

Server je u ASP.NET Coreu, s bazom PostgreSQL i SignalR-om za podatke uživo. Web za organizatore izrađen je u Reactu s Viteom, a javna stranica tac-link.com u Astru. Organizatori plaćaju preko Stripea. Sve radi na jednom vlastitom serveru.

Što ovaj projekt pokazuje

TacLink sam napravio sam, od servera i weba za organizatore do obje mobilne aplikacije i javne stranice. Iskustvo s lokacijom u pozadini, radom bez signala, prijavom, plaćanjem i objavom u trgovinama koristim i u projektima za klijente, npr. za aplikacije koje se koriste na terenu.