스마트기기개발관련/안드로이드 개발

안드로이드 URL(https://play.google.com 이용)로 데이터 확인 해서 업데이트 버전 체크 최신버전 관리 관련

AlrepondTech 2013. 7. 31. 17:26
반응형

 

 

 

 

=================================

=================================

=================================

 

 

 

 

 

 

 

안드로이드 URL(https://play.google.com 이용)로 데이터 확인 해서 버전체크 최신버전 관리 관련 

 

구글 api로 현재 앱의 버전을 알아내는 방법도 있지만 아직 까지 문제가 많아 직접 마켓 페이지에 들어가 버전 테그를 검색하여

현재 버전을 체크하는 방식을 설정해보자.

 

버전방식은 "0.0.0" 이런 방식을 기본으로 둔다 

예) 1.0.0, 1.2.3, 2.5.1

버전의 형식과 비교하는 방법은 개발자의 마음대로 설정해도 된다.

현재는 위와 같이 버전을 체크하고 위와 같은 방법으로 비교하고 있다.

 

 

 

참고 또는 도움사이트: http://202psj.tistory.com/571

 

 

임의로 사용할 크롬브라우져 마켓 페이지 주소:

https://play.google.com/store/apps/details?id=com.android.chrome

 

 

//이런식으로 로그인이 들어갈때 버전체크 api를 불러들어 온다고 예상하자.

public void login()

{

    //..기타등등 코드

 

    checkVer();

 

   //..기타등등 코드

}

 

 

//현재 마켓 페이지에서 html 코드를 가져오는 api, 이것 말고도 방법은 찾아보면 많다.

 

String getUrl2HtmlCode(String addr)

{

StringBuilder html = new StringBuilder();

    

try

{

URL url = new URL(addr);

HttpURLConnection conn = (HttpURLConnection)url.openConnection();

     

if(conn != null)

{

conn.setConnectTimeout(10000);

conn.setUseCaches(false);

if(conn.getResponseCode() == HttpURLConnection.HTTP_OK)

{

BufferedReader br = new BufferedReader(

new InputStreamReader(conn.getInputStream()));

      

 

for (;;)

{

String line = br.readLine();

if(line == null) break;

html.append(line + '\n');

}

       

br.close();

}

conn.disconnect();

}

    

}

catch(Exception ex){;}

return html.toString();

}

 

 

public static String _chkVerData = ""; //체크버전 데이터 담는 변수

 

 

        //버전 체크 api 

        //로그인이나 홈화면등등 갈때마다 이 api를 불러준다.

public void checkVer()

{

//------------------------------------------------------------------------

//market ver

 

 

//마켓 URL play.google.com 에서 자기의 마켓주소를 알아내어 주소를 넣는다. (현재는 가상으로 크롬앱을 검색)

String url = "https://play.google.com/store/apps/details?id=com.android.chrome";

 

if(url == null || url.length() < 3) //페이지가 없다면 돌아간다.

{

return;

}

 

if(_chkVerData.length() < 10)

{

_chkVerData = getUrl2HtmlCode(url);

}

 

String data  = _chkVerData;

 

String mVer  = "0.0.0"; //마켓 버전

 

if(data == null || data.length() < 10)

{

return;

}

 

int[] mv = new int[3];

 

//현재 버전 부분만 잘라오는 부분 "softwareVersion"부분 근처만 중점적으로 검색하야 버전을 뽑아 내자

                //그의외 부분 태그,코드 부분이 들어가면 페이지코드가 변경 될수 있으니 되도록 이면 아래와 같이 설정해 주자.

               

                String startToken = "softwareVersion\">";

String endToken   = "<";

 

int idx = data.indexOf(startToken);

 

if(idx != -1)

{

mVer = data.substring(idx+startToken.length(), idx+startToken.length()+100);

mVer = mVer.substring(0, mVer.indexOf(endToken));

mVer = mVer.trim(); //현재 올라와 있는 버전

}

 

if(mVer.length() < 1)

return;

 

String token_m = null;

            String s_m = new String(mVer);

StringTokenizer st_m = new StringTokenizer(s_m, ".");

   

 

int cnt_m = 0;

while( st_m.hasMoreElements() )

{

token_m = st_m.nextToken();

 

if(token_m.length() > 0)

{

mv[cnt_m] = Integer.valueOf(token_m); //페이지에 가져온 버전을 배열에 하나씩 넣어둔다.

}

 

cnt_m++;

}

 

 

//--------------------------------------------------------------------

//devices ver chk

String dVer = ""; //디바이스버전

 

int[] dv = new int[3];

 

try 

{

   dVer = getPackageManager().getPackageInfo(getPackageName(),                 0).versionName;

}catch (NameNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

 

if(dVer.length() < 1) //현재 디바이스 기계의 버전을 나타낸다.

return;

 

String token_d = null;

         String s_d = new String(dVer);

StringTokenizer st_d = new StringTokenizer(s_d, ".");

   

int cnt_d = 0;

while( st_d.hasMoreElements() )

{

token_d = st_d.nextToken();

 

if(token_d.length() > 0)

{

dv[cnt_d] = Integer.valueOf(token_d); //배열변수에 넘버를 하나씩 넣는다..

}

 

cnt_d++;

}

 

boolean bVerChk = false;

for(int n=0; n<3; n++)

{

if(mv[n]> dv[n]) //mv마켓버전, dv디바이스버전 비교

{

bVerChk = true;

break;

}

else if(mv[n]< dv[n])

{

break;

}

}

 

 

                if(bVerChk) //버전 체크가 있으면 마켓 페이지 뷰어로 넘어간다.

{

goMarket();

}

}

 

 

 

// 마켓페이지로 이동하는 페이지

void goMarket()

{

String pakName = "";

pakName = getPackageName();

 

Intent marketIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id="+pakName)); 

startActivity(marketIntent);

}

 

 

 

=================================

=================================

=================================

 

 

출처: http://gun0912.tistory.com/8

 

<주의하세요!>

실제 서비스에 적용시켜서 운영하다보면 웹페이지의 어플 버전은 변경되어서 반영되어있는데 사용자들의 플레이스토어에서는 반영되지 않아있는 문제가 발생하기도 합니다.

(대부분은 잘 반영되어있고 일부에서 문제가 발생합니다)

 

이는 플레이스토어 앱 자체에 캐시되어있는 데이터때문에 변경된 정보가 제대로 반영되지 않는 문제가 있는것 같습니다.

지금까지 제가 찾아낸 최신버전 플레이스토어 반영방법은 아래와 같습니다.

1. 뒤로가기(혹은 앱 종료)로 플레이스토어 앱을 완전히 종료

2. 휴대폰 기기 재시작

3. 익일 자동반영

 

 

=================================

=================================

=================================

 

 

반응형