마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

자동 로그아웃 팁좀 부탁드립니다.

0 추천
안녕하세요 초보 개발자가 질문좀 드리겠습니다.

로그인을 구현하려고 하는 데요...

로그인은 간단하게 될 것 같은 데

자동 로그아웃이 문제내요.

사용자가 홈 버튼을 눌렀다거나 스마트폰이 절전모드 상태에서도 아무런 액션없이 20분이 지나면

자동 로그아웃 안내 버튼을 띄워주고 싶습니다.

서비스를 이용할 수 밖에 없겠죠?? 아니면 다른 방법도 있을까요?

또 액션이 없다는 걸 어떻게 판단해야 할까요...

예를 들면 로그인 - 메인화면 - 각 업무화면 순이라면

모든 업무화면에 Touch event 를 구현하여 액션이 있는 지 없는 지 체크를 해야하나요?

답변부탁드립니다~
와인한잔 (400 포인트) 님이 2020년 11월 5일 질문

1개의 답변

+2 추천
 
채택된 답변

간단하게는 Timer를 쓰셔도 되구요, 당연히 서비스도 될거구요. 저는 WorkManager를 추천합니다. 스케쥴링에 최적화된 클래스이기 때문에.

https://developer.android.com/topic/libraries/architecture/workmanager.

매 20분마다 스케쥴링을 해서 유저의 인터액션이 없었는지 체크하시면 될 것 같습니다.

static final USER_SESSION_TIME = 20 * 60 * 1000L;

long lastUserInteractionTime = 0L


boolean sessionExpired = (System.currentTimeMillis() - lastUserInteractionTime) >= USER_SESSION_TIME
if (sessionExpired) {
    logout();
    return;
}

lastUserInteractionTime = System.currentTimeMillis();



private void logout() {
     Intent intent = new Intent(context, LoginActivity.class);
     intent.setFlag(FLAG_ACTIVITY_NEW_TASK);
     context.startActivity(intent);
}

유저 액션을 트랙킹하는 가장 전통적인 방법은 액티비티의 onUserInteraction() 을 오버라이드 하는 겁니다. 보틍은 abstract class BaseActivity 이런 식으로 하고 여기에 onUserInteraction()을 오버라이드 해서 필요한 로직을 넣고 다른 액티비티들은 BaseActivity를 상속해서 처리하도록 만드는게 많이들 해왔던 방식인데, 더 나은 방법은 있는지는 고민을 해봐야 겠네요.

이 방법을 쓰시던 안쓰시던, 별도로 세션을 핸들링하는 클래스를 만드신 다음, 거기에서 유저 세션관련 처리를 하시고 액티비티에서는 단지 그 클래스의 인스턴스를 이용해 세션관리 클래스로부터 세션상태만 참고하는 식으로 코딩을 하시길 권장드립니다.

spark (227,470 포인트) 님이 2020년 11월 5일 답변
와인한잔님이 2020년 11월 6일 채택됨
...