반응형
Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

코딩하기 좋은날

롤(Riot) API를 활용한 롤 알림 안드로이드 앱 제작 - 2 (Kotlin) 본문

Android

롤(Riot) API를 활용한 롤 알림 안드로이드 앱 제작 - 2 (Kotlin)

huiung 2020. 7. 19. 23:09
반응형

5. 소환사 저장

 

1편에서 사실상 목표로 하는 기능의 구현은 끝이 났습니다. 이제는 유저가 소환사를 등록 하고 이 등록된 소환사들을 대상으로 앞선 기능들을 수행해 주면 됩니다.

 

처음에는 DB를 이용하려 했으나 소환사 이름만 저장하는 것이기 때문에 굳이 그럴 필요가 없음을 느꼈습니다. 따라서 SharedPreferences를 이용하였고 소환사 이름 - Boolean 의 형태로 하나의 파일에 저장을 했습니다. 

 

이것외에도 추가의 저장이 필요한 정보가 존재합니다. 앞서 우리의 구현과정을 보면 80초마다 API를 호출하여 게임 여부를 판단한다고 하였습니다. 그렇다면 동일 게임에 대해서도 알림이 또 전송되는 현상이 발생합니다. 

 

라이엇에서는 각경기마다 matchID를 부여합니다. 따라서 이를 이용하여 위의 문제를 해결 할 수 있습니다. 저는 또다른 파일에 소환사이름+"game"  ---  matchID 와 같은 식으로 저장을 했습니다. 따라서 API호출을 한 뒤 현재 저장된 matchID와 동일한 게임이라면 이미 알림을 보냈으니까 다시 보낼 필요가 없습니다. matchID가 다르다면 새로운 게임이 시작 된 것이므로 알림을 보내면 됩니다!

 

소환사를 등록할 때도 API를 호출하여 존재하는지 확인을 하고 등록하는 과정을 거치게 됩니다. 따라서 API호출이 꽤나 빈번하게 일어남을 알 수 있습니다.

 

자 이제 저장이 다 되었으니 서비스에서 모든 key값을 가져온뒤 각각의 닉네임에 대해 API호출을 진행하면 끝입니다!

 

 

6. 유저 정보 표시

목표로 한 기능은 위에까지 였지만 보이는 화면이 너무 심심하여 위의 등록된 소환사들의 정보를 

 

RecyclerView+CardView로 뿌려주는 기능을 추가했습니다. 간단하게 소환사 아이콘, 이름,레벨, 티어 정보, 승/패 정보 정도만 뿌렸습니다. 

 

전체적으로 따져보면 API호출이 굉장히 빈번하게 일어남을 알 수 있습니다,, 이게 사실 Product Key를 받는다고 하더라도 많은 유저가 사용한다면 이를 다 감당할 수 있을지는 의문입니다. 혼자쓰기에는 별 문제가 없어보이지만 결국 하루마다 갱신을 해줘야 하는 귀찮음이 존재합니다..

 

 

추가정보들은 SUMMONER 와 LEAGUE를 조합해서 각각 뿌려주면 끝입니다.!! 따로 디자인은 귀찮아서 하지 않았고(못합니다 사실..) 대략적으로 아래와같이 나오게 됩니다!!! 완성!! (음 사실 만들때 그랜드마스터는 생각안하고 있어서 글자가 짤리네요)

 

 

 

7. ISSUE

1. 서비스가 Destroy되고나서 재시작이 안되는 경우가 종종 있습니다. 

 

2. 실제 서비스로 하기에는 역시나 너무나 많은 API호출이 필요합니다.  Product Key가 있다면 수천명 정도까지 이용이 가능 할것으로 예상 됩니다.

 

3. 매일 키를 갱신해줘야 하는 귀찮음이 있습니다. 이도 물론 Product Key가 있다면 해결 가능합니다.

 


+) 글 작성 이후에 수정을 조금 하였습니다.

1. Service 를 on/off 시킬 수 있는 Switch 버튼 추가 (on 일때만 immortal Service 동작)

 

2. 위에서 말한 것처럼 최초에 encrypted ID를 SharedPreferences에 저장하여 호출 횟수를 절반으로 줄였습니다.

 

3. 개인 API KEY를 입력하여 저장 한 뒤 사용 가능하게 하였습니다.

   -> 자신의 API KEY를 발급받고 KEY 변경 버튼 옆 editText에 입력한 후 버튼을 누르면 API KEY가 저장됩니다.

 

 

 

 

4. 기존에 AsyncTask를 이용하여 비동기 작업을 수행 하였는데 이를 Coroutine을 이용하여 처리하도록 변경하였습니다.

 

5. RecyclerView를 swipeRefreshLayout 으로 둘러쌌습니다. -> 소환사 등록 / 삭제 후 pull down을 하면 RecylcerView의 소환사들이 갱신 됩니다.

 

위의 ISSUE들에 대한 약간의 해결책들과 UI의 변경사항들이 꽤나 있어 새로 글을 쓰게 되었습니다. 아래의 링크도 읽어주시면 감사하겠습니다. (3편입니다.)

https://huiung.tistory.com/175

반응형