Ответ 1
Такая способность только что была добавлена в RTM Windows 8:
Windows.System.Profile.HardwareIdentification.GetPackageSpecificToken(null)
Есть ли какой-либо механизм для идентификации устройства однозначно (даже если он анонимный)?
Чтобы быть понятным, под "устройством" я подразумеваю компьютер/сланец/pc.
Windows 8.x
string HardwareId()
{
var token = Windows.System.Profile.HardwareIdentification.GetPackageSpecificToken(null);
var hardwareId = token.Id;
var dataReader = Windows.Storage.Streams.DataReader.FromBuffer(hardwareId);
var bytes = new byte[hardwareId.Length];
dataReader.ReadBytes(bytes);
return BitConverter.ToString(bytes);
}
Windows 10
Вы должны добавить SDK для мобильного и/или рабочего стола.
string HardwareId()
{
var token = HardwareIdentification.GetPackageSpecificToken(null);
var hardwareId = token.Id;
var dataReader = Windows.Storage.Streams.DataReader.FromBuffer(hardwareId);
var bytes = new byte[hardwareId.Length];
dataReader.ReadBytes(bytes);
return BitConverter.ToString(bytes);
}
Такая способность только что была добавлена в RTM Windows 8:
Windows.System.Profile.HardwareIdentification.GetPackageSpecificToken(null)
Как правило, для приложений Metro Style в Windows 8 не существует удобного способа получения уникального идентификатора системы, такого как Windows Phone 7 с его Microsoft.Phone.Info.DeviceExtendedProperties.GetValue( "DeviceUniqueId" )
Лучшим решением, которое я нашел до сих пор, является просто генерация нового руководства в локальное хранилище приложений и используйте этот идентификатор для идентификации компьютера для текущих и будущих запусков вашего приложения.
var localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
Object value = localSettings.Values["uniqueDeviceId"];
if (!value)
{
value = Guid.NewGuid();
localSettings.Values["uniqueDeviceId"] = value;
}
Имейте в виду, что пользователь может удалить локальное хранилище и заставить ваше приложение забыть и восстановить это значение (или, возможно, даже изменить/подделать значение), поэтому не зависеть от него для каких-либо критических целей безопасности. Поскольку я использую этот метод только для приблизительной статистики и отчетов об использовании, это подходит для моих нужд.
Может ли это использоваться как согласованный идентификатор для зарегистрированного пользователя?
EasClientDeviceInformation.Id | id
Возвращает идентификатор локального компьютера. Свойство Id представляет DeviceId, используя GUID, усеченный из первых 16 байт хэш SHA256 MachineID, SID пользователя и идентификатор приложения, где MachineID использует SID локальной группы пользователей. Каждый компонент GUID возвращается в сетевом порядке байтов.