nueijeel
[Android] 앱 삭제 후 이전 데이터가 남아있는 문제 본문
세모반 앱 버전을 업데이트 하면서
기존에 사용하던 서버 도메인을 개발 서버에서 운영 서버로 옮겼는데
그 이후로 일부 기기에서 업데이트 된 버전을 다운받으면
로그인 화면에 데이터 로딩 화면이 뜨는 현상이 발생했다.
데이터 로딩 화면은 홈 화면이 실행되고 서버 통신되는 시간동안 다른 요소를 클릭해서 발생하는 에러를 방지하기 위해 넣은 화면인데 로그인 화면에서 이 화면이 계속 뜬다는 건...
자동로그인을 처리하는 과정에서 이전 설치시 로그인했던 데이터가 남아있기 때문일거라고 추측했다
우선 정확한 원인 파악을 위해 앱을 다시 실행하고 로그를 살펴보니
홈 화면에서 최초로 유저 프로필을 받아오는 통신이 수행되고 401 코드를 반환받았다
401은 액세스토큰 만료 코드이기 때문에 이 코드를 반환 받으면 토큰 갱신을 위한 api가 호출되는데
이후 LoginRepository에서 찍힌 로그에서도 401 코드가 반환된 것을 보면 액세스 토큰 갱신에 사용되는 리프레시 토큰이 유효하지 않음을 알 수 있었다.
로그를 통해서 두가지 문제점을 파악할 수 있었다.
첫 번째는,
앱을 처음 실행했는데 홈 화면에서 통신이 이루어진다는 것은 자동 로그인에 사용되는 내부 데이터가 이전 설치 삭제 시 삭제되지 않고 그대로 남아있어 발생하는 문제
두 번째는,
토큰 갱신에 실패해서 로그인 화면으로 돌아갈 때 데이터 로딩 화면이 dismiss 되지 않아 앱이 먹통이 되어버리는 문제
두 번째 문제는 토큰 갱신 api 통신 시 401 에러가 발생할 경우 데이터 로딩 화면을 닫아주는 처리를 하면 되기 때문에
여기서는 첫 번째 문제의 해결 방법만을 알아보려고 한다.
안드로이드 6.0(API 23) 버전 이후부터는 사용자의 Google Drive에 있는 비공개 폴더에 자동으로 앱 데이터를 백업시켜주기 때문에 애플리케이션에서 자동 백업을 사용하지 않도록 설정하면 앱을 재설치해서 사용해도 이전 데이터가 백업되지 않는다고 한다.
(백업되는 파일의 종류나 백업 위치 등의 자세한 정보는 공식문서를 통해 확인할 수 있다.)
애플리케이션에서 자동 백업을 사용하지 않도록 설정하는 방법은 간단하다.
<application
...
android:allowBackup="false"
android:fullBackupContent="false"
...
AndroidManifest.xml 파일에서 android:allowBackup 속성과 android:fullBackupContent 속성 각각을 false로 지정해주면 된다!
앱을 삭제하면 당연히 관련된 내부 데이터가 함께 삭제되는 줄 알았는데 백업이 되었다가 활용되는 줄은 몰랐다.
만약 앱을 삭제했다가 다시 깔았을 때 존재해야하는 이전의 데이터가 있다면 backup rule을 이용해 자동으로 데이터를 백업해뒀다가 복원할 데이터를 지정해볼 수도 있을 것 같다!
참고)
https://lifeinprogram.tistory.com/31
'Android > 에러 및 문제 해결' 카테고리의 다른 글
[Android] 세모반 리팩토링 - PreSigned URL을 이용한 이미지 업로드 로직 구현 下 (이미지 저장 api 수정) (0) | 2024.04.09 |
---|---|
[Android] 세모반 리팩토링 - PreSigned URL을 이용한 이미지 업로드 로직 구현 上 (0) | 2024.04.03 |
[Android] 카카오 로그인 구현하기 - 카카오계정 로그인이 안되는 현상 (0) | 2024.02.16 |
[Android] OutOfMemoryError (0) | 2023.08.22 |
[Android] NoModelLoaderAvailableException 오류 (0) | 2023.08.22 |