Son Haberler
Anasayfa / C# / Xamarin’de Android ve iOS UUID Değeri

Xamarin’de Android ve iOS UUID Değeri

Android ve iOS işletim sistemlerinde benzersiz “UUID” ihtiyaç duyabiliriz. Bunun içinde özel izinler almamız gerekmektedir.

Örnek olarak aşağıdaki kodları incelemenizi tavsiye ederim.

Dependecy Service

namespace Xamarin.App.Dependency.UUID
{
    public interface IDevice
    {
        string DeviceUUID { get;}
    }
}

Cross platform olarak hazırladığımız kodu IDevice arayüzünden türemiş Dependency Service sınıflarımız içerisinde DeviceUUID özelliği get olarak tanımlayalım.

Android

using Android.Telephony;
using Java.Util;
using Xamarin.Forms;
using Xamarin.App.Dependency.UUID;
 
[assembly: Dependency(typeof(Xamarin.Droid.Dependency.Device))]
namespace Xamarin.Droid.Dependency
{
    public class Device : IDevice
    {
        public string DeviceUUID
        {
            get
            {
                var telephonyDeviceId = string.Empty;
                var telephonySimSerialNumber = string.Empty;
                var telephonyManager = (TelephonyManager)Android.App.Application.Context.GetSystemService(Android.Content.Context.TelephonyService);
                if (telephonyManager != null)
                {
                    if (!string.IsNullOrEmpty(telephonyManager.DeviceId))
                        telephonyDeviceId = telephonyManager.DeviceId;
                    if (!string.IsNullOrEmpty(telephonyManager.SimSerialNumber))
                        telephonySimSerialNumber = telephonyManager.SimSerialNumber;
                }
                var androidId = Android.Provider.Settings.Secure.GetString(Android.App.Application.Context.ContentResolver, Android.Provider.Settings.Secure.AndroidId);
                var deviceUuid = new UUID(androidId.GetHashCode(), ((long)telephonyDeviceId.GetHashCode() << 32) | telephonySimSerialNumber.GetHashCode());
                var deviceId = deviceUuid.ToString();
                return deviceId;
            }
        }
    }
}

Android tarafında yetkiye ihtiyaç duyacağız. READ_PHONE_STATE yetkisini uygulamamıza almamız gerekiyor.

iOS

using System;
using Foundation;
using Security;
using XamarinForms.Dependency.UUID;
using XamarinForms.iOS.Dependency;
 
[assembly: Xamarin.App.Dependency(typeof(Device))]
namespace Xamarin.iOS.Dependency
{
    class Device : IDevice
    {
        public string DeviceUUID
        {
            get
            {
                var query = new SecRecord(SecKind.GenericPassword);
                query.Service = NSBundle.MainBundle.BundleIdentifier;
                query.Account = "UniqueID";
 
                NSData uniqueId = SecKeyChain.QueryAsData(query);
                if (uniqueId == null)
                {
                    query.ValueData = NSData.FromString(System.Guid.NewGuid().ToString());
                    var err = SecKeyChain.Add(query);
                    if (err != SecStatusCode.Success && err != SecStatusCode.DuplicateItem)
                        throw new Exception("Cannot store Unique ID");
 
                    return query.ValueData.ToString();
                }
                else
                {
                    return uniqueId.ToString();
                }
            }
        }
    }
}

DeviceUUID uygulama içinde çağırmak için aşağıdaki kodu kullanabilirsiniz.

var deviceUUId = DependencyService.Get<IDevice>().DeviceUUID;