Xamarin Forms’da iOS ve Android cihazların benzersiz bir değeri olan UUID değerini alarak cihazlara özel işlemler gerçekleştirebilirsiz örnek verecek olursak uygulamanız genele hitap eden bir uygulama değildir bu durumda sadece kişinin kendi cihazından erişme yetkisi vermek isterseniz yapmanız gereken ilgili cihazın UUID değerine göre işlem yapmaktır.
Bu ihtiyacı karşılamak için xamarin forms darafında dependency servise’ini kullanacağız böylelikle ios ve android cihazlara özel kodlar yazıp uygulama çalıştığında ilgili platforma ait kod blokları çalışıp bize platform özelinde UUID değeri dönecektir. Böylelikle işlemlerimize bu değer ile devam edebileceğiz.
Dependecy Service Arayüzü
1 2 3 4 5 6 7 | namespace Xamarin.Forms.Dependency.UUID { public interface IDevice { string DeviceId { get;} } } |
Şimdi iOS ve Android platformlarına ait kod bloklarını IDevice
arayüzünden türemiş Dependency Service
sınıflarımız içerisinde DeviceId
özelliği get bloğunda tanımlayalım.
Android
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | using Android.Telephony; using Java.Util; using Xamarin.Forms; using XamarinForms.Dependency.UUID; [assembly: Dependency(typeof(XamarinForms.Droid.Dependency.Device))] namespace XamarinForms.Droid.Dependency { public class Device : IDevice { public string DeviceId { 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 UUID değeri almak için
READ_PHONE_STATE
yetkisi verilmesi gerekiyor.
iOS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | using System; using Foundation; using Security; using XamarinForms.Dependency.UUID; using XamarinForms.iOS.Dependency; [assembly: Xamarin.Forms.Dependency(typeof(Device))] namespace XamarinForms.iOS.Dependency { class Device : IDevice { public string DeviceId { 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(); } } } } } |
Artık Android ve iOS platformlarından benzersiz UUID değerini alabilirsiniz bu değeri almak için xamarin forms tarafında yapacağınız işlem sadece alttaki tek satırlık kod bloğunu kullanmak.
Cihaz UUID Değerini Dependency Service ile Alma
1 | var deviceId = DependencyService.Get<IDevice>().DeviceId; |
Evet geldik bir makalenin daha sonuna artık cihaz özelinde yapacağımız işlemler için benzersiz cihazid’miz mevcut. Bir sonraki Xamarin Forms makalesinde görüşmek dileğiyle 🙂
hocam hangi program visual studio mu bu söylermisin hocam 🙂
Evet bu geliştirmeleri Xamarin dahil edilmiş olan Visual Studio 2017 Community üzerinden gerçekleştirdim.
Merhaba Murat Hocam;
Xamarin Formsa acaba asmx, wcf gibi servislerin bağlanmasını da anlatabilir misiniz?
iyi günler.
İnşallah en kısa sürede Xamarin Forms ve React Native üzerinde webservisler ile haberleşme konulu makale yayınlayacağım.