Existe-t-il un ID de périphérique unique (UDID) ou un ID similaire que je puisse lire sur Windows Phone 8 (WP8) et qui ne change pas avec les modifications de matériel, la réinstallation d'une application, etc.
Les anciennes versions de Windows Phone comportaient de tels ID: WP7: État du périphérique pour Windows Phone
WP7.1: classe DeviceStatus
Mais ils ne fonctionnent plus avec SDK 8.0.
Pourquoi je demande: L'idée est qu'un utilisateur obtienne des crédits gratuits dès le premier démarrage de l'application et je veux éviter que l'utilisateur ne réinstalle simplement l'application pour obtenir de nouveaux crédits gratuits. Une inscription avec un email ou un numéro de téléphone pourrait résoudre ce problème, mais si je peux, je ne veux pas déranger les utilisateurs dès le premier démarrage avec une inscription.
---///---SOLUTION----------
Je peux confirmer que DeviceExtendedProperties.GetValue ("DeviceUniqueId") fonctionne toujours dans WP 8.0. Un peu confus quand j'ai lu le texte suivant:
Dans Windows Phone OS 7.0, cette classe était utilisée pour interroger les propriétés spécifiques à l'appareil. Dans Windows Phone OS 7.1, la plupart des propriétés de DeviceExtendedProperties étaient obsolètes et la nouvelle classe DeviceStatus devait être utilisée à la place. Toutefois, vous pouvez toujours utiliser les propriétés ci-dessous non obsolètes, le cas échéant.
MSDN: DeviceExtendedProperties Class
Je peux exécuter le code suivant, supprimer l'application, la réinstaller et obtenir le même identifiant:
byte[] myDeviceID = (byte[])Microsoft.Phone.Info.DeviceExtendedProperties.GetValue("DeviceUniqueId");
string DeviceIDAsString = Convert.ToBase64String(myDeviceID);
MessageBox.Show(DeviceIDAsString);
Je n'ai pas encore commencé à développer pour Windows Phone 8, toujours sur 7, mais vous devriez toujours pouvoir utiliser la classe Device ExtendedProperties pour extraire l'ID unique du périphérique.
DeviceExtendedProperties.GetValue("DeviceUniqueId")
J'ai eu ce problème avec le retour de la valeur null. Puis rappelez-vous qu'il doit être allumé.
Dans WMAppManifest.xml
-> onglet Capabilities
-> activez ID_CAP_IDENTITY_DEVICE
DeviceUniqueId a une particularité: il n’est unique que pour un seul éditeur. Il ne s'agit donc pas d'un identifiant unique à l'échelle du périphérique, mais bien d'un identifiant de périphérique unique pour un éditeur. Nous avons remarqué que lorsque nous travaillions sur un projet client, nous essayions d'identifier le même téléphone à partir de différents comptes (le client publie sous deux comptes différents).
Vous pouvez obtenir votre propre ID de périphérique wp8 par DeviceExtendedProperties.GetValue ("DeviceUniqueId") Voici le moyen simple d’obtenir deviceId en tant que chaîne
byte[] id = (byte[])Microsoft.Phone.Info.DeviceExtendedProperties.GetValue("DeviceUniqueId");
string deviceID = Convert.ToBase64String(id);
J'ai utilisé ceci:
private static String getDeviceId()
{
byte[] id = (byte[])Microsoft.Phone.Info.DeviceExtendedProperties.GetValue("DeviceUniqueId");
return BitConverter.ToString(id).Replace("-", string.Empty);
}
Mais la clé est de vérifier le ID_CAP_IDENTITY_DEVICE dans WMAppManifest, sinon il génère une erreur.
En ne fournissant pas DeviceUniqueId dans Windows Phone 8 et Windows 8, Microsoft a essayé d'éviter le suivi des utilisateurs, mais avec la pression accrue de la communauté des développeurs, ils le ramenaient.
Dans Windows 8.1, Microsoft a introduit une nouvelle API AdvertisingId et peut également apporter un ID similaire pour identifier un utilisateur unique parmi les applications dans les versions ultérieures de Windows Phone 8.1/9.
J'ai trouvé cela une nouvelle propriété HostInformation.PublisherHostId Plus d'informations sur http://msdn.Microsoft.com/en-us/library/windowsphone/develop/windows.phone.system.analytics.hostinformation. publisherhostid.aspx ..
string myDeviceID = (byte[])DeviceExtendedProperties.GetValue("DeviceUniqueId");
string DeviceIDAsString = Convert.ToBase64String(myDeviceID);
Je l'ai utilisé pour l'identifiant de périphérique unique Windows Phone.
Les réponses ci-dessus fonctionnent pour Windows Phone 7 et 8 Silverlight. Cependant, ils ne fonctionneront pas pour Windows Phone RT (Universal) ou Store Apps puisque le SDK ne dispose pas de cette bibliothèque dll (Microsoft.Phone).
Voici comment obtenir l'ID et le nom de l'appareil (et éventuellement d'autres informations) sur Windows Phone 8.1 RT (applications universelles/de stockage).
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);
}
J'ai posté un article de blog ici expliquant les différences et plus de détails sur la lecture des informations sur le périphérique sous Windows RT. ici