[Android] Firebase 원격 구성을 이용한 앱 버젼 관리

in #kr5 years ago (edited)

Android 앱에서 앱 버젼 체크 후 버젼이 낮다면,
구글 스토어 페이지로 연결하는 것을 구현 하려면,
구글 스토어에 있는 앱버젼을 가져오고, 버젼 비교 후
스토어 페이지로 링크해주는 형태로 구현하면 됩니다.

구글 스토어의 앱버젼을 얻어내는 두가지 방법


1. goolge play store page를 호출하여 version에 대한 부분만 파싱한다.

https://play.google.com/store/apps/details?id=<app id>&hl=en

  • 장점 : 따로 API를 구성하지 않아도 된다.
  • 단점 : 해당 페이지 구조가 변경 될때 마다 parsing을 새로이 구현해주어야 한다.

2. version을 얻어내는 api를 구성한다.

  • 장점 : store page 호출 파싱에 비해 안정적이다.
  • 단점 : 따로 api를 구성해야하며, app version을 따로 관리해주어야 한다.

안전성을 위해서 앱버젼을 얻어내는 api를 구성하는 게 좋다고 생각합니다.
이때, 따로 API를 만들지 않아도 되는 방법이 있는데,
Firebase Remote Config 를 이용하는 것입니다.

Firebase Remote Config란?


Firebase Remote Config는 비개발자들이
코드 수정없이, data 수정만을 통해서,
유지보수를 하거나 테스팅 수행할 목적으로 만들어 졌습니다.

이것을 이용해서 firebase console에 앱 version 관련 필드를 생성 하면, 버젼 관리 API를 따로 만들지 않아도,
앱의 최신 버젼이 어떤 것인지를 얻어올 수 있습니다.

설치 방법

gradle에 다음 종속성을 추가해줍니다.

implementation 'com.google.firebase:firebase-config:16.5.0'

firebase library 간 버젼 종속성이 있기때문에,
firebase를 설치할 때는 AndroidStudio에 있는 Firebase Assistant를 이용해주면 좋습니다.

Firebase Assistant

데이터 설정

Firebase 페이지에 들어가셔서 Remote Config에서 매개변수 추가 후 변경사항 게시를 해주시면 됩니다.
저는 android_latest_version_code라고 앱 변수이름을 짓고 app version code값을 입력해 주었습니다.

Firebase Remote Config

코드

public void fetchPlayStoreAppVersionCode(final FetchPlayStoreAppVersionCodeCallback callback) {
    if (FirebaseApp.getApps(this).isEmpty())
        FirebaseApp.initializeApp(this, FirebaseOptions.fromResource(this));

    final FirebaseRemoteConfig config = FirebaseRemoteConfig.getInstance();
    FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder()
            .setDeveloperModeEnabled(BuildConfig.DEBUG)
            .setMinimumFetchIntervalInSeconds(3600)
            .build();
    config.setConfigSettings(configSettings);
    config.fetchAndActivate()
            .addOnCompleteListener(this, new OnCompleteListener<Boolean>() {
                @Override
                public void onComplete(@NonNull Task<Boolean> task) {
                    String playStoreAppVersionCodeStr = config.getString("android_latest_version_code");
                    int playStoreAppVersionCode = (playStoreAppVersionCodeStr == null || playStoreAppVersionCodeStr.isEmpty()) ? 0 : Integer.parseInt(playStoreAppVersionCodeStr);
                    callback.onResult(playStoreAppVersionCode);
                }
            });
}

interface FetchPlayStoreAppVersionCodeCallback {
    void onResult(int versionCode);
}

FirebaseRemoteConfig 개체 초기화 후 Firebase Remote Config에서 지정해두었던 필드의 값을 가져오면 됩니다.