Android - PlayStore 앱 설치(다운로드) 화면으로 이동하는 방법

JS · 19 Apr 2020

내 앱의 버전정보와 Market에 등록된 최신 버전을 비교하여 업데이트가 필요하다면 사용자에게 업데이트를 요청할 수 있습니다. 이런 경우, 내 앱의 설치화면 화면을 띄워 사용자가 설치할 수 있도록 기능을 제공해야 합니다.

Intent의 Uri에 pack name을 제공하여 PlayStore의 설치 화면을 실행하도록 구현할 수 있습니다. 예제와 함께 어떻게 구현하는지 알아보겠습니다.

App 설치 화면으로 이동

다음과 같이 Intent를 만들고 실행하면 Uri의 데이터로 설정된 앱의 설치화면으로 이동합니다. 설치하고 싶은 package name을 market://details?id= 다음에 입력하면 됩니다.

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setData(Uri.parse("market://details?id=jp.naver.line.android"));
startActivity(intent);

PlayStore의 AndroidManifest.xml를 보면 다음과 같이 IntentFilter를 정의하였기 때문에 위의 Intent를 실행하면 앱 정보 및 설치 화면을 보여주는 액티비티를 실행할 수 있습니다.

<intent-filter>
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <category android:name="android.intent.category.BROWSABLE"/>
    <data android:scheme="market" android:host="details"/>
</intent-filter>

위 코드를 실행해보면 다음과 같은 Chooser Activity가 나올 수 있습니다. PlayStore install page

이 디바이스에서 Chooser Activiviy가 실행된 이유는, 3개의 Market app이 설치되어있기 때문입니다.

PlayStore앱을 선택하고 실행하면 다음과 같은 설치 화면이 나옵니다. PlayStore install page

만약 Market app이 PlayStore뿐이라면, 바로 설치화면이 실행됩니다.

PlayStore 웹사이트에서 Line 앱 페이지의 주소는 https://play.google.com/store/apps/details?id=jp.naver.line.android입니다. 다른 앱의 경우 ...details?id=[package name]에서 package name을 변경하면 됩니다.

내 앱의 설치 화면으로 이동

만약 실행 중인 앱이 최신버전이 아니라면, 사용자에게 업데이트를 요청할 수도 있습니다.

Activity에서 getPackageName()으로 내 앱의 package name을 얻을 수 있습니다.

다음처럼 입력하면 내 앱의 설치 화면으로 이동합니다.

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setData(Uri.parse("market://details?id="  + getPackageName()));
startActivity(intent);

내 앱의 버전 정보 가져오기

다음과 같이 내 앱의 정보를 가져오면 version name과 version code를 알 수 있습니다.

try {
    PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
    String curVersion = packageInfo.versionName;
    Log.d(TAG, "Version name: " + packageInfo.versionName
            + ", Version code: " + packageInfo.versionCode);
} catch (PackageManager.NameNotFoundException e) {
    e.printStackTrace();
}

결과

04-19 17:28:25.706  9540  9540 D MainActivity: Version name: 1.0, Version code: 1

PlayStore에 등록된 최신 앱 버전 확인

PlayStore에 등록된 최신버전을 확인하는 방법 중에 하나는 웹사이트에서 버전 정보를 파싱하는 방법입니다.

stackoverflow에 버전 정보를 파싱하는 코드가 있어서 소개해드립니다.

먼저 gradle에 다음과 같이 의존성을 추가해야 합니다.

dependencies {
    ...
    implementation 'org.jsoup:jsoup:1.8.3'
}

다음 코드는 버전 정보를 파싱하는 클래스입니다. 앱의 Main thread에서 파싱을 할 수 없어서 AsyncTask에서 파싱하도록 구현하였습니다.

public class VersionCheckTask extends AsyncTask<String, Void, String> {
    protected String doInBackground(String... strings) {
        String newVersion = null;
        String packageName = strings[0];
        try {
            Document document = Jsoup.connect("https://play.google.com/store/apps/details?id="
                    + packageName + "&hl=en")
                    .timeout(30000)
                    .userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
                    .referrer("http://www.google.com")
                    .get();
            if (document != null) {
                Elements element = document.getElementsContainingOwnText("Current Version");
                for (Element ele : element) {
                    if (ele.siblingElements() != null) {
                        Elements sibElemets = ele.siblingElements();
                        for (Element sibElemet : sibElemets) {
                            newVersion = sibElemet.text();
                        }
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return newVersion;
    }

    protected void onPostExecute(String version) {
        Log.d("VersionCheckTask", "new version: " + version);
    }
}

다음 코드는 위의 클래스를 이용하여 인자로 전달된 package name의 버전정보를 가져오는 코드입니다.

VersionCheckTask task = new VersionCheckTask();
task.execute("com.kakao.talk");

실행해 보면 다음과 같이 버전정보를 로그로 출력합니다.

04-19 17:20:54.944  9349  9394 D VersionCheckTask: packageName: com.kakao.talk
04-19 17:20:55.819  9349  9349 D VersionCheckTask: new version: 8.8.1

참고