(Android/안드로이드) 앱에서 플레이스토어 설치 페이지로 이동하는 방법

개요

앱에서 아래와 같은 상황은 매우 흔합니다.

요약


1. 가장 기본적인 방법 (Play Store 앱으로 이동)

fun openPlayStore(context: Context, packageName: String) {
    val intent = Intent(
        Intent.ACTION_VIEW,
        Uri.parse("market://details?id=$packageName")
    )
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
    context.startActivity(intent)
}

openPlayStore(this, "com.example.myapp")

2. 실무에서 반드시 필요한 예외 처리 (권장)

fun openPlayStoreSafe(context: Context, packageName: String) {
    try {
        val intent = Intent(
            Intent.ACTION_VIEW,
            Uri.parse("market://details?id=$packageName")
        )
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
        context.startActivity(intent)
    } catch (e: ActivityNotFoundException) {
        // Play Store 앱이 없는 경우 웹으로 이동
        val webIntent = Intent(
            Intent.ACTION_VIEW,
            Uri.parse("https://play.google.com/store/apps/details?id=$packageName")
        )
        webIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
        context.startActivity(webIntent)
    }
}

3. 내 앱(자기 자신) 스토어 페이지로 이동하기

업데이트/리뷰 유도 시 가장 흔한 케이스

openPlayStoreSafe(
    context = this,
    packageName = BuildConfig.APPLICATION_ID
)

BuildConfig.APPLICATION_ID 사용을 강력 추천 → build variant/패키지명 변경에도 안전


4. 플레이스토에서 “리뷰 페이지”로 바로 이동하기

fun openPlayStoreReview(context: Context) {
    val uri = Uri.parse(
        "market://details?id=${BuildConfig.APPLICATION_ID}&showAllReviews=true"
    )
    val intent = Intent(Intent.ACTION_VIEW, uri)
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
    context.startActivity(intent)
}

단, Google 정책/UI 변경으로 동작이 바뀔 수 있으므로 In-App Review API 사용이 더 권장되는 경우도 많음


5. market:// vs https:// 차이

구분 market:// https://play.google.com
열리는 앱 Play Store 앱 브라우저
UX 빠르고 자연스러움 상대적으로 불편
의존성 Play Store 필요 없음
실무 사용 우선 사용 fallback

6. “설치 유도” UX에서 자주 쓰는 패턴

AlertDialog.Builder(context)
    .setTitle("업데이트 필요")
    .setMessage("최신 버전을 설치해주세요.")
    .setPositiveButton("업데이트") { _, _ ->
        openPlayStoreSafe(context, BuildConfig.APPLICATION_ID)
    }
    .setCancelable(false)
    .show()


Related Posts