gpt4 book ai didi

Android 10 : IMEI no longer available on API 29. 寻找替代品

转载 作者:行者123 更新时间:2023-12-04 04:28:18 30 4
gpt4 key购买 nike

我们客户的应用程序主要功能主要依赖于跟踪客户的设备,他们提供绑定(bind)到特定手机(而不是其所有者)的产品。使用设备 imei 可以做到这一点,但随着 Android 10 中的隐私更改,他们使其无法访问。
(https://developer.android.com/about/versions/10/privacy/changes)。

Android 有关于在特定用户案例中使用什么标识符的文档,但与我们的案例不匹配,因为我们需要它是唯一的、恒定的并绑定(bind)到设备(或至少难以更改)。 https://developer.android.com/training/articles/user-data-ids .
我正在考虑将 Android ID 作为一种可能的解决方案,或者使用知道它们不是 100% 可靠的 mac 地址。

有什么想法吗?建议?经验?在这一点上,任何事情都可能是一种选择

最佳答案

我建议你阅读谷歌最佳实践的官方博客,看看用例与你的规范匹配:https://developer.android.com/training/articles/user-data-ids.html

对我来说,我遇到了关于 android 标识符唯一性的相同问题,我发现唯一的解决方案是使用 MediaDrm API (https://android.googlesource.com/platform/frameworks/base/+/android-cts-4.4_r1/media/java/android/media/MediaDrm.java#539)
它包含一个唯一的设备 ID,即使在恢复出厂设置后也可以继续存在,并且不需要对 list 文件的任何额外权限。

这是我们如何在 Android 10 上检索唯一标识符的代码:

import android.media.MediaDrm
import java.security.MessageDigest
import java.util.*

object UniqueDeviceID {

/**
* UUID for the Widevine DRM scheme.
* <p>
* Widevine is supported on Android devices running Android 4.3 (API Level 18) and up.
*/
fun getUniqueId(): String? {

val WIDEVINE_UUID = UUID(-0x121074568629b532L, -0x5c37d8232ae2de13L)
var wvDrm: MediaDrm? = null
try {
wvDrm = MediaDrm(WIDEVINE_UUID)
val widevineId = wvDrm.getPropertyByteArray(MediaDrm.PROPERTY_DEVICE_UNIQUE_ID)
val md = MessageDigest.getInstance("SHA-256")
md.update(widevineId)
return md.digest().toHexString()
} catch (e: Exception) {
//WIDEVINE is not available
return null
} finally {
if (AndroidPlatformUtils.isAndroidTargetPieAndHigher()) {
wvDrm?.close()
} else {
wvDrm?.release()
}
}
}


fun ByteArray.toHexString() = joinToString("") { "%02x".format(it) }
}

关于Android 10 : IMEI no longer available on API 29. 寻找替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58103580/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com