c# - Obtenga ID de dispositivo único(UDID) en Windows Phone 8
windows-phone-7 windows-phone-8 (9)
¿Hay alguna ID de dispositivo única (UDID) o cualquier ID similar que pueda leer en Windows Phone 8 (WP8) que no cambie con cambios de hardware, reinstalación de aplicaciones, etc.?
En las versiones anteriores de Windows Phone había tales ID: WP7: Estado del dispositivo para Windows Phone
WP7.1: Clase DeviceStatus
Pero ya no funcionan con SDK 8.0.
Por qué lo pregunto: la idea es que un usuario obtenga algunos créditos gratis con el primer inicio de la aplicación y quiero evitar que el usuario simplemente vuelva a instalar la aplicación para obtener nuevos créditos gratuitos. Un registro con un correo electrónico o número de teléfono podría resolver esto, pero si puedo, no quiero molestar a los usuarios en el primer inicio con un registro.
---///---SOLUCIÓN----------
Puedo confirmar que DeviceExtendedProperties.GetValue ("DeviceUniqueId") todavía funciona en WP 8.0. Me confundí un poco cuando leí el siguiente texto:
En Windows Phone OS 7.0, esta clase se usó para consultar propiedades específicas del dispositivo. En Windows Phone OS 7.1, la mayoría de las propiedades en DeviceExtendedProperties estaban en desuso, y la nueva clase DeviceStatus debería usarse en su lugar. Sin embargo, cuando corresponda, puede seguir usando cualquiera de las siguientes propiedades que no estén en desuso.
MSDN: clase DeviceExtendedProperties
Puedo ejecutar el siguiente código, eliminar la aplicación y volver a instalarla y obtener la misma ID:
byte[] myDeviceID = (byte[])Microsoft.Phone.Info.DeviceExtendedProperties.GetValue("DeviceUniqueId");
string DeviceIDAsString = Convert.ToBase64String(myDeviceID);
MessageBox.Show(DeviceIDAsString);
Al no proporcionar DeviceUniqueId en Windows Phone 8 y Windows 8, Microsoft intentó evitar el seguimiento de usuarios, pero con una mayor presión de la comunidad Dev, lo están devolviendo nuevamente.
En Windows 8.1, Microsoft ha introducido una nueva API de AdvertisingId y también puede traer Id similar para identificar a un usuario único en todas las aplicaciones en las siguientes versiones de Windows Phone 8.1 / 9.
Encontré esto como una nueva propiedad HostInformation.PublisherHostId Más información en http://msdn.microsoft.com/en-us/library/windowsphone/develop/windows.phone.system.analytics.hostinformation.publisherhostid.aspx ..
Hay un giro en este DeviceUniqueId: es único solo para un editor. Por lo tanto, no es realmente un identificador único para todo el dispositivo, sino una identificación de dispositivo única para un editor. Nos dimos cuenta cuando trabajamos en algún proyecto de cliente donde intentamos identificar el mismo teléfono desde diferentes cuentas (el cliente publica bajo dos cuentas diferentes).
He tenido este problema al devolver el valor nulo. Luego recordó que debe estar encendido.
En WMAppManifest.xml
-> pestaña Capabilities
-> ID_CAP_IDENTITY_DEVICE
Las respuestas anteriores funcionan para Windows Phone 7 y 8 Silverlight. Sin embargo, no funcionarán para Windows Phone RT (Universal) o Store Apps ya que el SDK no tiene esta biblioteca dll (Microsoft.Phone).
Así es como obtienes la identificación y el nombre del dispositivo (y posiblemente otra información) en Windows Phone 8.1 RT (Universal / Store Apps).
private string GetHardwareId()
{
var token = HardwareIdentification.GetPackageSpecificToken(null);
var hardwareId = token.Id;
var dataReader = Windows.Storage.Streams.DataReader.FromBuffer(hardwareId);
byte[] bytes = new byte[hardwareId.Length];
dataReader.ReadBytes(bytes);
return BitConverter.ToString(bytes);
}
He publicado una publicación de blog here explicando las diferencias, y más detalles sobre cómo leer la información del dispositivo en Windows RT se pueden encontrar here
Puede obtener su propio Id de dispositivo wp8 por DeviceExtendedProperties.GetValue ("DeviceUniqueId") Aquí está la forma simple de obtener deviceId como una cadena
byte[] id = (byte[])Microsoft.Phone.Info.DeviceExtendedProperties.GetValue("DeviceUniqueId");
string deviceID = Convert.ToBase64String(id);
Todavía no he comenzado a desarrollar para Windows Phone 8, todavía en 7, pero aún debería poder utilizar la clase DeviceExtendedProperties original para extraer la ID única del dispositivo.
DeviceExtendedProperties.GetValue("DeviceUniqueId")
Usé esto:
private static String getDeviceId()
{
byte[] id = (byte[])Microsoft.Phone.Info.DeviceExtendedProperties.GetValue("DeviceUniqueId");
return BitConverter.ToString(id).Replace("-", string.Empty);
}
Pero la clave es Comprobar ID_CAP_IDENTITY_DEVICE en WMAppManifest, o arroja un error.
string myDeviceID = (byte[])DeviceExtendedProperties.GetValue("DeviceUniqueId");
string DeviceIDAsString = Convert.ToBase64String(myDeviceID);
Lo he usado para el ID de dispositivo único de Windows phone.