Założeniem projektu (nazwa kodowa "Kommunicator") jest stworzenie komunikatora w formie aplikacji mobilnej na Androida i iOS przy wykorzystaniu technologii Kotlin Multiplatform. Aplikacja będzie wykorzystywać REST API udostępniane przez cześć serwerową wykonaną we frameworku Ktor. Dane wszystkich użytkowników z wiadomościami przechowywane będą w bazie danych PostgreSQL. Sposobem na zabezpieczenie komunikacji między klientem a serwerem oprócz SSL będzie JWT.
Podstawowe funkcjonalności komunikatora:
- rejestracja i logowanie
- dodawanie kontaktów
- wysyłanie i odbieranie wiadomości tekstowych
- statusy (odczytana wiadomość, pisanie)
- historia wiadomości dostępna offline
- powiadomienia push
Do zbudowania serwera z działającą wysyłką powiadomień wymagane jest podanie w zmiennej GOOGLE_APPLICATION_CREDENTIALS w pliku .env ścieżki do pliku .json z danymi dostępowymi do Google Cloud, które można wygenerować tak, jak pisano na stronie: https://firebase.google.com/docs/admin/setup#initialize_the_sdk_in_non-google_environments.
UWAGA: Żeby powiadomienia działały, aplikacje muszą być połączone z tym samym projektem Firebase.
$ cp .env.example .env # skopiowanie domyślnych ustawień
$ docker-compose up # utworzenie obrazów z serwerem i bazą danych oraz ich uruchomienie
Important
Do zbudowania aplikacji wymagane jest co najmniej JDK 17.
Note
Aplikacja domyślnie buduje się z adresem API ustawionym na http://192.168.227.5:8080/. Należy go
dostosować do adresu hosta z postawionym w poprzednim kroku serwerem w pliku
./composeApp/build.gradle w bloku targetConfigs
.
$ ./gradlew assembleDebug # zbudowanie apk
Tip
Plik .apk będzie znajdował się w ./composeApp/build/outputs/apk/debug/
Do zbudowania aplikacji z działającymi powiadomieniami potrzebny jest Provisioning Profile, a więc i konto Apple ID z Apple Developer Program membership.
W pliku Config.xcconfig ustawia się TEAM_ID używany przy budowaniu aplikacji. Można zostawić pusty (jak w Config.xcconfig.example), ale wtedy nie będą działać powiadomienia.
$ cp iosApp/Configuration/Config.xcconfig.example iosApp/Configuration/Config.xcconfig