web-dev-qa-db-fra.com

Comment obtenir l'ID de périphérique dans les formulaires Xamarin?

Comment puis-je obtenir l'identifiant unique de l'appareil dans Android et iOS en utilisant c # dans Xamarin Froms? J'utilise Azure Notification Hub pour envoyer des notifications. Je fais référence à cela blog . Mais dans Android Je ne trouve pas les "Paramètres" associés

10
Srusti Thakkar

Selon votre blog publié http://codeworks.it/blog/?p=26 et votre courte description du problème, j'essaie de répondre à votre question.

Pour Android utilisez Android.Provider.Settings.Secure.GetString(Android.App.Application.Context.ContentResolver, Android.Provider.Settings.Secure.AndroidId);

Pour iOS, consultez votre article de blog .. ou enregistrez éventuellement le IdentifierForVendor par exemple dans votre AppDelegate et renvoyez cette valeur dans votre classe IOSDevice (en utilisant le nom dans le blogpost). utilisez UIDevice.CurrentDevice.IdentifierForVendor.ToString() pour obtenir l'ID de l'appareil sur iOS.

22
Johannes

Il est décrit en détail ici . Mais en réalité, vous n'avez pas besoin de faire comme ça et d'essayer d'obtenir un identifiant de chaque appareil. La simple création d'un Guid et l'enregistrement sur l'appareil fonctionne également. Xamarin a Préférences pour conserver une valeur dans un appareil.

Vous pouvez créer un guide et l'enregistrer dans Prefecences comme je l'ai fait ci-dessous:

var deviceId = Preferences.Get("my_deviceId", string.Empty);
if(string.IsNullOrWhitespace(deviceId))
{
  deviceId = System.Guid.NewGuid().ToString();
  Preferences.Set("my_deviceId", deviceId);
}

L'avantage de cette approche est votre identifiant que vous avez généré lorsque l'application est transférée à un autre appareil que vous avez toujours le même identifiant; mais si vous désinstallez et réinstallez à nouveau, vous obtiendrez un nouvel identifiant. Pour les autres cas où vous obtenez un identifiant depuis un appareil, il sera modifié lorsque vous transférez votre application vers un autre appareil.

Pour les autres cas où vous souhaitez obtenir l'ID de l'appareil:

iOS: IdentifierForDevice

public string Id => UIDevice.CurrentDevice.IdentifierForVendor.AsString();

Android: série, getSerial et AndroidId

    string id = string.Empty;
    public string Id
    {
        get
        {
            if (!string.IsNullOrWhiteSpace(id))
                return id;

            id = Android.OS.Build.Serial;
            if (string.IsNullOrWhiteSpace(id) || id == Build.Unknown || id == "0")
            {
                try
                {
                    var context = Android.App.Application.Context;
                    id = Secure.GetString(context.ContentResolver, Secure.AndroidId);
                }
                catch (Exception ex)
                {
                    Android.Util.Log.Warn("DeviceInfo", "Unable to get id: " + ex.ToString());
                }
            }

            return id;
        }
    }

UWP: GetPackageSpecificToken ou GetSystemIdForPublisher

 string id = null;
    public string Id
    {
        get
        {

            if (id != null)
                return id;

            try
            {
                if (ApiInformation.IsTypePresent("Windows.System.Profile.SystemIdentification"))
                {
                    var systemId = SystemIdentification.GetSystemIdForPublisher();

                    // Make sure this device can generate the IDs
                    if (systemId.Source != SystemIdentificationSource.None)
                    {
                        // The Id property has a buffer with the unique ID
                        var hardwareId = systemId.Id;
                        var dataReader = Windows.Storage.Streams.DataReader.FromBuffer(hardwareId);

                        var bytes = new byte[hardwareId.Length];
                        dataReader.ReadBytes(bytes);

                        id = Convert.ToBase64String(bytes);
                    }
                }

                if (id == null && ApiInformation.IsTypePresent("Windows.System.Profile.HardwareIdentification"))
                {
                    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);

                    id = Convert.ToBase64String(bytes);
                }

                if (id == null)
                {
                    id = "unsupported";
                }

            }
            catch (Exception)
            {
                id = "unsupported";
            }

            return id;
        }
    }
1
nzrytmn