Tworzenie aplikacji mobilnych i trzy podejścia technologiczne
Pierwsza decyzja przy tworzeniu aplikacji mobilnych dotyczy sposobu jej budowy. Aplikacja natywna powstaje w narzędziach danego systemu: dla Androida w Kotlinie albo Javie, dla iOS w Swifcie. Aplikacja hybrydowa, zwana też multiplatformową, opiera się na frameworku takim jak React Native albo Flutter, który z jednego kodu buduje wersje na oba główne systemy. Aplikacja webowa działa w przeglądarce telefonu lub w kontrolce WebView osadzonej w prostej powłoce.
Każde podejście ma inne koszty. Natywna wersja daje pełny dostęp do sprzętu i najlepszą kontrolę nad wydajnością, ale wymaga osobnego kodu na każdy system. Rozwiązanie hybrydowe skraca czas pracy, choć dostęp do mniej typowych funkcji urządzenia, na przykład skanera w terminalu przemysłowym, bywa wolniejszy do zbudowania. Aplikacja webowa nie wymaga instalacji, lecz ogranicza dostęp do sprzętu.
| Kryterium | Natywna | Hybrydowa | Webowa |
|---|---|---|---|
| Dostęp do skanera i czujników | Pełny, przez interfejsy systemu | Przez wtyczki, część wymaga kodu natywnego | Ograniczony do możliwości przeglądarki |
| Praca bez sieci | Lokalna baza i kolejka zadań | Lokalna baza przez bibliotekę frameworku | Pamięć przeglądarki, ograniczony rozmiar |
| Aktualizacja | Nowy pakiet na urządzenia | Nowy pakiet na urządzenia | Na serwerze, bez ingerencji w urządzenie |
| Kod do utrzymania | Osobny dla każdego systemu | Jedna baza kodu | Jedna baza kodu, wspólna z wersją biurową |
Reguła: technologię wybiera się na podstawie urządzeń, na których aplikacja będzie pracować, a nie na podstawie mody. Terminal ze skanerem wymaga innych założeń niż telefon klienta.

Aplikacja mobilna czy webowa w firmie
W systemach firmowych podział wynika ze stanowiska. Pracownik biurowy siedzi przy komputerze, więc wystarcza mu przeglądarka. Magazynier chodzi po hali z terminalem w ręku. Skanuje kody i potwierdza operacje przy regale, więc potrzebuje aplikacji mobilnej. Studio WMS.net występuje w wariantach Framework i web oraz Android, które korzystają z tej samej bazy danych i są dobierane do stanowiska. Ten podział opisuje artykuł o aplikacjach WMS i ich architekturze.
Kiedy aplikacja webowa wystarcza, tworzenie osobnej wersji mobilnej jest zbędnym kosztem. Wystarcza wtedy przeglądarka i układ interfejsu dopasowany do ekranu telefonu. Podstawy budowy takich aplikacji przedstawia tekst o aplikacji webowej. Gdy jednak potrzebny jest skaner sprzętowy, praca bez zasięgu albo tryb kiosku, sensowna jest aplikacja instalowana na urządzeniu.
| Sytuacja | Podejście | Powód |
|---|---|---|
| Formularz zgłoszeń dla klienta na telefonie | Webowa | Brak instalacji, aktualizacja na serwerze |
| Magazynier ze skanerem sprzętowym | Natywna Android | Bezpośredni dostęp do skanera i trybu kiosku |
| Handlowiec w terenie z telefonami dwóch systemów | Hybrydowa | Jedna baza kodu na Androida i iOS |
| Kierowca odbierający zadania i potwierdzający dostawy | Natywna lub hybrydowa | Lokalizacja i powiadomienia oraz praca w słabym zasięgu |
Aplikacje dla dwóch głównych systemów opisuje tekst o software house dla iOS, a mobilne narzędzia dla działu sprzedaży omawia artykuł o mobilnym CRM. Zadania kierowcy i spedytora przedstawia strona aplikacji mobilnej dla kierowcy i spedytora.
Interfejs na hali i etapy projektu
Ekran terminala magazynowego projektuje się inaczej niż ekran telefonu konsumenta. Operator pracuje w rękawicach, często jedną ręką, i patrzy na ekran przez ułamek sekundy. Dlatego każdy ekran obsługuje jedną czynność, a przyciski mają duże pole dotyku. Wynik skanowania jest widoczny z odległości ramienia, a błąd sygnalizowany dźwiękiem i kolorem.
- Jedna czynność na ekran - przyjęcie i przesunięcie oraz kompletacja mają osobne widoki, a nie wspólny formularz z wieloma polami.
- Duże pola dotyku i czytelny kontrast - przyciski dają się nacisnąć w rękawicy, a tekst odczytać w słabym oświetleniu hali.
- Potwierdzenie dźwiękiem - sygnał odróżnia poprawny odczyt od błędnego bez patrzenia na ekran.
- Minimum pisania - dane pochodzą ze skanera albo z listy wyboru, a klawiatura ekranowa pojawia się wyjątkowo.
Projekt aplikacji mobilnej przebiega w kilku etapach. Wykonawca zaczyna od konsultacji i analizy potrzeb. Potem projektuje interfejs oraz doświadczenie użytkownika. Następnie programuje i testuje, a na końcu wdraża aplikację i zapewnia jej rozwój po uruchomieniu. Tabela porządkuje te etapy.
| Etap | Co obejmuje | Wynik |
|---|---|---|
| Analiza potrzeb | Konsultacja oraz funkcje i platforma docelowa | Specyfikacja z decyzją o technologii |
| Projekt interfejsu | Makiety ekranów i ścieżki użytkownika | Zatwierdzone makiety |
| Programowanie i testy | Implementacja, testy na urządzeniach docelowych | Pakiet do pilotażu |
| Wdrożenie i wsparcie | Dystrybucja i szkolenie oraz dalszy rozwój | Aplikacja w pracy na hali |
Testy na urządzeniach docelowych są niezbędne, bo emulator nie odtwarza modułu skanującego ani warunków hali. Test w chłodni pokazuje, jak zachowuje się ekran dotykowy przy niskiej temperaturze, a test w strefie bez zasięgu sprawdza kolejkę offline. Pilotaż na jednej zmianie ujawnia problemy, których nie widać w biurze.
Android w magazynie - skaner i terminal
Terminal przemysłowy z Androidem różni się od zwykłego telefonu konstrukcją. Ma wzmocnioną obudowę i wymienny akumulator oraz dedykowany moduł skanujący, który czyta kody 1D i 2D szybciej niż kamera. Aplikacja tworzona dla magazynu musi ten skaner obsłużyć, a producenci sprzętu udostępniają go zwykle jako klawiaturę wirtualną lub przez komunikat systemowy, który aplikacja przechwytuje.

Wybór sprzętu i sposób odczytu kodów opisuje artykuł o kolektorze danych z Androidem, a działanie aplikacji w codziennej pracy przedstawia tekst o aplikacji magazynowej na Androidzie. Starsze terminale z systemami Windows CE i Windows Mobile zastępuje się dziś urządzeniami z Androidem, o czym mówi artykuł o Windows Mobile w magazynie WMS. Na stronie producenta znajduje się także przegląd terminali radiowych.
Wersja Androida na terminalu decyduje o okresie poprawek bezpieczeństwa i o zgodności z narzędziem MDM. Aplikacja deklaruje minimalną wersję systemu, na której działa, oraz wersję docelową, względem której ją testowano. Zbyt niska wartość minimalna wydłuża listę przypadków testowych, a zbyt wysoka wyklucza starsze terminale w magazynie. Przegląd wydań systemu zawiera dokumentacja wersji Androida.
| Parametr aplikacji | Znaczenie | Skutek złego doboru |
|---|---|---|
| Minimalna wersja systemu | Najstarszy Android, na którym aplikacja działa | Zbyt wysoka wyklucza starsze terminale w magazynie |
| Wersja docelowa | Wersja, względem której aplikację testowano | Zbyt niska ogranicza dostęp do nowszych mechanizmów systemu |
Firma ustala jedną minimalną wersję dla całej floty i pilnuje jej przy zakupie nowego sprzętu. Przed zamówieniem terminali warto zapytać producenta o okres wsparcia aktualizacjami, bo urządzenie bez poprawek bezpieczeństwa staje się problemem dla działu IT, nawet gdy fizycznie nadal działa.
Skanowanie musi być odporne na błędy operatora. Aplikacja sprawdza cyfrę kontrolną kodu, porównuje odczytany numer z listą oczekiwanych pozycji i sygnalizuje niezgodność dźwiękiem oraz kolorem ekranu. Potwierdzenie operacji wysyła się do serwera dopiero po przejściu walidacji lokalnej, dzięki czemu terminal nie obciąża sieci błędnymi odczytami.
Praca offline i synchronizacja z serwerem
Hala magazynowa ma strefy bez zasięgu Wi-Fi: chłodnie, wnęki między regałami, zamknięte naczepy. Aplikacja, która przestaje działać bez sieci, blokuje pracę, więc operacje zapisuje się najpierw lokalnie, a wysyła po odzyskaniu połączenia. Na Androidzie lokalną bazę zapewnia biblioteka Room, a wysyłkę w tle harmonogramuje WorkManager.
@Entity(tableName = "operacja")
data class Operacja(
@PrimaryKey val id: String, // UUID nadany na terminalu
val typ: String,
val ladunek: String, // dane operacji w formacie JSON
val utworzono: Long,
val wyslano: Boolean = false
)
@Dao
interface OperacjaDao {
@Query("SELECT * FROM operacja WHERE wyslano = 0 ORDER BY utworzono")
suspend fun oczekujace(): List<Operacja>
@Query("UPDATE operacja SET wyslano = 1 WHERE id = :id")
suspend fun oznaczJakoWyslana(id: String)
}
Kolejna operacja ma identyfikator nadany na terminalu, więc serwer potrafi rozpoznać powtórkę. Po awarii połączenia terminal może wysłać ten sam komunikat drugi raz, a zapis nie może wtedy zwielokrotnić przyjęcia towaru. Po stronie SQL Server pilnuje tego klucz główny, który odrzuca duplikat.
CREATE TABLE dbo.OperacjaTerminala (
OperacjaId uniqueidentifier PRIMARY KEY,
Typ varchar(30) NOT NULL,
Ladunek nvarchar(max) NOT NULL,
PrzyjetoUtc datetime2(0) NOT NULL DEFAULT SYSUTCDATETIME()
);
INSERT INTO dbo.OperacjaTerminala (OperacjaId, Typ, Ladunek)
SELECT @OperacjaId, @Typ, @Ladunek
WHERE NOT EXISTS (
SELECT 1 FROM dbo.OperacjaTerminala WHERE OperacjaId = @OperacjaId
);
Warunek NOT EXISTS zapewnia, że powtórzone żądanie nic nie zmieni, a klucz główny chroni przed równoległym wstawieniem dwóch takich samych identyfikatorów. Dokumentacja opisuje bibliotekę Room do lokalnego zapisu danych, a wysyłkę w tle omawia przewodnik po WorkManager. Nazwy tabel i klas w przykładach są umowne i nie odzwierciedlają struktury żadnego produktu.
Dystrybucja aplikacji i podpisywanie
Gotowy pakiet aplikacji musi zostać podpisany kluczem, a wynik trafić na urządzenia. Podpis potwierdza pochodzenie pakietu, a system odrzuca aktualizację podpisaną innym kluczem niż pierwotna instalacja. Utrata klucza oznacza więc konieczność przeinstalowania aplikacji, dlatego klucz przechowuje się w bezpiecznym miejscu i z kopią. Zasady opisuje dokumentacja podpisywania aplikacji na Androidzie.
Każda nowa wersja ma większy numer kodu wersji. System nie pozwoli zainstalować pakietu o numerze niższym niż istniejący, co chroni przed omyłkowym cofnięciem aplikacji. Numer wersji zapisuje się w skrypcie budowania, żeby nie zależał od ręcznej edycji.
| Kanał dystrybucji | Jak działa | Kiedy pasuje |
|---|---|---|
| Sklep publiczny | Użytkownik pobiera aplikację ze sklepu | Aplikacja dla klientów lub dla dużej liczby prywatnych urządzeń |
| Prywatna publikacja dla organizacji | Aplikacja widoczna tylko dla wskazanej firmy w zarządzanym sklepie | Aplikacja wewnętrzna, gdy firma ma konto zarządzania urządzeniami |
| Plik pakietu z konsoli MDM | Konsola instaluje pakiet na grupie terminali | Flota terminali przemysłowych bez konta w sklepie |
| Instalacja ręczna | Pakiet kopiowany na urządzenie | Pojedynczy pilotaż i testy |
Instalacja ręczna sprawdza się przy pilotażu, ale przy kilkudziesięciu terminalach zawodzi. Wtedy wchodzą do gry systemy zarządzania urządzeniami mobilnymi, opisane szerzej w artykule o programie magazynowym na Androida i flocie MDM.
Zarządzanie flotą i aktualizacje MDM
System MDM rejestruje urządzenia, przypisuje im grupy i wymusza ustawienia. Administrator zapisuje konfigurację raz, a terminale ją pobierają. Nowa wersja aplikacji trafia do grupy pilotażowej, a po kilku dniach bez zgłoszeń do pozostałych, co ogranicza skutki ewentualnego błędu w wydaniu.
Android udostępnia do tego zestaw interfejsów opisany w dokumentacji Android Enterprise. Tryb kiosku ogranicza ekran do wskazanej aplikacji, co blokuje pracownikowi możliwość zmiany ustawień lub uruchomienia innego programu. Przy pracy zmianowej terminal współdzielony przez kilka osób zyskuje logowanie użytkownika w aplikacji, a nie na poziomie systemu.
- Grupa pilotażowa - kilka terminali, które dostają nową wersję jako pierwsze i wykrywają błędy przed wdrożeniem na całą flotę.
- Okno aktualizacji - przedział czasu poza szczytem pracy, w którym terminale pobierają i instalują pakiety.
Po stronie serwera warto prowadzić rejestr, z którego wynika, jaką wersję aplikacji ma każde urządzenie. Przy zmianie kontraktu interfejsu serwer musi obsługiwać dwie wersje jednocześnie, bo część terminali zaktualizuje się później. Reguła zgodności wstecznej oszczędza magazynowi przestojów w dniu wydania.
Bezpieczeństwo i integracja z systemami firmowymi
Aplikacja mobilna nie łączy się z bazą wprost. Komunikuje się z serwerem przez interfejs REST, a ten weryfikuje uprawnienia i wykonuje operacje w bazie. Połączenie odbywa się przez HTTPS, a token dostępu użytkownika przechowuje się w bezpiecznym magazynie kluczy systemu, a nie w zwykłym pliku ustawień.
Integracja z systemami ERP i WMS oraz CRM odbywa się po stronie serwera, tak by aplikacja mobilna pozostała cienkim klientem. Zmiana w ERP nie wymaga wtedy nowej wersji aplikacji na terminalach. Dane wrażliwe, na przykład osobowe, ograniczają się do niezbędnego minimum, a dziennik zdarzeń rejestruje, kto i kiedy wykonał operację.
| Zagrożenie | Mechanizm ochrony |
|---|---|
| Przechwycenie ruchu w sieci Wi-Fi | HTTPS z weryfikacją certyfikatu serwera |
| Zgubiony lub skradziony terminal | Blokada ekranu, zdalne wyczyszczenie z konsoli MDM |
| Odczyt tokenu z pamięci urządzenia | Bezpieczny magazyn kluczy i krótki czas ważności tokenu |
| Uruchomienie obcej aplikacji na terminalu | Tryb kiosku i wymuszona lista dozwolonych aplikacji |
Firma z Poznania, SoftwareStudio, oferuje aplikacje mobilne zintegrowane z systemami ERP i WMS oraz CRM oraz pracujące z danymi w chmurze. Aplikacje działają na Androidzie i iOS, a zakres funkcji ustala się na podstawie analizy procesu. Kontakt z zespołem odbywa się pod numerem +48 533 322 626, a przykładowe systemy można obejrzeć w demo online.




