Можно ли получить цифровой отпечаток сертификата в приложение?
Можно ли получить цифровой отпечаток сертификата из play console в своём приложение на java?

Мне нужно что бы у любого человека который скачает приложение из play market при открытие приложения брался этот цифровой отпечаток и отправлялся ко мне на сервер. Есть ли какие то библиотеки позволяющие получить сам отпечаток сертификата и будет ли безопасно такое действие с моей стороны в случае декомпеляции моего приложения?
Ответы (1 шт):
Автор решения: ЮрийСПб
→ Ссылка
Можно получить. Например так:
@SuppressLint("PackageManagerGetSignatures")
fun getCertificateFingerprints(packageName: String = context.packageName): List<String?>? {
try {
val info = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
packageManager.getPackageInfo(
packageName,
PackageManager.GET_SIGNING_CERTIFICATES
)
} else {
packageManager.getPackageInfo(
packageName,
@Suppress("DEPRECATION")
PackageManager.GET_SIGNATURES
)
}
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
info.signingInfo.apkContentsSigners
} else {
@Suppress("DEPRECATION")
info.signatures
}
.map {
MessageDigest.getInstance("SHA")
.apply { update(it.toByteArray()) }
.digest()
.toBase64()
}
} catch (e: Exception) {
Timber.e(e)
return null
}
}
private fun ByteArray.toBase64() = String(Base64.encode(this, 0))
Опасности никакой нет - вы получите только отпечаток ключа, не сам ключ. Полученные значения в целом публичные и не страшно их показывать.