Uygulama izinleri en iyi uygulamaları

İzin istekleri, cihazlardan elde edilebilecek hassas bilgileri korur ve yalnızca uygulamanızın çalışması için bilgilere erişim gerektiğinde kullanılmalıdır. Bu dokümanda, bu tür bilgilere erişim gerektirmeden aynı (veya daha iyi) işlevi elde etmenin yolları hakkında ipuçları verilmektedir. İzinlerin Android işletim sisteminde nasıl çalıştığı ayrıntılı şekilde açıklanmamaktadır.

Android izinlerine daha genel bir bakış için lütfen İzinlere genel bakış konusuna bakın. Kodunuzdaki izinlerle çalışmayla ilgili ayrıntılar için Uygulama izinleri isteme bölümüne bakı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 hizmetlere veya verilere ihtiyaç duyduğunda izin isteyebilir. Bu durum, genel uygulama davranışını (zorunlu olarak) değiştirmez ancak hassas kullanıcı verilerinin işlenme şekliyle ilgili birkaç değişiklik oluşturur:

Durumsal bağlamda artış

Uygulamanızda, ç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 talebinizle 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 gerekli olduğunda 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 izinleri istendiği sırada ve ayarlardan ayrı ayrı reddedebilirler. Ancak bunun sonucunda işlev bozulduğunda yine de şaşırabilirler. Uygulamanızı yeniden düzenleyerek bu izne bağlı kalmamak için kaç kullanıcının izinleri reddettiğini (ör. Google Analytics'i kullanarak) izlemek veya uygulamanızın düzgün çalışması için neden bu izne ihtiyacınızın olduğunu daha iyi bir şekilde açıklamak iyi bir fikir olabilir. 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.

Artan işlem yükü

Kullanıcılardan izin grupları için grup olarak değil, tek tek izin vermeleri istenir. Bu nedenle, istediğiniz izinlerin sayısını en aza indirmeniz son derece önemlidir. Bu durum, kullanıcının izin verme yükünü artırır ve böylece 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 sağlar. Arama kayıtlarına ve SMS mesajlarına özgü 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ı istemeniz gerekir.

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

Birlikte çalıştığınız kitaplıkları öğrenin

Bazen uygulamanızda kullandığınız kitaplıklar için izinler gerekir. Örneğin, reklamlar 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ği kitaplıktan değil, uygulamanızdan gelir.

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 avantaj sağlamalıdır.

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 gerekecektir. 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 varsayabilirsiniz. Kullanıcılar artık 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 hizmetler ve veriler arasındaki kullanıcı işlemleri akışı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 bir ş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 için analiz edin.

Ek kaynaklar