지난주에 같은 주제로 Swift에서 사용하는 방법을 올렸었는데 오늘은 Android(JAVA)에서 사용하는 방법을 올리려고 한다.
JAVA 역시 간단하게 구현이 가능하다.
왜 Remote Config 서비스를 사용했는지, 기본 세팅은 'Swift에서 사용법' 링크를 참고하면 될 것 같다.
사용법
먼저 firebase remote config dashboard에 원하는 매개변수를 저장한다.
그리고 저장해둔 매개변수를 불러온 후 값을 비교해 업데이트 팝업을 띄워주는 코드를 구현한다.
private void checkVersion() {
String minimumVersion = "minimum_version";
String forceUpdate = "force_update";
FirebaseRemoteConfig mConfig = FirebaseRemoteConfig.getInstance();
FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings
.Builder()
.setMinimumFetchIntervalInSeconds(60 * 60 * 24 * 1)
.build();
HashMap defaultMap = new HashMap <String, String>();
defaultMap.put(minimumVersion, "0");
defaultMap.put(forceUpdate, "false");
mConfig.setDefaultsAsync(defaultMap);
mConfig.setConfigSettingsAsync(configSettings);
mConfig.fetchAndActivate().addOnCompleteListener(
this, new OnCompleteListener<Boolean>() {
@Override
public void onComplete(@NonNull Task<Boolean> task) {
if (task.isSuccessful()) {
showUpdatePopUp(mConfig.getString(minimumVersion), mConfig.getString(forceUpdate));
} else {
Timber.tag("").i("\n" + "[default :: " + String.valueOf(defaultMap.toString()) + "]");
}
}
});
}
private void showUpdatePopUp(String fetchVersion, String force) {
String versionName = BuildConfig.VERSION_NAME;
Scanner minimumVersion = new Scanner(fetchVersion.replaceAll("\\D+",""));
int minimumNumber = minimumVersion.nextInt();
Scanner currentVersion = new Scanner(versionName.replaceAll("\\D+",""));
int currentNumber = currentVersion.nextInt();
forceUpdate = force;
if (minimumNumber > currentNumber) {
findViewById(R.id.dim_layout).setVisibility(View.VISIBLE); // 배경화면 dim 처리
findViewById(R.id.dim_layout).setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return true;
}
});
final Button updateButton = findViewById(R.id.update); // 업데이트 버튼
final TextView skipButton = findViewById(R.id.skipUpdate); // skip 버튼
'''
update pop up 렌더링 코드 추가
'''
if (force.equals("true")) {
skipButton.setVisibility(View.GONE); // skip 버튼 숨기기
updateButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent storeIntent = new Intent(Intent.ACTION_VIEW);
storeIntent.addCategory(Intent.CATEGORY_DEFAULT);
storeIntent.setData(Uri.parse("market://details?id=com.icaremind.v2"));
findViewById(R.id.dim_layout).setVisibility(View.INVISIBLE);
startActivityForResult(storeIntent, UPDATE_REQUEST_CODE); // 플레이 스토어로 이동
}
});
} else {
skipButton.setVisibility(View.VISIBLE); // skip 버튼 보여주기
skipButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
updateWrapper.setVisibility(View.GONE);
findViewById(R.id.dim_layout).setVisibility(View.INVISIBLE);
}
});
updateButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent storeIntent = new Intent(Intent.ACTION_VIEW);
storeIntent.addCategory(Intent.CATEGORY_DEFAULT);
storeIntent.setData(Uri.parse("market://details?id=com.icaremind.v2"));
findViewById(R.id.dim_layout).setVisibility(View.INVISIBLE);
startActivityForResult(storeIntent, UPDATE_REQUEST_CODE);
}
});
}
}
}
만약 강제 업데이트일 경우 플레이 스토어에서 업데이트 하지 않고 돌아온 경우를 생각해야 하기 때문에 startActivityForResult를 사용했고 결과값을 처리하기 위해 onActivityResult에 처리 코드를 추가해준다.
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == UPDATE_REQUEST_CODE && resultCode != RESULT_OK && forceUpdate.equals("true")) {
checkUpdate();
} // force update 이고 업데이트 하지 않은 경우 업데이트 팝업 다시 노출
'''
}
코드를 실행시켜 보면 업데이트 팝업이 정상적으로 렌더링 되고 있는 것을 확인할 수 있다.
'Android' 카테고리의 다른 글
[Android / Java] Fastlane으로 테스트 앱 자동 배포(CD) 구축하기 (0) | 2023.03.03 |
---|---|
[Android / JAVA] Alert Dialog의 title과 message 중앙 정렬하기 (0) | 2023.02.09 |
Android(Java)에서 받은 encodedUri를 webView(javascript)에서 파일로 변환하기 (2) | 2023.02.02 |