Uygulama izinleri en iyi uygulamaları

İzin istekleri, cihazlardan kullanılabilen 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 elde etmenin yolları hakkında ipuçları yer almaktadır. İzinlerin Android işletim sisteminde nasıl çalıştığına dair kapsamlı bir açıklama değildir.

Android izinlerine daha genel bir bakış için lütfen İzinlere genel bakış sayfasını inceleyin. Kodunuzdaki izinlerle çalışmayla 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 genel uygulama davranışını değiştirmese de hassas kullanıcı verilerinin işlenme şekliyle ilgili birkaç değişiklik oluşturur:

Daha fazla durumsal bağlam

Uygulamanız bağlamında, kullanıcılardan bu izin grupları kapsamındaki işlevlere erişim izni vermeleri 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 neden izin istediğinize dair kullanıcıya 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 izni izin verme olasılığı daha yüksektir.

İzin vermede daha fazla esneklik

Kullanıcılar istendiği sırada her bir izne erişimi ve ayarlardan reddedebilirler, ancak bunun sonucunda işlevsellik 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 izne ihtiyaç duyduğunuza dair daha iyi bir açıklama sunabilirsiniz. Ayrıca, kullanıcılar izin isteklerini reddettiğinde veya ayarlarda izinleri kapattığında uygulamanızın istisnaları işlediğinden emin olmalısınız.

İşlem yükünde 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, izin vermenin kullanıcı 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şime bağlıdır. 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 yardım da 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ılırsa izin isteği kitaplıktan değil, uygulamanızdan geliyor.

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şlevi kullanmadığınız sürece FINE_LOCATION izni istemediğinizden emin olun.

Konuma arka planda erişimi sınırlama

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 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ı, API düzeyinden bağımsız olarak herhangi bir uygulama için izinleri etkinleştirebilir veya devre dışı bırakabilir. Uygulamanızın çeşitli izin senaryolarında doğru şekilde ç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ı tanımlayın.
  • İzne sahip hizmetler ve veriler arasındaki kullanıcı akışlarını test etme.
  • Verilen veya iptal edilen izinlerin çeşitli kombinasyonlarıyla test edin. Ö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