APP 기능
Last updated
Last updated
https://github.com/osamhack2020/APP_KookMoBanUser_PonJohmNaimann
사용자 휴대폰의 제조사 정보를 자동으로 불러온다.
사용자 식별과 미등록 휴대폰(투폰) 및 앱 무단 재설치를 방지하기 위해 앱 설치 시 고유 ID인 GUID를 생성한다.
위 정보들과 사용자로부터 이름, 군번, 초대 코드를 입력받아 서버에 병사 정보를 등록한다.
잘못된 초대 코드를 입력할 경우 가입을 거절한다.
서버와의 통신 실패 시 "로그인 실패" 토스트를 띄운다.
정상적으로 가입이 완료될 경우 "로그인 성공" 토스트를 띄운다.
로그인 성공 시 입력한 초대 코드에 맞는 관리자 정보를 알려주는 토스트를 띄운다.
입력받은 사용자 정보를 저장하여 다음 앱 실행부터는 등록 이후 메인 페이지가 띄워지도록 한다.
뒤로 가기 버튼을 누를 경우 앱 종료 알림 토스트를 띄운다. (기기 등록 페이지로 돌아가는 것 방지)
뒤로 가기 버튼을 두 번 누를 경우 앱을 종료한다.
TOTP 키와 사용자 정보 이용하여 QR코드 생성한다.
10초마다 서버로부터 반납 성공 여부를 불러오고, 반납 실패 시 새로운 TOTP값을 이용하여 QR코드를 재생성한다. 이때, 메인 쓰레드에서 무한 루프를 실행하면 실행이 되지 않기 때문에 coroutine 블록을 생성하여 작업을 실행한다.
이미지의 픽셀을 앱 자체적으로 수정하는 것은 시스템에 부하가 많이 걸리는 작업이기 때문에 본 프로젝트에서 QR코드 암호화 기능은 구현하지 않았다. 이 기능을 구현하기 위해서는 다음과 같은 로직이 필요하다.
QR코드 이미지의 픽셀 정보를 불러와 검정색 픽셀인지 흰색 픽셀인지 체크한다.
암호화 방식에 따라 각 픽셀에 랜덤한 rgb 값을 입력한다.
위에서 볼 수 있듯이 QR코드 암호화의 기본 개념 자체는 단순하기 때문에 픽셀 정보 수정 알고리즘이 개선된다면 충분히 구현 가능한 기능이라고 여겨진다.
프로젝트 라이센스와, 사용된 3rd-Party Software라이브러리 라이센스에 대한 내용은 아래 페이지 참고
Package
Licenses
Android AppCompat Library v7 (1.1.0)
Apache-2.0
Android ConstraintLayout (1.1.3)
Apache-2.0
Android SDK (26.0.1)
Android-Sdk
CircleImageView (3.1.0)
Apache-2.0
Core Kotlin Extensions (1.2.0)
Apache-2.0
jackson-module-kotlin (2.10.2)
Apache-2.0
kotlin-stdlib (1.3.72)
Apache-2.0
kotlinx-coroutines-android (1.3.9)
Apache-2.0
org.jetbrains.kotlin:kotlin-android-extensions-runtime (1.3.72)
Apache-2.0
ZXing Core (3.3.0)
Apache-2.0
zxing-android-embedded (3.6.0)
Apache-2.0