코딩하기 좋은날
롤(Riot) API를 활용한 롤 알림 안드로이드 앱 제작 - 3 (Kotlin) 본문
처음에 만든 모습에서 조금씩 수정을 하다보니 3편 글을 쓰게 되었습니다.
1. Navigation Drawer 적용
기존의 단순 버튼을 클릭해서 동작하던 방식을 Navigation Drawer를 이용하였습니다.
메인화면에는 등록된 소환사들의 정보를 RecylcerView를 이용하여 보여줍니다.
왼쪽 상단의 메뉴 버튼을 클릭하거나 왼쪽에서 오른쪽으로 swipe를 하게 되면 아래와 같은 Navigation Drawer가 나오게 됩니다.
사용자 등록/삭제, API 키 변경을 클릭시 AlertDialog가 등장하며 값을 입력받아 동작을 수행하게 됩니다.
KEY 발급 항목을 클릭시 Riot API 키를 발급 받을 수 있는 페이지를 웹뷰에서 띄우게 됩니다. 자신의 롤 ID를 통해 이 KEY 값을 발급 받은 뒤 API 키 변경 항목을 통해 키를 넣어주게 되면 서비스 이용이 가능해 집니다. (KEY는 24시간뒤 파기되므로 매일 갱신을 해주어야 합니다.)
알림을 받기 위해서는 Service의 Switch 버튼을 켜주시면 됩니다.
2. Foreground Service 이용
기존의 Immortal Service가 완벽하게 동작하지 않아 고민을 많이 하였습니다.
Doze mode일때 AlarmManager를 이용하여 어느정도 대응을 하고 있지만 반복주기가 짧다보니 완벽 대응이 되지 않는다고 판단하였습니다. (제앱의 반복주기는 5분인데 Doze 모드에서 AlarmManager가 대응 할 수 있는 최소 반복주기가 9분(?)이상 이라는것 같습니다.)
보통게임이 15분이상 가니 차라리 안전하게 WorkManager를 사용할까 하는 생각도 하였지만 15분이라는 최소 주기가 마음에 들지 않았습니다.
고민을하다 생각이 든건 그냥 notification을 하나 띄우고 foreground Service를 이용하자는 것입니다.
처음에는 이 notification이 거슬려서 없애려고 포그라운드에서 다시 startService를 이용하는 방식으로 코드를 작성하였지만 서비스가 실행되고 있음을 유저에게 알리고 그에따른 notification을 하나 추가시켜 놓는것이 더 맞다고 판단이 들었습니다.
안드로이드 오레오(API 26) 버전부터 백그라운드에서 서비스를 시작하는 것에 제약이 걸린것 자체가 유저가 알지 못하는 작업이 실행되는 것을 방지하기 위함이므로 MP3 Player에서 노래가 나오면 notification이 떠잇듯 이러한 알리미도 notification이 떠있는것이 맞다고 생각합니다. foreground Service는 doze모드에서도 큰 문제가 없고 유저의 switch on / off에 따라 계속해서 유지가 되는 것으로 보입니다.
3. 결론
최종적으로 주기는 5분으로 설정을 하였습니다. API 키를 매일 갱신 한다는 귀찮음만 제한다면 알리미로써의 역할은 충분히 할 수 있는 앱이 된 것 같습니다.
기본적으로 MVVM패턴을 이용하여 코드를 구현하려고 노력을 했습니다. 아직 공부중이라 개념이 완벽하게 잡혀있는건 아니지만 패키지를 구조화하고 AAC(DataBinding, LiveData, ViewModel)를 이용해서 적용하려고 노력을 했습니다.
최종적으로 MVVM 패턴 , DI, Mockito를 이용한 Unit Testing을 이 프로젝트에 적용 하여 글을 다시 작성해 보겠습니다.
아래 깃허브에 모든 코드는 들어있으니 혹 궁금하신분들은 참고해주세요.
'Android' 카테고리의 다른 글
안드로이드 ViewModels 과 LiveData 패턴 및 안티패턴 (MVVM 패턴) (0) | 2020.10.24 |
---|---|
안드로이드 FCM 송/수신 (Kotlin, PHP, Firebase) (0) | 2020.09.06 |
안드로이드 SharedPreferences 사용 예제(Kotlin) (0) | 2020.08.03 |
롤(Riot) API를 활용한 롤 알림 안드로이드 앱 제작 - 2 (Kotlin) (0) | 2020.07.19 |
롤(Riot) API를 활용한 롤 알림 안드로이드 앱 제작 - 1 (Kotlin) (0) | 2020.07.19 |