webentwicklung-frage-antwort-db.com.de

Wie erhalte ich eine Geräte-ID in Xamarin Forms?

Wie erhalte ich eine eindeutige Geräte-ID in Android und iOS mit C # in Xamarin Froms? Ich verwende Azure Notification Hub zum Senden von Benachrichtigungen. Ich verweise auf diese Blog in Android Ich kann keine verwandten "Einstellungen" finden

10
Srusti Thakkar

Gemäß Ihrem geposteten Blogpost http://codeworks.it/blog/?p=26 und Ihrer kurzen Problembeschreibung versuche ich, Ihre Frage zu beantworten.

Verwenden Sie für Android Android.Provider.Settings.Secure.GetString(Android.App.Application.Context.ContentResolver, Android.Provider.Settings.Secure.AndroidId);

Für iOS sehen Sie sich Ihren Blogpost an. Oder speichern Sie optional das IdentifierForVendor, z. in Ihrem AppDelegate und geben Sie diesen Wert in Ihrer IOSDevice -Klasse zurück (unter Verwendung des Namens im Blogpost). Verwenden Sie UIDevice.CurrentDevice.IdentifierForVendor.ToString(), um die Geräte-ID unter iOS abzurufen.

22
Johannes

Es wird ausführlich beschrieben hier . Tatsächlich müssen Sie dies jedoch nicht tun und versuchen, von jedem Gerät eine ID abzurufen. Es funktioniert auch, einfach eine Benutzerführung zu erstellen und auf dem Gerät zu speichern. Xamarin hat Präferenzen zum dauerhaften Speichern eines Werts in einem Gerät.

Sie können eine Anleitung erstellen und sie wie unten beschrieben in den Einstellungen speichern:

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

Vorteil dieses Ansatzes ist Ihre ID, die Sie erstellt haben, wenn die App auf ein anderes Gerät übertragen wurde, als Sie noch dieselbe ID haben. Aber wenn Sie deinstallieren und erneut installieren, erhalten Sie eine neue ID. In den anderen Fällen, in denen Sie eine ID vom Gerät erhalten, wird diese geändert, wenn Sie Ihre App auf ein anderes Gerät übertragen.

In anderen Fällen, in denen Sie die ID vom Gerät abrufen möchten:

iOS: IdentifierForDevice

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

Android: Seriell, GetSerial & 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 oder 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