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;
Kodmatik Murat BEKLER | Donanıma can veren ruh, yazılımdır.