Uygulama izinleri en iyi uygulamaları

İzin istekleri, cihazda bulunan hassas bilgileri korur ve yalnızca uygulamanızın çalışması için bilgiye erişim gerektiğinde kullanılmalıdır. Bu dokümanda, bu tür bilgilere erişmeden aynı (veya daha iyi) işlevleri nasıl sağlayabileceğinizle ilgili ipuçları verilmektedir. Bu doküman, izinlerin Android işletim sisteminde nasıl çalıştığıyla ilgili kapsamlı bir tartışma değildir.

Android izinlerine daha genel bir bakış için lütfen İzinlere genel bakış başlıklı makaleyi inceleyin. Kodunuzda izinlerle çalışma hakkında ayrıntılı bilgi için Uygulama izinleri isteme başlıklı makaleyi inceleyin.

Android 6.0 ve sonraki sürümlerde izinler

Android 6.0 (API düzeyi 23) ve sonraki sürümlerde uygulamalar, yükleme öncesinde değil, çalışma zamanında kullanıcıdan izin isteyebilir. Bu sayede uygulamalar, hizmetler tarafından korunan hizmetleri veya verileri gerçekten ihtiyaç duyduğunda izin isteyebilir. Bu durum, uygulamanın genel davranışını (mutlaka) değiştirmese de hassas kullanıcı verilerinin işlenmesiyle ilgili birkaç değişiklik yapar:

Artırılmış durum bağlamı

Kullanıcılardan, çalışma zamanında uygulamanız bağlamında bu izin gruplarının kapsadığı işleve erişme izni istenir. Kullanıcılar, izin istenen bağlama daha duyarlı olur. İstediğiniz izinle uygulamanızın amacı arasında uyuşmazlık varsa kullanıcıya izin isteme nedeninizle ilgili ayrıntılı bir açıklama sunmanız daha da önemlidir. Mümkün olduğunda, isteğinizin açıklamasını hem istek sırasında hem de kullanıcı isteği reddederse takip iletişiminde sağlamanız gerekir.

İzin isteğinin kabul edilme olasılığını artırmak için yalnızca belirli bir özellik gerektiğinde istem gösterin. Örneğin, yalnızca kullanıcı mikrofon düğmesini tıkladığında mikrofon erişimi isteğinde bulunun. Kullanıcıların, bekledikleri izinlere izin verme ihtimali daha yüksektir.

İzin verme konusunda daha fazla esneklik

Kullanıcılar, izin isteklerinin yapıldığı sırada ve ayarlar bölümünde izinlere erişimi reddedebilir. Ancak bu işlem, işlevlerin çalışmamasına neden olabilir. Kaç kullanıcının izinleri (ör.Google Analytics'i kullanma) reddettiğini izlemek iyi bir fikirdir. Böylece, uygulamanızı bu izne bağımlı olmaktan kurtaracak şekilde yeniden yapılandırabilir veya uygulamanızın düzgün çalışması için neden izne ihtiyacınız olduğuna dair daha iyi bir açıklama sağlayabilirsiniz. Ayrıca, kullanıcılar izin isteklerini reddettiğinde veya ayarlar bölümünde izinleri devre dışı bıraktığında uygulamanızın istisnaları ele aldığından emin olmanız gerekir.

Artan işlem yükü

Kullanıcılardan izin gruplarına erişim iznini bir grup olarak değil, tek tek vermeleri istenir. Bu nedenle, istek ettiğiniz izin sayısını en aza indirmeniz son derece önemlidir. Bu durum, izin verme konusunda kullanıcının yükünü artırır ve dolayısıyla isteklerden en az birinin reddedilme olasılığını artırır.

Varsayılan işleyici olmanızı gerektiren izinler

Bazı uygulamalar, arama kayıtları ve SMS mesajlarıyla ilgili hassas kullanıcı bilgilerine erişmek zorundadır. Arama kayıtları ve SMS mesajlarına özel izinleri istemek ve uygulamanızı Play Store'da yayınlamak istiyorsanız bu çalışma zamanında istenen izinleri istemeden önce kullanıcıdan uygulamanızı temel bir sistem işlevi için varsayılan işleyici olarak ayarlamasını istemeniz gerekir.

Kullanıcılara varsayılan işleyici istemi göstermeyle ilgili yönergeler de dahil olmak üzere varsayılan işleyiciler hakkında daha fazla bilgi için yalnızca varsayılan işleyicilerde kullanılan izinlerle ilgili kılavuzu inceleyin.

Çalıştığınız kitaplıkları tanıma

Bazen uygulamanızda kullandığınız kitaplıklar için izinler gerekir. Örneğin, reklam ve analiz kitaplıkları, gerekli işlevi uygulamak için LOCATION izin grubuna erişim isteyebilir. Ancak kullanıcının bakış açısından izin isteği kitaplıktan değil, uygulamanızdan gelir.

Kullanıcılar aynı işlev için daha az izin kullanan uygulamaları tercih ettiği gibi, geliştiriciler de kitaplıklarını inceleyip gereksiz izin kullanmayan üçüncü taraf SDK'ları seçmelidir. Örneğin, konum işlevi sağlayan bir kitaplık kullanıyorsanız konuma dayalı hedefleme işlevini kullanmıyorsanız FINE_LOCATION iznini istemediğinizden emin olun.

Arka planda konum erişimini sınırlama

Uygulamanız arka planda çalışırken konum erişimi, uygulamanın temel işlevi açısından kritik öneme sahip olmalı ve kullanıcılara net bir fayda sağlamalıdır.

Her iki izin modelini de test edin

Android 6.0 (API düzeyi 23) ve sonraki sürümlerde kullanıcılar, uygulamayı yüklerken izin vermek yerine uygulama izinlerini çalışma zamanında verir ve iptal eder. Sonuç olarak, uygulamanızı daha geniş bir koşul yelpazesinde test etmeniz gerekir. Android 6.0'dan önce, uygulamanızın hiç çalışmıyorsa uygulama manifest dosyasında beyan ettiği tüm izinlere sahip olduğunu varsayabilirsiniz. Artık kullanıcı, API düzeyinden bağımsız olarak herhangi bir uygulamanın izinlerini etkinleştirebilir veya devre dışı bırakabilir. Uygulamanızın çeşitli izin senaryolarında düzgün çalıştığından emin olmak için test yapmanız gerekir.

Aşağıdaki ipuçları, API düzeyi 23 veya üstünü çalıştıran cihazlarda izinlerle ilgili kod sorunlarını bulmanıza yardımcı olacaktır:

  • Uygulamanızın mevcut izinlerini ve ilgili kod yollarını belirleyin.
  • İzin korumalı hizmetler ve veriler genelinde kullanıcı akışlarını test edin.
  • Verilen veya iptal edilen izinlerin çeşitli kombinasyonlarını test edin. Örneğin, bir kamera uygulaması manifest dosyasında CAMERA, READ_CONTACTS ve ACCESS_FINE_LOCATION öğelerini listeleyebilir. Uygulamanın tüm izin yapılandırmalarını sorunsuz bir şekilde işleyebildiğinden emin olmak için uygulamayı bu izinlerin her biri etkin ve devre dışıyken test etmeniz gerekir.
  • Komut satırından izinleri yönetmek için adb aracını kullanın:
    • İzinleri ve durumu gruba göre listeleyin:
      $ adb shell pm list permissions -d -g
    • Bir veya daha fazla izin verin ya da kaldırın:
      $ adb shell pm [grant|revoke] <permission-name> ...
  • Uygulamanızı, izin kullanan hizmetler açısından analiz edin.

Ek kaynaklar