以前的Windows 10迭代有HardwareToken
API (aka ASHWID)来获取设备的唯一标识符,但它有几个缺点:
周年纪念更新中是否有新方法可以获得在所有Windows 10平台上更加有用/稳定的ID?我想在我的应用中使用ID来关联来自同一设备的遥测,以用于使用指标和广告。我不会使用该值来识别用户,创建匿名帐户,加密数据或其他任何类似的东西。它仅用于遥测目的。
我想做类似的事情:
var id = Windows.Something.GetDeviceId(); // hypothetical OS function
var telemetry = MyApp.GetUsageTelemetry(); // my own function
// Use (eg) HttpClient to send both id and telemetry to my
// cloud infrastructure for processing and correlation
SendDataToCloudForProcessing(id, telemetry)
答案 0 :(得分:7)
2017年11月3日更新(下面有新的
Registry
值)
Windows 10周年更新引入了新的SystemIdentification
type,它可以完全满足您的需求。它比旧的ASHWID有几个好处:
userSystemInfo
Restricted Capability,对于特定用户,它还可以为所有应用返回相同的值
API存在一个小缺点:它不能在某些旧PC上工作,因为它需要UEFI或TPM。过去5年以上构建的大多数PC应该具有此硬件,而所有其他非PC设备(手机,Xbox,HoloLens等)都具有正确的硬件。如果您发现没有硬件的PC,则需要回退到ASHWID或其他机制。
从Windows Fall Creator的更新(又名1709或RS3或Universal API Contract 5)开始,a new Registry
identification source提供相对稳定的ID,以防用户没有适当的硬件。如果用户重新安装了操作系统(不是升级,而是新安装),或者用户更改了注册表,则会发生更改,但是与Uefi
或{{1}具有相同的好处}。
使用API很简单;不需要复杂的解析或计算后端的漂移:
Tmp
如问题中所述,此ID应仅用于后端服务中的关联(例如,用于遥测,广告,使用指标等)。它永远不应该用于创建匿名用户帐户,识别或跟踪用户,加密用户数据等。这是因为不同的用户可以共享同一设备,或者同一个用户可以在不同的设备上漫游,所以ID不会与用户或他们的数据进行1:1的映射。
此API可在Universal API Contract v3中找到,可以在Windows Universal SDK版本10.0.14393.0中找到(请记住,如果您正在执行多版本应用并希望点亮此用法API,您应该不执行运行时版本检查;而应该只是query the OS to see if the API is available)。