기존에 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;
}
근데 이거 클라이언트에서 하면 안되는데 흐흠... -_-
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 |