2012-05-10 32 views
19

Có cơ chế nào để nhận dạng thiết bị duy nhất (ngay cả khi thiết bị ẩn danh) không?Tôi có thể nhận dạng duy nhất một thiết bị trong Windows 10/Windows 8/WinRT

Để rõ ràng, bằng "thiết bị", tôi có nghĩa là máy tính/phương tiện/máy tính.

của Windows 8.x

http://codepaste.net/ybt893

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); 
} 

của Windows 10

Bạn phải thêm các Mobile và/hoặc máy tính để bàn mở rộng 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); 
} 
+0

Nếu ứng dụng của tôi muốn theo dõi đồng bộ hóa đồng bằng trên các thiết bị, chẳng hạn. (trong trường hợp bạn muốn một trường hợp sử dụng hợp lý) –

+0

Câu trả lời là có, nhưng chưa (trong RC) –

+2

Nếu bạn sử dụng API "GetPackageSpecificToken", hãy cảnh giác với "Kế toán cho phần cứng trôi" - Xem: http: // msdn.microsoft.com/en-us/library/windows/apps/jj553431 –

Trả lời

19

Như một khả năng vừa được bổ sung trong Windows 8 RTM:

Windows.System.Profile.HardwareIdentification.GetPackageSpecificToken(null) 
+2

Nếu bạn sử dụng điều này, hãy cảnh giác với "Kế toán cho sự cố phần cứng" - Xem: http://msdn.microsoft.com/en-us/library/windows/apps/jj553431 –

6

Có vẻ như không phải là một cách thuận tiện cho các ứng dụng Metro Style trong Windows 8 để có được một định danh duy nhất hệ thống duy trì, như Windows Phone 7 cung cấp với nó Microsoft.Phone.Info.DeviceExtendedProperties.GetValue("DeviceUniqueId")

Giải pháp tốt nhất mà tôi đã phạm lỗi nd cho đến nay là chỉ cần tạo một new guid trong application local storage và sử dụng số nhận dạng đó để xác định máy tính cho lần khởi chạy ứng dụng hiện tại và tương lai của bạn.

var localSettings = Windows.Storage.ApplicationData.Current.LocalSettings; 
Object value = localSettings.Values["uniqueDeviceId"]; 
if (!value) 
{ 
    value = Guid.NewGuid(); 
    localSettings.Values["uniqueDeviceId"] = value; 
} 

Hãy ghi nhớ rằng người dùng có thể xóa các lưu trữ cục bộ và gây ra ứng dụng của bạn để quên đi và tái tạo giá trị (hoặc có khả năng thậm chí sửa đổi/spoof giá trị), do đó, không phụ thuộc vào nó cho bất kỳ bảo mật quan trọng mục đích. Vì tôi chỉ sử dụng kỹ thuật này cho các thống kê thô và báo cáo sử dụng, điều này là tốt cho nhu cầu của tôi.

+0

Một GUID gần như chắc chắn sẽ là duy nhất, đây chính xác là giải pháp tôi sẽ đề xuất. – fabspro

+0

Chính xác, hiện tại –

+0

là giá trị này khác nhau nếu bạn sử dụng một ứng dụng khác trên cùng một thiết bị? – eeadev

5

thể này được sử dụng như một ID phù hợp cho người dùng đăng nhập?

http://msdn.microsoft.com/en-us/library/windows/apps/windows.security.exchangeactivesyncprovisioning.easclientdeviceinformation.id.aspx

EasClientDeviceInformation.Id | tài sản id

Trả về số nhận dạng của máy tính cục bộ. Thuộc tính Id đại diện cho DeviceId bằng cách sử dụng GUID cắt ngắn từ 16 byte đầu tiên của hàm băm SHA256 của MachineID, User SID và ID ứng dụng nơi MachineID sử dụng SID của nhóm người dùng cục bộ. Mỗi thành phần của GUID được trả về theo thứ tự byte mạng.

+0

Cảm ơn! Điều này có vẻ như là giải pháp tốt nhất cho đến nay. –

+1

Xin chào, Các bạn có thấy đây là giải pháp phù hợp không? Tôi đang đánh giá phương pháp này cho ứng dụng của mình. –

+1

Tính năng này không hoạt động trên điện thoại –

Các vấn đề liên quan