Özel izinler iste

Özel izin, özellikle hassas olan veya kullanıcı gizliliği ile doğrudan ilgili olmayan sistem kaynaklarına erişimi korur. Bu izinler, yükleme zamanı izinlerinden ve çalışma zamanı izinlerinden farklıdır.

Şekil 1: Sistem ayarlarındaki Özel uygulama erişimi ekranı.

Bazı özel izin örnekleri şunlardır:

  • Tam alarm planlama.
  • Diğer uygulamaları görüntüleme ve bunların üzerinde çizim yapma.
  • Tüm depolama verilerine erişiliyor.

Özel izin beyan eden uygulamalar sistem ayarlarında Özel uygulama erişimi sayfasında gösterilir (şekil 1). Uygulamaya özel bir izin vermek için kullanıcının şu sayfaya gitmesi gerekir: Ayarlar > Uygulamalar > Özel uygulama erişimi.

İş Akışı

Özel izin istemek için aşağıdakileri yapın:

  1. Uygulamanızın manifest dosyasında, uygulamanızın ihtiyaç duyabileceği özel izinleri beyan edin.
  2. Uygulamanızın kullanıcı deneyimini, uygulamanızdaki belirli işlemlerin belirli özel izinlerle ilişkilendirileceği şekilde tasarlayın. Kullanıcılara hangi işlemlerin, uygulamanızın gizli kullanıcı verilerine erişmesine izin vermelerini gerektirebileceğini bildirin.
  3. Kullanıcının uygulamanızda belirli gizli kullanıcı verilerine erişim gerektiren görevi veya işlemi çağırmasını bekleyin. O anda uygulamanız bu verilere erişmek için gereken özel izni isteyebilir.
  4. Kullanıcının, uygulamanızın gerektirdiği özel izni zaten verip vermediğini kontrol edin. Bunu yapmak için her iznin özel kontrol işlevini kullanın. İzin verilirse uygulamanız gizli kullanıcı verilerine erişebilir. Çalışmıyorsa bir sonraki adıma geçin. Not: Bu izni gerektiren bir işlemi her gerçekleştirdiğinizde bu izne sahip olup olmadığınızı kontrol etmeniz gerekir.
  5. Kullanıcı arayüzü öğesinde kullanıcıya, uygulamanızın hangi verilere erişmeye çalıştığını ve özel izin vermesi durumunda kullanıcıya sağlayabileceği avantajları net bir şekilde açıklayan bir gerekçe sunun. Ayrıca, uygulamanız izin vermek için kullanıcıları sistem ayarlarına gönderdiğinden, kullanıcıların izni buradan nasıl verebileceğini açıklayan kısa talimatlar da ekleyin. Gerekçe kullanıcı arayüzünde, kullanıcının izin vermeyi devre dışı bırakabileceği net bir seçenek sunulmalıdır. Kullanıcı gerekçeyi kabul ettikten sonra bir sonraki adıma geçin.
  6. Uygulamanızın gizli kullanıcı verilerine erişmesi için gereken özel izni isteyin. Bu muhtemelen sistem ayarlarında, kullanıcının izin verebileceği ilgili sayfaya yönelik bir niyeti içerir. Çalışma zamanı izinlerinin aksine, pop-up izin iletişim kutusu yoktur.
  7. onResume() yönteminde, kullanıcının yanıtını (özel izni vermeyi veya reddetmeyi tercih edip etmediklerini) kontrol edin.
  8. Kullanıcı uygulamanıza izin verdiyse gizli kullanıcı verilerine erişebilirsiniz. Bunun yerine, kullanıcı izni reddetmişse uygulama deneyiminizin kalitesini düşürerek bu izinle korunan bilgiler olmadan kullanıcıya işlevler sunabilirsiniz.
Şekil 2: Android'de özel izinleri bildirme ve isteme ile ilgili iş akışı.

Özel izinler iste

Çalışma zamanı izinlerinden farklı olarak, kullanıcının sistem ayarlarındaki Özel Uygulama Erişimi sayfasından özel izinler vermesi gerekir. Uygulamalar, kullanıcıları bir intent kullanarak oraya gönderebilir. Bu durumda uygulama duraklatılır ve belirli bir özel izin için ilgili ayarlar sayfası açılır. Kullanıcı uygulamaya geri döndüğünde uygulama, onResume() işlevinde iznin verilip verilmediğini kontrol edebilir.

Aşağıdaki örnek kodda, kullanıcılardan SCHEDULE_EXACT_ALARMS özel izninin nasıl isteneceği gösterilmektedir:

val alarmManager = getSystemService<AlarmManager>()!!
when {
   // if permission is granted, proceed with scheduling exact alarms…
   alarmManager.canScheduleExactAlarms() -> {
       alarmManager.setExact(...)
   }
   else -> {
       // ask users to grant the permission in the corresponding settings page
       startActivity(Intent(ACTION_REQUEST_SCHEDULE_EXACT_ALARM))
   }
}

onResume() ürününde izni kontrol etmek ve kullanıcı kararlarını işlemek için örnek kod:

override fun onResume() {
   // ...

   if (alarmManager.canScheduleExactAlarms()) {
       // proceed with the action (setting exact alarms)
       alarmManager.setExact(...)
   }
   else {
       // permission not yet approved. Display user notice and gracefully degrade
       your app experience.
       alarmManager.setWindow(...)
   }
}

En iyi uygulamalar ve ipuçları

Aşağıdaki bölümlerde, özel izin isterken dikkat edilmesi gereken bazı en iyi uygulamalar ve dikkat edilmesi gereken noktalar açıklanmaktadır.

Her iznin kendi kontrol yöntemi vardır

Özel izinler, çalışma zamanı izinlerinden farklı şekilde çalışır. Bunun yerine, permissions API referans sayfasına bakın ve her özel izin için özel erişim denetimi işlevlerini kullanın. Örnekler arasında SCHEDULE_EXACT_ALARMS izni için AlarmManager#canScheduleExactAlarms() ve MANAGE_EXTERNAL_STORAGE izni için Environment#isExternalStorageManager() yer alır.

Bağlam içi istek

Çalışma zamanı izinlerine benzer şekilde, kullanıcı izin gerektiren belirli bir işlem istediğinde uygulamalar bağlam içinde özel izinler istemelidir. Örneğin, kullanıcı belirli bir zamanda e-posta gönderilmesini planlayana kadar SCHEDULE_EXACT_ALARMS izni istemek için bekleyebilirsiniz.

İsteği açıkla

Sistem ayarlarına yönlendirmeden önce bir gerekçe belirtin. Kullanıcılar özel izinler vermek için uygulamadan geçici olarak ayrıldığından, sistem ayarlarındaki Özel Uygulama Erişimi sayfasında niyeti başlatmadan önce uygulama içi bir kullanıcı arayüzü gösterin. Bu kullanıcı arayüzünde, uygulamanın neden izne ihtiyacı olduğu ve kullanıcının ayarlar sayfasında izni nasıl vermesi gerektiği net bir şekilde açıklanmalıdır.