Uygulama izinleri en iyi uygulamaları

İzin istekleri, cihazlardan gelen 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şim gerektirmeden aynı (veya daha iyi) işlevi nasıl elde edebileceğinize dair ipuçları verilmektedir; izinlerin Android işletim sisteminde nasıl çalıştığı ayrıntılı bir şekilde açıklanmamaktadır.

Android izinlerine daha genel bir bakış için lütfen İzinlere genel bakış konusuna bakın. Kodunuzdaki izinlerle nasıl çalışabileceğinizle ilgili ayrıntılar için Uygulama izinleri isteme bölümüne göz atın.

Android 6.0 ve sonraki sürümlerde izinler

Android 6.0 (API düzeyi 23) ve sonraki sürümlerde uygulamalar, yüklemeden önce değil, çalışma zamanında kullanıcıdan izin isteyebilir. Bu sayede uygulamalar, hizmetler tarafından korunan hizmetleri veya verileri gerçekten gerektirdiğinde izin isteyebilir. Bu durum, (zorunlu olarak) genel uygulama davranışını değiştirmese de hassas kullanıcı verilerinin işlenme şekliyle ilgili birkaç değişiklik oluşturur:

Durumla ilgili daha fazla bilgi

Uygulamanız bağlamında, çalışma zamanında kullanıcılardan bu izin gruplarının kapsadığı işlevlere erişim izni istenir. Kullanıcılar iznin istendiği bağlam konusunda daha hassastır. İstediğiniz şey ile uygulamanızın amacı arasında uyuşmazlık varsa, kullanıcıya neden izin istediğinizle ilgili ayrıntılı açıklama sağlamak daha da önemlidir. Mümkün olduğunda, hem istek sırasında hem de kullanıcının isteği reddetmesi durumunda bir takip iletişim kutusunda isteğinizle ilgili açıklama sağlamanız gerekir.

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

İzin verme konusunda daha fazla esneklik

Kullanıcılar, izin istendiği sırada ve ayarlardan ayrı ayrı izinlere erişimi reddedebilir. Ancak sonuç olarak işlev bozulduğunda yine de şaşırabilirler. Kaç kullanıcının izinleri reddeddiğini (ör.Google Analytics'i kullanarak) izlemek iyi bir fikirdir. Bu şekilde uygulamanızı bu izne bağlı kalmayacak şekilde yeniden düzenleyebilir veya uygulamanızın düzgün çalışması için neden bu izne ihtiyacınız olduğunu daha iyi açıklayabilirsiniz. Ayrıca kullanıcılar izin isteklerini reddettiğinde veya ayarlarda izinleri kapattığında uygulamanızın istisnaları işlediğinden de emin olmalısınız.

İşlem yükündeki artış

Kullanıcılardan izin grupları için grup olarak değil, tek tek erişim izni vermeleri istenir. Bu nedenle, istediğiniz izinlerin sayısını en aza indirmeniz son derece önemlidir. Bu durum, izin verme ile ilgili kullanıcının yükünü ve dolayısıyla isteklerden en az birinin reddedilme olasılığını artırır.

Varsayılan işleyici olmayı gerektiren izinler

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

Kullanıcılara bir varsayılan işleyici istemi göstermeyle ilgili rehberlik 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ılavuza bakın.

Çalıştığınız kütüphaneleri bilme

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 gerektirebilir. Ancak kullanıcı açısından bakıldığında, izin isteğinin kitaplıktan değil, uygulamanızdan geldiği anlaşılıyor.

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

Konuma arka planda erişimi sınırlandırma

Uygulamanız arka planda çalışırken konuma erişim, uygulamanın temel işlevi açısından kritik öneme sahip olmalı ve kullanıcılara net bir fayda göstermelidir.

Her iki izin modelini test etme

Android 6.0 (API düzeyi 23) ve sonraki sürümlerde kullanıcılar uygulama izinlerini uygulamayı yüklerken değil, çalışma zamanında verir ve iptal eder. Bu nedenle, uygulamanızı daha geniş bir koşul aralığında test etmeniz gerekir. Android 6.0'dan önce, uygulamanız çalışıyorsa uygulama manifest dosyasında beyan ettiği tüm izinlere sahip olduğunu makul bir şekilde varsayabiliyordunuz. Artık kullanıcılar API düzeyinden bağımsız olarak herhangi bir uygulama için izinleri açabilir veya kapatabilir. Uygulamanızın çeşitli izin senaryolarında doğru şekilde çalıştığından emin olmak için test etmeniz gerekir.

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

  • Uygulamanızın mevcut izinlerini ve ilgili kod yollarını tanımlayın.
  • İzinle korunan hizmetlerde ve verilerde kullanıcı akışlarını test edin.
  • Verilen veya iptal edilen izinlerin çeşitli kombinasyonlarıyla test yapın. Örneğin, bir kamera uygulamasının manifest dosyasında CAMERA, READ_CONTACTS ve ACCESS_FINE_LOCATION listelenebilir. Uygulamanın tüm izin yapılandırmalarını sorunsuz şekilde işleyebildiğinden emin olmak için uygulamayı bu izinlerin her biri açık ve kapalı olarak test etmeniz gerekir.
  • İzinleri komut satırından 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 izni verin ya da iptal edin:
      $ adb shell pm [grant|revoke] <permission-name> ...
  • Uygulamanızı, izinleri kullanan hizmetler açısından analiz edin.

Ek kaynaklar