Özel izinler iste

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

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

Özel izinlere örnek olarak şunlar verilebilir:

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

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

İş akışı

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

  1. Uygulamanızın manifest dosyasında, uygulamanızın istemesi gerekebilecek özel izinleri belirtin.
  2. Uygulamanızın kullanıcı deneyimini, uygulamanızdaki belirli işlemlerin belirli özel izinlerle ilişkilendirileceği şekilde tasarlayın. Kullanıcılara, uygulamanızın gizli kullanıcı verilerine erişmesi için izin vermelerini gerektirebilecek işlemleri bildirin.
  3. Kullanıcının uygulamanızda belirli özel kullanıcı verilerine erişim gerektiren görevi veya işlemi çağırmasını bekleyin. Bu sırada uygulamanız bu verilere erişmek için gerekli olan özel izni isteyebilir.
  4. Kullanıcının, uygulamanızın gerektirdiği özel izni önceden verip vermediğini kontrol edin. Bunu yapmak için her iznin özel kontrol işlevini kullanın. İzin verilirse uygulamanız özel kullanıcı verilerine erişebilir. Düzelmediyse bir sonraki adıma geçin. Not: İzni gerektiren bir işlemi her gerçekleştirdiğinizde 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 uygulamanın kullanıcıya ne gibi faydalar sağlayabileceğini açıkça açıklayan bir gerekçe sunun. Buna ek olarak, uygulamanız izin vermek için kullanıcıları sistem ayarlarına gönderdiğinden, kullanıcıların buradan nasıl izin verebileceğini açıklayan kısa talimatlar da ekleyin. Gerekçe kullanıcı arayüzünde, kullanıcıya izin vermemeyi tercih etmesi için 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şmek için ihtiyaç duyduğu özel izni isteyin. Bu işlem, muhtemelen sistem ayarlarında kullanıcının izin verebileceği ilgili sayfayı ziyaret etmeyi içerir. Çalışma zamanı izinlerinin aksine pop-up izin iletişim kutusu yoktur.
  7. onResume() yöntemini kullanarak kullanıcının yanıtını (özel izni vermeyi veya reddetmeyi tercih edip etmediğine) kontrol edin.
  8. Kullanıcı, uygulamanıza izin verdiyse özel kullanıcı verilerine erişebilirsiniz. Kullanıcı bunun yerine izni reddetmişse uygulama deneyiminizi zarif bir şekilde düşürerek uygulamanızın bu izinle korunan bilgiler olmadan kullanıcıya işlevsellik sağlamasını sağlayabilirsiniz.
Şekil 2: Android'de özel izinleri bildirme ve isteme iş akışı.

Özel izinler isteme

Çalışma zamanı izinlerinin aksine kullanıcının sistem ayarlarındaki Özel Uygulama Erişimi sayfasından özel izinler vermesi gerekir. Uygulamalar, uygulamayı duraklatan ve belirli bir özel izin için ilgili ayarlar sayfasını açan bir niyet kullanarak kullanıcıları buraya gönderebilir. Kullanıcı uygulamaya döndükten sonra uygulama, iznin onResume() işlevinde 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 izinler istenirken dikkate alınması gereken bazı en iyi uygulamalar ve göz önünde bulundurulması gereken noktalar yer almaktadır.

Her iznin kendi kontrol yöntemi vardır

Özel izinler, çalışma zamanı izinlerinden farklı şekilde çalışır. Bunun yerine izinler API'si referans sayfasına bakın ve her özel izin için özel erişim kontrolü işlevlerini kullanın. SCHEDULE_EXACT_ALARMS izni için AlarmManager#canScheduleExactAlarms() ve MANAGE_EXTERNAL_STORAGE izni için Environment#isExternalStorageManager() örnek olarak verilebilir.

Bağlam içinde istek

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

Talebi açıklayın

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