본문 바로가기

Android

구글 스토어에서 현재 앱 버전 가져오기

기존에 softwareVersion 을 찾아서 하는 방법에서 이번에 구글 플레이 홈페이지가 먼가? 작업이 이루어 졌는지 안되는걸 발견하고 수정했는데
http://nobase-dev.tistory.com/35 를 참고했다.

회사내에서는 Http 통신을 Spring RestTemplate 로 하고 있기 때문에 (구버전, 현재는 okhttp 를 쓴다)
다음과 같이 진행 했다.

private String getMarketVersion(String packageName) {
        String version = "";
        StringBuilder sb = new StringBuilder();

        try {
            String url = Constants.APP_BROWSE_STORE_URL + packageName;
            if (mLog.isDebugEnabled()) {
                mLog.debug("MARKET URL : " + url);
            }

            // 데이터 읽어 오는걸 spring 을 통해 하도록 수정 [aucd29]
            RestTemplate rest = new RestTemplate();
            rest.getMessageConverters().add(new StringHttpMessageConverter());
            ClientHttpRequestFactory reqFactory = rest.getRequestFactory();

            if (reqFactory instanceof SimpleClientHttpRequestFactory) {
                ((SimpleClientHttpRequestFactory) reqFactory)
                        .setConnectTimeout(10000);
                ((SimpleClientHttpRequestFactory) reqFactory)
                        .setReadTimeout(10000);
            }

            sb.append(rest.getForObject(url, String.class, "Android"));
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }

        String startToken = "softwareVersion\">";
        String endToken = "<";
        int index = sb.toString().indexOf(startToken);

        // 혹시 기존 형태로 변경될 가능성이 존재하니 일단 나두고
        if (index == -1) {
            // play store 구조가 변경되어서 이전의 파싱 방법으로는 동작하지 않는다. [aucd29]
//            startToken = "<div class=\"BgcNfc\">Current Version</div><div><span class=\"htlgb\">";
// 또 변경 됨 -_ - [2018-04-19]
            startToken = "<div class=\"BgcNfc\">Current Version</div><span class=\"htlgb\"><div><span class=\"htlgb\">";
            endToken = "</span></div>";

            index = sb.toString().indexOf(startToken);
            if (index == -1) {
                version = "";
            } else {
                version = sb.toString().substring(index + startToken.length(), index
                        + startToken.length() + 100);
                version = version.substring(0, version.indexOf(endToken)).trim();
            }
        } else {
            version = sb.toString().substring(index + startToken.length(), index
                    + startToken.length() + 100);
            version = version.substring(0, version.indexOf(endToken)).trim();
        }

        return version;
    }


근데 이거 클라이언트에서 하면 안되는데 흐흠... -_-

'Android' 카테고리의 다른 글

logback 을 이용한 logcat 에 소스 파일 링크 걸기  (0) 2018.04.24
vetical progress  (0) 2018.04.24
mvvm  (0) 2018.04.24
Formatter.formatFileSize  (0) 2018.04.24
dagger2  (0) 2018.04.24