Ugrás a tartalomra
Rapcsány Krisztián
en
← Összes projekt iOS és Android alkalmazás

Rendezvény-beléptető mobilapp

A telefonos beléptető alkalmazás, amivel a személyzet a bejáratnál ellenőrzi a jegyeket. QR beolvasás, beléptetés, kiléptetés, helyszíni jegyeladás és élő statisztika, iOS-en és Androidon.

React Native Expo TypeScript REST API Biometrikus azonosítás OTA frissítések
A feladat
Szerepem

Én terveztem és fejlesztettem, az első verziótól a 2.0-ig.

A bejáratnál minden másodperc számít. Ha lassan megy a sor, a vendég türelmetlen, a szervező pedig látja, hogy fogy a bevétel. A beléptetőnek gyors, egyértelmű visszajelzés kell: zöld vagy piros, és kész.

Előtte egy böngészős beolvasó volt. Ezt váltottam le egy olyan alkalmazással, ami gyorsabb, és ahol mindenki csak azt látja, amire a munkájához szüksége van.

A megoldás
01

Kamerás jegyellenőrzés

A telefon kamerájával olvassa a QR-kódot, és színnel jelzi az eredményt: érvényes, már felhasznált, lejárt vagy ismeretlen a jegy. A VIP vendégek külön jelölést kapnak.

02

Gyors beléptetés

Kapcsolható automatikus mód: ha érvényes a jegy, a beolvasás egyből beléptet, külön koppintás nélkül.

03

Kiléptetés

Van külön kiléptetés is, így mindig látszik, hányan vannak bent.

04

Helyszíni jegyértékesítés

Kosárral és fizetéssel, hogy a bejáratnál is lehessen jegyet venni.

05

Élő statisztika

Érkezési grafikon 10 perces bontásban, az eladott, a beléptetett és a meg nem jelent jegyek száma jegytípusonként, és időrendi lista.

06

Szerepkörök és felhasználók

Öt szerepkör van: adminisztrátor, beléptető, kiléptető, portás és megtekintő. Mindenki csak azokat a képernyőket látja, amelyek a munkájához kellenek, a felhasználókat pedig az appból lehet kezelni.

Képernyőképek
Bejelentkezés

A személyzet saját fiókkal lép be, a bejelentkezés tartósan megmarad.

Esemény kiválasztása

Csak az érvényes események jelennek meg, így a beléptető nem tud rossz eseményre lépni.

Beléptetés

A kamera várja a QR kódot. Az esemény neve fent látszik, és egy koppintással cserélhető.

Helyszíni jegyeladás

Jegytípusok helyszíni és tagi áron, mennyiségválasztóval és összesítővel.

Jegyek kiadása

Minden jegyhez QR-kód vagy e-mail, a fizetés és a beléptetés egy lépésben.

Márka- és ügyfélnevek, valamint személyes adatok nélkül (kivéve az alkalmazás áruházi képeit).

Ami különleges benne

Egy beolvasás, kész

Van egy gyors mód: érvényes jegynél maga a beolvasás beléptet, külön koppintás nélkül.

Öt szerepkör

Admin, beléptető, kiléptető, portás és megtekintő. A portás például csak az élő statisztikát látja, a kiléptető csak a kiléptetést.

Méri saját magát

Minden vendégnél méri a beolvasástól az eredményig és a beléptetésig eltelt időt. Az utolsó ötvenet a telefonon összegzi, a többit csomagokban elküldi a szervernek. Ezekből látom, mennyire gyors.

Kihívások, amikbe belefutottam
01

Gyenge térerő, és senki nem léphet be kétszer

Hálózati hibánál egyszer újrapróbálom a hívást, de csak akkor, ha az ismétlése nem okozhat kárt. Ami csak olvas, vagy a szerveren idempotens, az mehet újra. Ami nem, azt nem hívom meg még egyszer.

02

Az első vendég a leglassabb

Az első beolvasásnál a kapcsolat felépítése viszi el az időt (névfeloldás, titkosítás). Ezért az app a háttérben előre felépíti a kapcsolatot, mielőtt az első vendég odaér, és ezt percenként legfeljebb egyszer csinálja.

03

A kiválasztott esemény beragadt

Az 1.1.1-es verzióban javítottam egy hibát: a kiválasztott esemény bent maradt akkor is, amikor már nem volt választható. Most az app indításkor és minden előtérbe hozáskor ellenőrzi, és ha az esemény már nem érvényes, visszadob az eseményválasztóra.

A motorháztető alatt

Sebességre hangolva

A kapcsolat már felépül, mielőtt az első vendég odaér. A beolvasástól az eredményig eltelt időt vendégenként mérem, így a lassulás hamar kiderül.

Gyenge hálózat mellett is használható

Hálózati hibánál az ismételhető hívások maguktól újrapróbálkoznak. A nem ismételhetők soha, ezért senkit nem lehet kétszer beléptetni.

Biztonság

A bejelentkezés titkosított tárolóban van, hosszabb munkamenetnél biometrikus azonosítás védi. Az app folyamatosan ellenőrzi, hogy a kiválasztott esemény még érvényes-e.

Üzemeltethetőség

Automatikus hibajelentés, javítások az áruházi frissítés megvárása nélkül, és szerepkör alapú hozzáférés a szerveren is.

Éles kód

Újrapróbálás, ami nem árt

Gyenge térerőnél a hívás egyszer megismétlődik, de csak akkor, ha ez veszélytelen. Az írást végző, nem ismételhető hívásokra szándékosan nincs automatikus újrapróbálás, így nem lehet kétszer beléptetni valakit.

network-retry.ts
/** No response at all = network failure (offline, timeout). A 4xx/5xx reply is not. */
function isNetworkError(error: unknown): boolean {
  return axios.isAxiosError(error) && !error.response;
}

/**
 * Retries a call once on a network failure. ONLY use it for calls that are
 * safe to repeat: reads, or writes that are idempotent on the server.
 */
async function withNetworkRetry<T>(call: () => Promise<T>, retries = 1): Promise<T> {
  try {
    return await call();
  } catch (error) {
    if (retries > 0 && isNetworkError(error)) {
      await new Promise((resolve) => setTimeout(resolve, 700));
      return withNetworkRetry(call, retries - 1);
    }
    throw error;
  }
}
Eredmény

Az alkalmazás iOS-en és Androidon is kiadott, éles verzió (2.0). A beléptetés egy beolvasásra egyszerűsödött, a szervezők pedig valós időben látják az érkezéseket.

Mobilalkalmazásra vagy beléptetésre lenne szükséged?

Mobilappot iOS-re és Androidra is építek, a backendjével együtt.

További projektek

Írj nekem →