|
|
@@ -8,7 +8,6 @@ import android.support.annotation.IntDef;
|
|
|
import android.util.Log;
|
|
|
|
|
|
import com.google.firebase.remoteconfig.FirebaseRemoteConfig;
|
|
|
-import com.google.firebase.remoteconfig.FirebaseRemoteConfigValue;
|
|
|
|
|
|
import org.json.JSONException;
|
|
|
import org.json.JSONObject;
|
|
|
@@ -31,140 +30,153 @@ import kr.co.zumo.app.lifeplus.util.StringUtil;
|
|
|
* @since 2019-03-28
|
|
|
*/
|
|
|
public class AppVersionHelper {
|
|
|
- private static AppVersionHelper ourInstance = new AppVersionHelper();
|
|
|
+ private static AppVersionHelper ourInstance = new AppVersionHelper();
|
|
|
|
|
|
- public static AppVersionHelper getInstance() {
|
|
|
- return ourInstance;
|
|
|
- }
|
|
|
+ public static AppVersionHelper getInstance() {
|
|
|
+ return ourInstance;
|
|
|
+ }
|
|
|
|
|
|
- private AppVersionHelper() {
|
|
|
- }
|
|
|
+ private AppVersionHelper() {
|
|
|
+ }
|
|
|
|
|
|
- private Disposable disposable;
|
|
|
- private FirebaseRemoteConfig firebaseRemoteConfig;
|
|
|
+ private Disposable disposable;
|
|
|
+ private FirebaseRemoteConfig firebaseRemoteConfig;
|
|
|
+
|
|
|
+ private static final String VERSION_LATEST = "newerVersion";
|
|
|
+ private static final String VERSION_FORCE = "forceVersion";
|
|
|
+ private static final String SERVER_STATUS = "serverStatus";
|
|
|
+
|
|
|
+ /**
|
|
|
+ * dispose
|
|
|
+ */
|
|
|
+ public void dispose() {
|
|
|
+ if (null != disposable) {
|
|
|
+ disposable.dispose();
|
|
|
+ disposable = null;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- private static final String VERSION_LATEST = "newerVersion";
|
|
|
- private static final String VERSION_FORCE = "forceVersion";
|
|
|
- private static final String SERVER_STATUS = "serverStatus";
|
|
|
+ /**
|
|
|
+ * 리모트 컨피그 가져옴
|
|
|
+ *
|
|
|
+ * @param activity
|
|
|
+ * @param listener
|
|
|
+ */
|
|
|
+ public void fetch(Activity activity, IAppVersionListener listener) {
|
|
|
+ setConfig();
|
|
|
+ if (activity != null) {
|
|
|
+ firebaseRemoteConfig.fetch(0)
|
|
|
+ .addOnCompleteListener(activity, task -> {
|
|
|
+ if (task.isSuccessful()) {
|
|
|
+ // After config data is successfully fetched, it must be activated before newly fetched
|
|
|
+ // values are returned.
|
|
|
+ firebaseRemoteConfig.activateFetched();
|
|
|
+
|
|
|
+ String currentVersion = getVersion("");
|
|
|
+
|
|
|
+ Log.d("APP# AppVersionHelper | fetch, 67", "|" + "current: " + StringUtil.getPureVersionString(AppUtil.getVersionName(), 3) + " new: " + getLatestVersion() + " force: " + getForceVersion());
|
|
|
+
|
|
|
+ String serverStatus = getServerStatus();
|
|
|
+ if (StringUtil.isFull(serverStatus)) {
|
|
|
+ listener.onServerMessage(serverStatus);
|
|
|
+ } else {
|
|
|
+ // 업데이트 검사
|
|
|
+ if (StringUtil.hasNewVersion(currentVersion, getForceVersion())) {
|
|
|
+ // 강제 업데이트
|
|
|
+ listener.onAppUpdatable(IAppVersionListener.FLAG_FORCE);
|
|
|
+ } else if (StringUtil.hasNewVersion(currentVersion, getLatestVersion())) {
|
|
|
+ // 선택 업데이트
|
|
|
+ listener.onAppUpdatable(IAppVersionListener.FLAG_LATEST);
|
|
|
+ } else {
|
|
|
+ listener.onAppUpdatable(IAppVersionListener.FLAG_UNABLE);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // fail, ignored
|
|
|
+ listener.onAppUpdatable(IAppVersionListener.FLAG_UNABLE);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- /**
|
|
|
- * dispose
|
|
|
- */
|
|
|
- public void dispose() {
|
|
|
- if (null != disposable) {
|
|
|
- disposable.dispose();
|
|
|
- disposable = null;
|
|
|
+ private void setConfig() {
|
|
|
+ if (null == firebaseRemoteConfig) {
|
|
|
+ firebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 리모트 컨피그 가져옴
|
|
|
- *
|
|
|
- * @param activity
|
|
|
- * @param listener
|
|
|
- */
|
|
|
- public void fetch(Activity activity, IAppVersionListener listener) {
|
|
|
- setConfig();
|
|
|
- if(activity != null) {
|
|
|
- firebaseRemoteConfig.fetch(0)
|
|
|
- .addOnCompleteListener(activity, task -> {
|
|
|
- if (task.isSuccessful()) {
|
|
|
- // After config data is successfully fetched, it must be activated before newly fetched
|
|
|
- // values are returned.
|
|
|
- firebaseRemoteConfig.activateFetched();
|
|
|
-
|
|
|
- String currentVersion = getVersion("");
|
|
|
-
|
|
|
- Log.d("APP# AppVersionHelper | fetch, 67", "|" + "current: " + StringUtil.getPureVersionString(AppUtil.getVersionName(), 3) + " new: " + getLatestVersion() + " force: " + getForceVersion());
|
|
|
-
|
|
|
- String serverStatus = getServerStatus();
|
|
|
- if (StringUtil.isFull(serverStatus)) {
|
|
|
- listener.onServerMessage(serverStatus);
|
|
|
- } else {
|
|
|
- // 업데이트 검사
|
|
|
- if (StringUtil.hasNewVersion(currentVersion, getForceVersion())) {
|
|
|
- // 강제 업데이트
|
|
|
- listener.onAppUpdatable(IAppVersionListener.FLAG_FORCE);
|
|
|
- } else if (StringUtil.hasNewVersion(currentVersion, getLatestVersion())) {
|
|
|
- // 선택 업데이트
|
|
|
- listener.onAppUpdatable(IAppVersionListener.FLAG_LATEST);
|
|
|
- } else {
|
|
|
- listener.onAppUpdatable(IAppVersionListener.FLAG_UNABLE);
|
|
|
- }
|
|
|
- }
|
|
|
- } else {
|
|
|
- // fail, ignored
|
|
|
- listener.onAppUpdatable(IAppVersionListener.FLAG_UNABLE);
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 최신 버젼
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public String getLatestVersion() {
|
|
|
+ setConfig();
|
|
|
+ String version = firebaseRemoteConfig.getString(VERSION_LATEST);
|
|
|
+ return getVersion(version);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 서버 상태 확인
|
|
|
+ * status의 값이 1일때, 메시지 출력 후 앱 종료
|
|
|
+ * {
|
|
|
+ * "status": 0,
|
|
|
+ * "message": "[정기점검안내]\n -일시: 1/11(금) 01시~02시\n -작업범위: ZUMO 내 모든 서비스\n -해당시간동안 서비스 접속이 원활하지 않을 수 있습니다. 양해 부탁드립니다."
|
|
|
+ * }
|
|
|
+ *
|
|
|
+ * @return 서버 점검 메시지
|
|
|
+ */
|
|
|
+ public String getServerStatus() {
|
|
|
+ setConfig();
|
|
|
+ String serverStatus = firebaseRemoteConfig.getString(SERVER_STATUS);
|
|
|
+ if (serverStatus != null) {
|
|
|
+ JSONObject jsonObject;
|
|
|
+ try {
|
|
|
+ jsonObject = new JSONObject(serverStatus);
|
|
|
+ int status = jsonObject.getInt("status");
|
|
|
+ String message = jsonObject.getString("message");
|
|
|
+ if (status == 1) {
|
|
|
+ return message;
|
|
|
}
|
|
|
- });
|
|
|
+ } catch (JSONException e) {
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return "";
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- private void setConfig() {
|
|
|
- if (null == firebaseRemoteConfig) {
|
|
|
- firebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
|
|
|
+ /**
|
|
|
+ * 강제 업데이트 버젼
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private String getForceVersion() {
|
|
|
+ setConfig();
|
|
|
+ String version = firebaseRemoteConfig.getString(VERSION_FORCE);
|
|
|
+ return getVersion(version);
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 최신 버젼
|
|
|
- *
|
|
|
- * @return
|
|
|
- */
|
|
|
- public String getLatestVersion() {
|
|
|
- setConfig();
|
|
|
- String version = firebaseRemoteConfig.getString(VERSION_LATEST);
|
|
|
- return getVersion(version);
|
|
|
- }
|
|
|
-
|
|
|
- public String getServerStatus() {
|
|
|
- setConfig();
|
|
|
- String serverStatus = firebaseRemoteConfig.getString(SERVER_STATUS);
|
|
|
- JSONObject jsonObject;
|
|
|
- try {
|
|
|
- jsonObject = new JSONObject(serverStatus);
|
|
|
- int status = jsonObject.getInt("status");
|
|
|
- String message = jsonObject.getString("message");
|
|
|
- if(status == 1) {
|
|
|
- return message;
|
|
|
- }
|
|
|
- } catch (JSONException e) {
|
|
|
- return "";
|
|
|
+
|
|
|
+ private String getVersion(String version) {
|
|
|
+ return StringUtil.isFull(version) ? version : StringUtil.getPureVersionString(AppUtil.getVersionName(), 3);
|
|
|
+ }
|
|
|
+
|
|
|
+ /***********************************
|
|
|
+ * interface
|
|
|
+ ***********************************/
|
|
|
+ public interface IAppVersionListener {
|
|
|
+ int FLAG_UNABLE = 0;
|
|
|
+ int FLAG_LATEST = 1;
|
|
|
+ int FLAG_FORCE = 2;
|
|
|
+
|
|
|
+ @Retention(RetentionPolicy.SOURCE)
|
|
|
+ @IntDef({
|
|
|
+ FLAG_UNABLE, FLAG_LATEST, FLAG_FORCE
|
|
|
+ })
|
|
|
+ @interface Flag {
|
|
|
+ }
|
|
|
+
|
|
|
+ void onAppUpdatable(@Flag int flag);
|
|
|
+
|
|
|
+ void onServerMessage(String message);
|
|
|
}
|
|
|
- return "";
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 강제 업데이트 버젼
|
|
|
- *
|
|
|
- * @return
|
|
|
- */
|
|
|
- private String getForceVersion() {
|
|
|
- setConfig();
|
|
|
- String version = firebaseRemoteConfig.getString(VERSION_FORCE);
|
|
|
- return getVersion(version);
|
|
|
- }
|
|
|
-
|
|
|
- private String getVersion(String version) {
|
|
|
- return StringUtil.isFull(version) ? version : StringUtil.getPureVersionString(AppUtil.getVersionName(), 3);
|
|
|
- }
|
|
|
-
|
|
|
- /***********************************
|
|
|
- * interface
|
|
|
- ***********************************/
|
|
|
- public interface IAppVersionListener {
|
|
|
- int FLAG_UNABLE = 0;
|
|
|
- int FLAG_LATEST = 1;
|
|
|
- int FLAG_FORCE = 2;
|
|
|
-
|
|
|
- @Retention(RetentionPolicy.SOURCE)
|
|
|
- @IntDef({
|
|
|
- FLAG_UNABLE, FLAG_LATEST, FLAG_FORCE
|
|
|
- })
|
|
|
- @interface Flag {}
|
|
|
-
|
|
|
- void onAppUpdatable(@Flag int flag);
|
|
|
-
|
|
|
- void onServerMessage(String message);
|
|
|
- }
|
|
|
}
|