gpt4 book ai didi

windows-runtime - 如何在 Windows 10 周年更新上获取唯一的设备 ID

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

Windows 10 的先前版本具有 HardwareToken API (aka ASHWID)获取设备的唯一标识符,但它有几个缺点:

  • 它仅在桌面和移动平台上可用,这需要您将扩展 SDK 添加到您的项目(并且在 HoloLens 或其他平台上不可用)
  • 在 PC 上,随着硬件的变化,该值可能会“漂移”(即使只是将笔记本电脑插入扩展坞也会更改 ID),因此您需要 complex backend logic to correlate device IDs
  • 该值特定于单个应用程序,并且不能由同一发布者跨应用程序共享

  • 周年更新中是否有新方法可以获取在所有 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)

    最佳答案

    Updated Nov 3rd 2017 (new Registry value, below)



    Windows 10 周年更新引入了新的 SystemIdentification type,它完全符合您的要求。与旧的 ASHWID 相比,它有几个好处:
  • 适用于所有 Windows 10 平台
  • 注意:ASHWID 现在也可在所有平台上使用,但仍有上面列出的其他缺点
  • 它返回一个不会因硬件升级或重新安装操作系统而改变的稳定值(即使在 PC 上)
  • 它为同一发布者的所有应用程序返回一个相同的值,从而允许在您的应用程序组合中进行关联
  • 对于特定用户,如果您有 userSystemInfo Restricted Capability
  • 注意:这对企业场景最有用;您不太可能在没有充分理由的情况下批准使用此功能的 Windows 应用商店,因为它代表隐私问题

  • API 有一个小缺点:它不适用于某些旧 PC,因为它需要 UEFI 或 TPM。过去 5 年以上制造的大多数 PC 都应具有此硬件,并且所有其他非 PC 设备(电话、Xbox、HoloLens 等)都具有正确的硬件。如果您发现一台没有硬件的 PC,您将需要退回到 ASHWID 或其他一些机制。

    2017 年 11 月 3 日更新

    从 Windows Fall Creator 的更新(又名 1709 或 RS3 或通用 API 契约(Contract) 5)开始, a new Registry identification source 提供了一个相对稳定的 ID,以防用户没有合适的硬件。如果用户重新安装操作系统(不是升级,而是新安装)或用户更改注册表,它将会改变,但在其他方面具有与 UefiTmp 相同的好处。

    2017 年 11 月 3 日结束更新

    使用 API 很简单;无需在后端进行复杂的解析或考虑漂移:

    using Windows.System.Profile;

    IBuffer GetSystemId()
    {
    // This sample gets the publisher ID which is the same for all apps
    // by this publisher on this device.
    // Use GetSystemIdForUser if you have the userSystemId capability
    // and need the same ID across all apps for this user (not
    // really applicable for apps in the Windows Store)
    var systemId = SystemIdentification.GetSystemIdForPublisher();

    // Make sure this device can generate the IDs
    if (systemId.Source != SystemIdentificationSource.None)
    {
    // The Id property has a buffer with the unique ID
    return systemId.Id;
    }

    // This is a very old PC without the correct hardware. Use
    // another mechanism to generate an ID (or perhaps just give
    // up due to the small number of people that won't have the ID;
    // depends on your business needs).
    return GetIdFromAshwidOrSomethingElse();
    }

    如问题中所述, 此 ID 应仅用于后端服务中的关联目的(例如,用于遥测、广告、使用指标等)。它不应该用于创建匿名用户帐户,识别或跟踪用户,加密用户数据等。 这是因为不同的用户可以共享同一设备,或者同一用户可以在不同的设备之间漫游,所以 ID 不不要与用户或其数据进行 1:1 映射。

    此 API 在 Universal API Contract v3 中可用,并且可以在 Windows 通用 SDK 版本 10.0.14393.0 中找到(请记住,如果您正在开发多版本应用程序并希望使用此 API,您应该使用 不是 做运行时版本检查;相反,你应该只是 query the OS to see if the API is available )。

    关于windows-runtime - 如何在 Windows 10 周年更新上获取唯一的设备 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40387615/

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