Ö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 süresi izinlerinden 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 planlanıyor.
  • Diğer uygulamaları görüntüleme ve üzerlerinde çizim yapma.
  • Tüm depolama verilerine erişiliyor.

Özel izin beyan eden uygulamalar sistem ayarlarındaki Özel uygulama erişimi sayfasında gösterilir (ş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 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, uygulamanızın gizli kullanıcı verilerine erişmesi için izin vermeleri gereken işlemleri 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. Bu sırada uygulamanız bu verilere erişmek için gereken ö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. Erişim izni 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 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 uygulamanın özel izin vermesi durumunda sunabileceği avantajları net bir şekilde açıklayan bir gerekçe sunun. Buna ek olarak, uygulamanız izin vermeleri için kullanıcıları sistem ayarlarına gönderdiğinden, kullanıcıların oradan nasıl izin verebileceklerini açıklayan kısa talimatlar da ekleyin. Gerekçe kullanıcı arayüzünde, kullanıcıya izin vermekten vazgeçmesi 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. Bunun için muhtemelen sistem ayarlarında kullanıcının izin verebileceği ilgili sayfaya yönelik bir amaç bulunmalıdır. Ç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 seçmesi fark etmez) kontrol edin.
  8. Kullanıcı, uygulamanıza izin verdiyse gizli kullanıcı verilerine erişebilirsiniz. Kullanıcı bunun yerine izni reddederse uygulama deneyiminizi zarif bir şekilde düşürerek bu izinle korunan bilgiler olmadan kullanıcıya işlevsellik sunabilirsiniz.
Şekil 2: Android'de özel izinleri bildirme ve isteme iş akışı.

Özel izinler isteme

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

Aşağıdaki örnek kod, kullanıcılardan SCHEDULE_EXACT_ALARMS özel izninin nasıl isteneceğini gösterir:

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))
   }
}

İzni kontrol etmek ve onResume() ürününde 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 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 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, kullanıcı belirli bir zamanda gönderilecek bir e-posta planlayana kadar SCHEDULE_EXACT_ALARMS izni istemek için bekleyebilirsiniz.

Talebi açıklayın

Sistem ayarlarına yönlendirmeden önce gerekçenizi belirtin. Kullanıcılar özel izinler vermek için uygulamadan geçici olarak ayrıldığından, niyeti başlatmadan önce sistem ayarlarındaki Ö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 ihtiyacı olduğunu ve kullanıcının bunu ayarlar sayfasında nasıl vermesi gerektiğini net bir şekilde açıklamalıdır.