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
x
7
1
namespace Xamarin.App.Dependency.UUID
2
{
3
public interface IDevice
4
{
5
string DeviceUUID { get;}
6
}
7
}
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
1
32
32
1
using Android.Telephony;
2
using Java.Util;
3
using Xamarin.Forms;
4
using Xamarin.App.Dependency.UUID;
5
6
[assembly: Dependency(typeof(Xamarin.Droid.Dependency.Device))]
7
namespace Xamarin.Droid.Dependency
8
{
9
public class Device : IDevice
10
{
11
public string DeviceUUID
12
{
13
get
14
{
15
var telephonyDeviceId = string.Empty;
16
var telephonySimSerialNumber = string.Empty;
17
var telephonyManager = (TelephonyManager)Android.App.Application.Context.GetSystemService(Android.Content.Context.TelephonyService);
18
if (telephonyManager != null)
19
{
20
if (!string.IsNullOrEmpty(telephonyManager.DeviceId))
21
telephonyDeviceId = telephonyManager.DeviceId;
22
if (!string.IsNullOrEmpty(telephonyManager.SimSerialNumber))
23
telephonySimSerialNumber = telephonyManager.SimSerialNumber;
24
}
25
var androidId = Android.Provider.Settings.Secure.GetString(Android.App.Application.Context.ContentResolver, Android.Provider.Settings.Secure.AndroidId);
26
var deviceUuid = new UUID(androidId.GetHashCode(), ((long)telephonyDeviceId.GetHashCode() << 32) | telephonySimSerialNumber.GetHashCode());
27
var deviceId = deviceUuid.ToString();
28
return deviceId;
29
}
30
}
31
}
32
}
Android tarafında yetkiye ihtiyaç duyacağız. READ_PHONE_STATE yetkisini uygulamamıza almamız gerekiyor.
iOS
1
37
37
1
using System;
2
using Foundation;
3
using Security;
4
using XamarinForms.Dependency.UUID;
5
using XamarinForms.iOS.Dependency;
6
7
[assembly: Xamarin.App.Dependency(typeof(Device))]
8
namespace Xamarin.iOS.Dependency
9
{
10
class Device : IDevice
11
{
12
public string DeviceUUID
13
{
14
get
15
{
16
var query = new SecRecord(SecKind.GenericPassword);
17
query.Service = NSBundle.MainBundle.BundleIdentifier;
18
query.Account = "UniqueID";
19
20
NSData uniqueId = SecKeyChain.QueryAsData(query);
21
if (uniqueId == null)
22
{
23
query.ValueData = NSData.FromString(System.Guid.NewGuid().ToString());
24
var err = SecKeyChain.Add(query);
25
if (err != SecStatusCode.Success && err != SecStatusCode.DuplicateItem)
26
throw new Exception("Cannot store Unique ID");
27
28
return query.ValueData.ToString();
29
}
30
else
31
{
32
return uniqueId.ToString();
33
}
34
}
35
}
36
}
37
}
DeviceUUID uygulama içinde çağırmak için aşağıdaki kodu kullanabilirsiniz.
1
1
1
var deviceUUId = DependencyService.Get<IDevice>().DeviceUUID;