Как получить идентификатор устройства в формах Xamarin?

Как получить уникальный идентификатор устройства в Android и iOS с помощью C# в Xamarin Froms? Я использую Центр уведомлений Azure для отправки уведомлений. Я имею в виду этот блог. Но в Android я не могу найти соответствующие "Настройки"

Что ты пробовал? Мы не предоставляем полных решений с попытками чего-либо.

David 08.05.2018 13:49

обновите код, который вы сделали до сих пор, или прочтите это: stackoverflow.com/help/how-to-ask

FreakyAli 08.05.2018 15:53
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
18
2
23 576
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Согласно опубликованному вами сообщению в блоге http://codeworks.it/blog/?p=260 и вашему краткому описанию проблемы, я пытаюсь ответить на ваш вопрос.

Для использования Android Android.Provider.Settings.Secure.GetString(Android.App.Application.Context.ContentResolver, Android.Provider.Settings.Secure.AndroidId);

Для iOS см. Сообщение в блоге .. или, при желании, сохраните IdentifierForVendor, например. в вашем AppDelegate и верните это значение в своем классе IOSDevice (используя имя в блоге). используйте UIDevice.CurrentDevice.IdentifierForVendor.ToString(), чтобы получить идентификатор устройства на iOS.

Для Android Forms.Context устарел, используйте вместо него Android.App.Application.Context.

Baqer Naqvi 13.02.2019 13:19

Если у вас возникла ошибка с пользователем Android.Provider, это "global :: Android.Provider"

cho 27.05.2019 02:42

Я думал, что хранить идентификатор устройства пользователя в вашем приложении незаконно, я могу ошибаться в этом.

rogue39nin 08.06.2019 17:57

Будь осторожен! UIDevice.CurrentDevice.IdentifierForVendor.ToString () просто дает вам новый идентификатор. Когда вы удалите приложение или переустановите его, значение изменится. Так что это не совсем идентификатор устройства.

ayberkzeray 13.11.2019 09:21

Подробно описывается здесь. Но на самом деле вам не нужно делать это и пытаться получить идентификатор от каждого устройства. Также работает простое создание Guid и сохранение на устройство. Xamarin имеет Заграждения для сохранения значения в устройстве.

Вы можете создать руководство и сохранить его в Prefecences, как я сделал ниже:

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

Преимущество этого подхода заключается в том, что ваш Id, который вы генерируете, - это когда приложение передается на другое устройство, а у вас все еще тот же Id; но если вы удалите и переустановите снова, вы получите новый идентификатор. В других случаях, когда вы получаете идентификатор с устройства, он будет изменен при переносе приложения на другое устройство.

Для других случаев, когда вы хотите получить идентификатор с устройства:

iOS: IdentifierForDevice

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

Android: серийный номер, 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 или 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! И помимо технических причин для изучения этого метода, я также иду по маршруту руководств приложений / устройств в безопасном хранилище, чтобы избежать каких-либо нормативных проблем с псевдонимизацией. Идентификатор физического устройства может считаться личными данными.

Frank 07.05.2021 08:45

Другие вопросы по теме