我需要在Windows 8应用程序中获取唯一的设备标识符。我有很少的应用程序,我需要确定安装了一个或多个应用程序的设备ID(例如,在该系列中安装其他游戏的游戏玩家的奖金)。使用以下方法为我提供了每个应用程序ID,这些ID不会告诉我该设备已安装了其他一些应用程序。
我尝试了三种不同的方法,但它们都在同一台PC上返回不同的UDID。
1)以前使用过,因为我需要每个应用程序的唯一ID,现在我需要UDID,所以它可以预测不适合我:
GUID g;
std::string ret;
CoCreateGuid(&g);
Platform::Guid pg(g);
std::string udid = WStringToUTF8(pg.ToString()->Data());
2)我尝试过EasClienDeviceInformation,这是一个肯定的建议,但在同一台PC上的2个应用程序得到了不同的结果:
EasClientDeviceInformation^ info = ref new EasClientDeviceInformation;
ret = WStringToUTF8(info->Id.ToString()->Data());
3)我已经尝试了常用的获取ASHWID的方法,没有任何希望,它显然显示了不同的UDID:
auto token = Windows::System::Profile::HardwareIdentification::GetPackageSpecificToken(nullptr);
ret = WStringToUTF8(Windows::Security::Cryptography::CryptographicBuffer::EncodeToBase64String(token->Id)->Data());
_RPT1(_CRT_WARN, "TOKEN UDID IS %s \n", ret.c_str());
我只知道一个选项并且使用MAC地址,但我不确定它是否是有效选项。用户可以拥有一台可以更改或复制MAC地址的PC(我听说过具有相同地址的批量中文网络适配器),或者拥有一台没有网络的设备(例如,使用没有网络适配器的PC)并使用USB加密狗连接到互联网。)
所以问题是:
我做的一切是否正确,或者我犯了一个错误导致我的示例返回错误的UDID?
我是否正确地假设MAC地址是唯一可行的方法来获得一个独特的每设备标识符?我可能会不专心,错过了一些明显的方式。
我对MAC地址识别不安全性的假设是错误的,如上所述?
UPD:我也想知道WP8的正确方法,而我们正在研究它。