1

Я пытаюсь получить уникальное 44-значное идентификатор устройства Windows Phone 8.1 с использованием кода C++. Я выполнил следующую ссылку.Получение уникального DeviceId в Windows Phone 8.1 с использованием кода C++

http://abundantcode.com/alternate-way-of-getting-the-unique-deviceid-in-windows-phone-8/#comment-85511

Это короткий код только одной линии,

var UniqueID = Windows.Phone.System.Analytics.HostInformation.PublisherHostId; 

, но я получаю много ошибок на нем.

error C3083: 'Analytics': the symbol to the left of a '::' must be a type , 
error C3083: 'HostInformation': the symbol to the left of a '::'must be a `type ,` 
error C2039: 'PublisherHostId' : is not a member of'Windows::Phone::System' , 
error C2065: 'PublisherHostId' : undeclared identifier 

Я также определяет ID_CAP_IDENTIY_DEVICE свойство, которое упоминается здесь таким образом.

<Capability Name="ID_CAP_IDENTITY_DEVICE"/> 

Хотя я смущен, что это правильно или неправильно.

+0

Вы уверены, что вы строите Windows Phone 8.0 C++? Это компилируется для меня: 'auto x = Windows :: Phone :: System :: Analytics :: HostInformation :: PublisherHostId;' –

+0

O Извините! Это Windows Phone 8.1 и да, я делаю это на C++. – Itkrux

+0

ОК, пожалуйста, обновите заголовок и теги :-) –

ответ

3

Для Windows Phone 8.0, вы можете использовать PublisherHostId, но и для Windows Phone 8.1 Машинный код проектов, которые вы должны использовать HardwareIdentification::GetPackageSpecificToken() ака ASHWID.

Таким образом, вы можете более легко обмениваться кодами с Windows 8.1. Этот идентификатор является постоянным для данного приложения на данном устройстве, но он будет меняться в разных приложениях и на разных устройствах.

Вот пример, который работает в Windows Phone 8.1:

using namespace Windows::System::Profile; 
using namespace Windows::Security::Cryptography; 
using namespace Platform; 

auto token = HardwareIdentification::GetPackageSpecificToken(nullptr); 
Array<byte>^ buffer = ref new Array<byte>(token->Id->Length); 

// Nothing to do with crypto; just a helpful class 
// to convert IBuffer^ -> Array^ 
CryptographicBuffer::CopyToByteArray(token->Id, &buffer); 

// Output the first four bytes of the key 
char key[9]; 
sprintf_s(key, sizeof(key)/sizeof(key[0]), "%02X%02X%02X%02X", 
    buffer[0], buffer[1], buffer[2], buffer[3]); 
OutputDebugStringA(key); 
+0

Спасибо @Петер, я попробую. – Itkrux

+0

Я использовал 'HardwareToken^packageSpecificToken; packageSpecificToken = Windows :: System :: Profile :: HardwareIdentification :: GetPackageSpecificToken (nonce); 'но это дает мне неопределенную ошибку идентификатора для ** HardwareToken ** и ** nonce **. – Itkrux

+0

Добавлен образец с нулевым номером –