본문 바로가기

프로그램/Android

안드로이드 플레이스토어 버전체크(업데이트 체크)

반응형

안드로이드 현재 앱버전 확인 비교후 마켓으로 보내는 방법입니다.


최초 안드로이드 앱을 배포하고 난뒤 다시 두번째 앱을 자연스럽게 다운받을수 있도록 유도하는 방법입니다. 


일단은 여기에 값이 없다면 앱배포할때부터 문제가 있었을것입니다. AndroidManifest.xml VersionName VersionCode 입력하여 줍니다.



android:versionCode="1"
android:versionName="1.0.0"



항상 앱을 배포할때 여기 VersionName VersionCode값을 올려줘야 하는데요VersionCode 개발자


 보기 위한 데이터이며 사용자에게는 보여지지 않고 시스템적으로 업데이트 여부를 확인하는 용으로 쓰입니


.  그리고 VersionName 앱을 사용하는 보통 유저들에게 보여주는 목적으로 사용하며 x.x.x형태로 많이 사용됩니다.



 버전체크를 위해서 사용하여야 하는 데이터는 VersionCode 되겠지요버전코드를 구하는 방법은 아래와 같습니다. 



        try {
            PackageInfo pInfo = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_META_DATA);

            String versionName = pInfo.versionName;
            int versionCode = pInfo.versionCode;
            Log.e("", "device_version : " + pInfo.versionName + "   " + pInfo.versionCode);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }



애초 앱을 배포하거나 하실때 서버를 가지고 있으시다면 서버에서 현재 앱버전을 관리하는게 제일 편하실 것입니다. 


하지만 개인 개발자나 앱에대한 공부를 하시는분 같은 경우 서버를 가지고 있지 않을수도 있기 때문에 마켓에서 서버 버전을 가지고 와야 합니다.


구글에서는 각 앱마다 RestAPI 통신을 만들어 주지 않으므로 저희쪽에서 앱의 업데이터를 알수 있는 방법은

마켓 웹페이지에 있는 버전정보밖에 없습니다.


이 웹페이지에 있는 데이터는 저희가 페이지를 파싱하여 데이터를 받아와야 합니다. 웹 페이지 데이터를 파싱하는 Jsoup라는 라이브러리를 통하여 아래에 소스를 올려 놓겠습니다.


//사용하는 함수
String marketVersion, verSion;
AlertDialog.Builder mDialog;


//파싱호출
mDialog = new AlertDialog.Builder(this);
new getMarketVersion().execute();



private class getMarketVersion extends AsyncTask<Void, Void, String> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected String doInBackground(Void... params) {

            try {
                Document doc = Jsoup
                        .connect(
                                "https://play.google.com/store/apps/details?id=패키지명 적으세요" )
                        .get();
                Elements Version = doc.select(".content");

                for (Element v : Version) {
                    if (v.attr("itemprop").equals("softwareVersion")) {
                        marketVersion = v.text();
                    }
                }
                return marketVersion;
            } catch (IOException e) {
                e.printStackTrace();
            }

            return null;
        }

        @Override
        protected void onPostExecute(String result) {

            PackageInfo pi = null;
            try {
                pi = getPackageManager().getPackageInfo(getPackageName(), 0);
            } catch (PackageManager.NameNotFoundException e) {
                e.printStackTrace();
            }
            verSion = pi.versionName;
            marketVersion = result;

            if (!verSion.equals(marketVersion)) {
                mDialog.setMessage("업데이트 후 사용해주세요.")
                        .setCancelable(false)
                        .setPositiveButton("업데이트 바로가기",
                                new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog,
                                                        int id) {
                                        Intent marketLaunch = new Intent(
                                                Intent.ACTION_VIEW);
                                        marketLaunch.setData(Uri
                                                .parse("https://play.google.com/store/apps/details?id=패키지명 적으세요"));
                                        startActivity(marketLaunch);
                                        finish();
                                    }
                                });
                AlertDialog alert = mDialog.create();
                alert.setTitle("안 내");
                alert.show();
            }

            super.onPostExecute(result);
        }
    }



//gradle dependencies 에 추가

compile group: 'org.jsoup', name: 'jsoup', version: '1.9.2'


반응형