서명키 변경 가이드

  • 최근 구글의 콘텐츠 앱 결제 정책 변경으로 인해 패키지네임 또는 서명키의 변경이 필요한 사례가 많아지고 있습니다.

  • 아래와 같이 유형별 수정 방안을 참고하여 기존 앱 사용자의 이탈을 막고 원활한 업데이트를 할 수 있도록 하시기 바랍니다.

상세페이지 연동 규격

연동 규격 개발 가이드에서 확인할 수 있습니다.

설치된 상품의 서명키 확인 방법

설치된 앱의 인증서 지문을 획득한 후 비교할 서명키의 인증서 지문과 동일 여부를 확인합니다.

설치된 앱의 인증서 SHA-256 digest 확인 방법 예제

val certs = runCatching {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
        val signingInfo = packageManager.getPackageInfo(packageName, PackageManager.GET_SIGNING_CERTIFICATES).signingInfo
        if (signingInfo.hasMultipleSigners()) {
            signingInfo.apkContentsSigners
        } else {
            signingInfo.signingCertificateHistory
        }
    } else {
        packageManager.getPackageInfo(packageName, PackageManager.GET_SIGNATURES).signatures
    }
}.mapCatching {
    it.map {
        val encodedCert = CertificateFactory.getInstance("X509").generateCertificate(ByteArrayInputStream(it.toByteArray())).encoded
        MessageDigest.getInstance("SHA-256").digest(encodedCert).toHexString()
    }
}.recoverCatching {
    // handle exceptions
    throw it
}.getOrNull()
 
fun ByteArray.toHexString() = joinToString(separator = "") { "%02x".format(it) }

참고

설치된 상품의 앱 출처 정보 확인 방법

앱을 설치한 스토어 또는 인스톨러의 이름이 앱 설치 시 기록되며 설정 > 애플리케이션 > 애플리케이션 정보에서 확인할 수 있습니다.

설치된 앱의 인스톨러 패키지명을 획득한 후 스토어의 패키지명과 비교해서 앱 출처 정보를 확인합니다.

스토어별 패키지명

  • 원스토어

    • com.skt.skaf.A000Z00040

    • com.kt.olleh.storefront

    • com.kt.olleh.istore

    • com.lguplus.appstore

    • android.lgt.appstore

  • Google Play

    • com.android.vending

  • Galaxy Store

    • com.sec.android.app.samsungapps

설치된 앱의 앱 출처 정보 확인 방법 예제

val installer = runCatching {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
        packageManager.getInstallSourceInfo(packageName).installingPackageName
    } else {
        packageManager.getInstallerPackageName(packageName)
    }
}.getOrNull()

참고

상품 삭제 요청 방법

앱에서 자체적으로 삭제 기능을 제공하기 위해서는 DELETE_PACKAGES(또는 REQUEST_DELETE_PACKAGES) 권한이 필요합니다. 일반적인 권한이 아니므로, 사용자가 직접 삭제를 할 수 있도록 안내 후 애플리케이션 정보 화면으로 이동합니다.

삭제할 앱의 애플리케이션 정보 화면으로 이동 예제

startActivity(Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:$packageName")).apply {
    addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
})

참고

Last updated