Ugrás a tartalomra
Rapcsány Krisztián Rapcsány Krisztián
← Ö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

QR kód beolvasása a telefon kamerájával, azonnali, színkódolt eredménnyel: érvényes, már felhasznált, lejárt vagy ismeretlen jegy. VIP vendégek külön kezelve.

02

Gyors beléptetés

Opcionális automatikus mód: érvényes jegynél a beolvasással egyből megtörténik a beléptetés, külön koppintás nélkül.

03

Kiléptetés

Külön kiléptető folyamat, így mindig pontosan látszik, hányan vannak bent.

04

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

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

05

Élő statisztika

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

06

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

Öt szerepkör (adminisztrátor, beléptető, kiléptető, portás, megtekintő). Mindenki csak a saját munkájához szükséges képernyőket látja. A felhasználók az appból kezelhetők.

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. Így nem érzésre mondom, hogy gyors, hanem látom.

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. A szabály egyszerű: 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 előre felépül, mielőtt az első vendég érkezik, a beolvasástól az eredményig eltelt időt pedig vendégenként mérem, így a lassulás hamar kiderül.

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

Hálózati hiba esetén az ismételhető hívások automatikusan újrapróbálkoznak, a nem ismételhetők viszont soha, így nem lehet kétszer beléptetni valakit.

Biztonság

A bejelentkezés titkosított tárolóban él, hosszabb munkamenet esetén biometrikus azonosítással védve. A kiválasztott esemény érvényességét az app folyamatosan ellenőrzi.

Üzemeltethetőség

Automatikus hibajelentés, háttérben érkező javítások az áruházi frissítés megvárása nélkül, és szerepkör alapú hozzáférés a szerver oldalon is.

Valódi 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

Ajánlatot kérek →