Notice
Recent Posts
Recent Comments
Link
투케이2K
192. (TWOK/LOGIC) [android] 안드로이드 일 배치 ( Day Batch ) 동작을 수행하며 앱 버전 비교 (App Version Check) 수행 로직 본문
투케이2K 로직정리
192. (TWOK/LOGIC) [android] 안드로이드 일 배치 ( Day Batch ) 동작을 수행하며 앱 버전 비교 (App Version Check) 수행 로직
투케이2K 2026. 5. 26. 18:44728x90
반응형
[로직 정리]
정리 로직 : Mobile / Android
상태 : [android] 안드로이드 일 배치 ( Day Batch ) 동작을 수행하며 앱 버전 비교 (App Version Check) 수행 로직

[설 명]
// --------------------------------------------------------------------------------------
[사전) 설정 및 정보 확인 사항]
// --------------------------------------------------------------------------------------
1. 제 목 : [android] 안드로이드 일 배치 ( Day Batch ) 동작을 수행하며 앱 버전 비교 (App Version Check) 수행 로직
2. 테스트 환경 : 안드로이드 / android / Batch / App Version Check
3. 사전) 👉 배치 (Batch) 간략 설명
>> 배치 처리 (Batch Processing) 는 개별 데이터를 실시간으로 하나씩 처리하는 대신, 대량의 데이터를 한 번에 모아서 일괄적으로 처리하는 방식입니다.
- 데이터를 축적하다가 일정 주기마다 일괄적으로 처리하는 방식입니다
>> 배치 처리 (Batch Processing) 는 [일괄 처리] 라고도 불리며, 사용자의 개입 없이 또는 (자원이 허가한다면) 실행을 스케줄링 할 수 있는 작업 (job) 을 의미합니다
>> 배치 처리 (Batch Processing) 특징 및 활용 :
- 특징 : 사용자의 개입 없이 야간이나 새벽 등 지정된 시간에 자동으로 실행됩니다.
- 활용 : 은행의 대규모 거래 내역 정산, 데이터베이스 백업, 이메일 일괄 발송
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[로직 설명]
// --------------------------------------------------------------------------------------
------------------------------------------------------
✅ 사전 정리) 로직 구현 관련 필요 내용 정리
------------------------------------------------------
1. 앱 실행 시 앱 버전을 체크 해 특정 앱 버전을 만족하지 않는 경우나 업데이트가 필요한 경우 사용자에게 알림 표시를 위해 해당 로직 구현
2. 파이어베이스 서비스 연동 없이 AWS S3 에 특정 앱 업데이트 버전 파일 업로드 수행 후 해당 파일을 읽어 업데이트 여부 체크 수행
>> 👉 예시 앱 버전 체크 JSON 파일 :
{
"appVersion" : "1.0.2", // 최신 앱 버전
"appContents" : "보안 패치 버전 적용 앱 업데이트 필요", // 앱 업데이트 내용
"appDownloadUrl" : "https://..../app.apk", // 앱 파일 다운로드 URL 정보
"appMandatoryKey" : true // 강제 업데이트 여부 (true = 강제 업데이트 필요 / false = 업데이트 알림 팝업만 표시)
}
3. 앱 실행 시 마다 앱 버전을 체크하는 대신 일 (Day) 단위로 앱 버전을 체크하도록 로직 구현 수행
------------------------------------------------------
✅ 로직 정리) 앱 실행 시 앱 버전 체크 및 업데이트 알림 팝업창 표시
------------------------------------------------------
1. 안드로이드 특정 앱 실행 실시
2. 앱 실행 시 기본 네트워크 연결 상태 체크 수행
>> 앱 다운로드 버전 체크 http 호출 및 기본 앱 사용을 위해 네트워크 연결 상태 확인 수행
>> 휴대폰이 정상적으로 WiFi 또는 셀룰러 데이터 사용 상태가 아닌 경우 경고 팝업창 표시 수행
>> NetworkCapabilities networkCapabilities = cm.getNetworkCapabilities(cm.getActiveNetwork());
if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) || networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) { } else { '경고 팝업 표시' }
3. 금일 앱 버전 체크를 진행한 이력이 있는지 앱 실행 시 날짜와 프리퍼런스에 저장 된 날짜 비교 수행
>> [IF] 앱 실행 이력이 있는 경우 : 앱 버전 체크 호출 없이 즉시, 앱 사용 통과 또는 앱 실행 제한 및 앱 버전 불일치 팝업창 표시
>> [ELSE] 금일 앱 실행 이력이 없는 경우나 초기 앱을 최초로 실행한 경우 하위 로직 수행
4. 앱 파일 버전 비교 http 호출 수행 실시
>> [IF] 정상적으로 http 호출이 완료 된 경우 👉 앱 버전 체크 비교를 위한 데이터 파싱 수행 및 프리퍼런스에 금일 날짜로 앱 실행 날짜 데이터 업데이트 수행
>> [ELSE] 앱 버전 체크 http 호출에 문제가 발생한 경우 (버전 체크 파일이 없거나, 네트워크 통신 불안정 등) 👉 1회 더 확인 호출 수행 후 지속 에러 발생 시 경고 팝업창 표시 (현재 앱 버전 비교에 문제가 발생했습니다. 잠시후 다시 앱을 사용해주세요.)
5. http 호출을 통해 정상 데이터 파싱이 완료 된 경우 👉 안드로이드 빌드 시 사용 된 defaultConfig versionName 과 파싱한 appVersion 비교 수행
6. 🟥 [IF] 해당 앱 버전이 최신이 아닌 경우
>> 추가 강제 업데이트 여부 appMandatoryKey 플래그 값 확인 수행
>> [IF] 강제 업데이트가 필요한 경우는 알림 팝업창 표시 수행 시 [업데이트] 버튼만 표시 하고 앱을 다시 새롭게 설치하도록 유도 수행
>> [ELSE] 일반 업데이트 인 경우는 알림 팝업창 표시에서 [업데이트], [계속 진행] 버튼을 표시해 [계속 진행] 클릭 시 Intent 화면 전환을 수행하며, 앱을 사용할 수 있게 허용 처리
7. 🟦 [ELSE] 해당 앱 버전이 최신 인 경우
>> Intent 화면 전환을 수행하며, 앱을 사용할 수 있게 허용 처리
------------------------------------------------------
✅ 추가 정보) 파이어베이스 리모트 컨피그 방식을 통한 앱 버전 체크 소스 코드 첨부
------------------------------------------------------
// TODO [파이어베이스 리모트 앱 최신 버전 체크]
public void checkUpdateMobileVersion() {
/**
* [사전 필요 사항]
* 1. 파이어베이스 안드로이드 프로젝트 생성
* 2. 파이어베이스 콘솔 사이트 Remote Config 메뉴에서 >> app_version_aos [key] 생성 필요
* 3. build.gradle (의존성) :
* - implementation 'com.google.firebase:firebase-config:19.1.4'
* - implementation 'com.google.firebase:firebase-analytics:17.4.3'
* 4. 파이어베이스 참고 사이트 :
* - https://firebase.google.com/docs/remote-config/get-started?platform=android&hl=ko
* */
try {
// [파이어베이스에 등록된 key 정의]
String key = "app_version_aos";
String value = "0.0.0";
// [파이어베이스 리모트 객체 생성 실시]
FirebaseRemoteConfig config = FirebaseRemoteConfig.getInstance();
FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings
.Builder()
.setMinimumFetchIntervalInSeconds(0)
.build();
// [해당 키값이 없을 경우 디폴트 값 삽입]
HashMap defaultMap = new HashMap <String, String>();
//defaultMap.put("app_version_aos", "0.0.0");
defaultMap.put(key, value);
config.setDefaultsAsync(defaultMap);
config.setConfigSettingsAsync(configSettings);
// [최신 앱 버전 확인 이벤트 리스너 수행 실시]
config.fetchAndActivate().addOnCompleteListener(
A_Intro.this, // [액티비티]
new OnCompleteListener<Boolean>() { // [이벤트 리스너]
@Override
public void onComplete(@NonNull Task<Boolean> task) {
if (task.isSuccessful()) { // [해당 키값 확인 성공]
Log.i("","\n"+"🟦 [A_Intro >> checkUpdateMobileVersion() :: 파이어베이스 리모트 앱 최신 버전 체크 성공] :: " + String.valueOf(config.getString("app_version_aos")));
}
else { // [해당 키값 확인 실패]
Log.i("","\n"+"🟥 [A_Intro >> checkUpdateMobileVersion() :: 파이어베이스 리모트 앱 최신 버전 체크 실패] :: " + String.valueOf(defaultMap.toString()));
}
}
});
}
catch (Exception e){
Log.i("","\n"+"🟥 [A_Intro >> checkUpdateMobileVersion() :: 파이어베이스 리모트 앱 최신 버전 체크 에러] :: " + String.valueOf(e.getMessage()));
}
}
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------
▶️ [파이어베이스 리모트 서비스 (firebase remote config) 생성 및 앱 최신 버전 데이터 관리 실시]
https://kkh0977.tistory.com/1425
https://blog.naver.com/kkh0977/222588973822?trackingCode=blog_bloghome_searchlist
▶️ [안드로이드 파이어베이스 리모트 서비스 (firebase remote config) 사용해 앱 최신 버전 관리 실시]
https://kkh0977.tistory.com/1427
https://blog.naver.com/kkh0977/222589044672?trackingCode=blog_bloghome_searchlist
▶️ [ios 파이어베이스 리모트 서비스 (firebase remote config) 사용해 앱 최신 버전 관리 실시]
https://kkh0977.tistory.com/1426
https://blog.naver.com/kkh0977/222589038960?trackingCode=blog_bloghome_searchlist
▶️ [IT 기술] 배치 처리 (Batch Process) 설명 - 일괄 처리
https://kkh0977.tistory.com/2909
https://blog.naver.com/kkh0977/222905632476?trackingCode=blog_bloghome_searchlist
▶️ [Mobile] 모바일 캐시 및 데이터 초기화 (Batch) 배치 로직
http://kkh0977.tistory.com/6395
https://blog.naver.com/kkh0977/223481043008?trackingCode=blog_bloghome_searchlist
// --------------------------------------------------------------------------------------
728x90
반응형
'투케이2K 로직정리' 카테고리의 다른 글
Comments
