본문 바로가기

APP 프로젝트

4. [Surveasy] 어플의 시작화면, Splash

 

아래의 게시물에 이어지는 개발 과정 기록입니다.

 

 

3. [Surveasy] 기능 구현 과정에서의 고민

아래의 게시물에 이어지는 개발 과정 기록입니다. 2. [Surveasy] 어플 기능 정리 및 구현방법 아래의 게시물에 이어지는 개발 과정 기록입니다. 1. 어플 개발 과정 (1) 우리 서비스는 고객용 관점과

self-motivated-developer.tistory.com

 

어플을 시작했을 때 처음 나오는 화면인 splash 화면을 구현하는 방법은 여러가지 이다. 배경 filter 를 적용하거나 단독 Activity 를 만드는 등의 방법으로 구현이 가능하다. 하지만 우리의 어플을 splash 에서 처리해야 하는 작업이 존재했기 때문에 Activity 로 구현했다.

 

splash 에서 많은 작업을 처리하는 것은 권장되는 방법이 아니다. 하지만 자체 서버가 아닌 firebase 를 사용하는 우리의 어플 특성상 splash 에서 확인해야 할 사항이 많았기 때문에 무거운 splash 를 구현했다.

 

💡 네트워크 연결 확인
💡 FCM Token fetch
💡 auto login 설정 확인 후 다음 activity 결정

 

 

 

네트워크 연결 확인


설문을 받아오고, 인증하는 모든 과정에서 인터넷 연결이 필요했기 때문에 처음 어플에 진입할 때부터 기기의 네트워크 연결을 확인했다. 

 

네트워크 연결이 확인되지 않은 경우 나타나는 팝업창

 

네트워크 관련 팝업창은 어플의 다른 팝업창과 같은 디자인으로 커스텀한 팝업창을 사용했다. 

 

 

 

FCM Token fetch


firebase의 클라우드 메시징 서비스를 사용하여 유저들에게 알림을 보낼 수 있도록 구현했다. 유저들에게 알림을 보내려면 각 기기마다 고유한 FCM 토큰을 알고 있어야 했다. 토큰을 알고 있으면 일괄적으로, 혹은 해당 토큰의 기기에 알림을 보낼 수 있기 때문이다. 

 

FCM 토큰을 기기에 어플이 삭제되고 다시 설치되는 등의 이슈가 있으면 재발급된다. 때문에 어플에 진입할 때마다 FCM 토큰을 fetch 하고 저장하는 과정을 거쳤다. 그리고 이 과정을 splash 화면에서 구현했다. 

 

어플을 개발하는 초기에는 firestore 의 유저 컬렉션 안에 해당 토큰을 저장했고, 이후에는 로컬 db 인 room db 에도 함께 저장하여 사용성을 높였다. 

 

 

 

Auto Login


로그인 과정에서 "자동로그인" 을 체크하면 그 다음부터 어플에 진입할 때 자동으로 로그인이 가능하게 구현했는데, 자동로그인을 체크했는지 여부를 splash 에서 체크했다. firestore의 유저 컬렉션에서 해당 유저가 auto login 을 사용했는지를 체크하는 방법을 사용하다가, 이후에는 room db에 저장된 auto login boolean 을 확인하는 방법으로 변경했다. 

 

자동로그인을 확인하고 난 후 자동로그인이 설정되지 않은 유저라면 로그인 화면으로, 설정된 유저라면 메인 홈화면으로 이동시키는 과정을 splash 가 담당하게 했다. 

 

splash 가 이 과정 떄문에 많이 무거워졌다는 생각이 들었지만 firebase auth 함수를 사용하는 입장에서는 별다른 방법이 떠오르지 않았다. 다른 어플들을 어떻게 구현하는지에 대한 궁금증이 생겨 찾아보았지만 각기 다른 방법으로 자동로그인을 구현하고 있었다. 

 

이후에 자체 서버를 이용하여 refresh token, access token 을 통한 로그인을 구현할 기회가 있어서 다른 방법을 공부해볼 수 있었다. oAuth 방식의 로그인을 구현하면 refresh token 으로 만료된 access token 을 재발급 해주면서 "자동으로 자동로그인" 을 시켜줄 수 있었다. 그 과정에서 refresh token 에서 문제가 생기면 다시 유저에게 로그인을 요청하는 로직이었다.

 

 

 


가볍게 구현되는 것이 권장되는 splash 가 조금은 무거운 어플이지만, 초반에 구현하고 현재까지 유지되고 있는 위의 세 기능은 우리 어플의 splash 화면에서 반드시 필요한 기능이다. 다음 게시문에서는 MainActivity 에서 어떤 기능이 돌아가고 있는지를 기록하겠다.