Uygulama izinleri en iyi uygulamaları

İzin istekleri, bir cihazda bulunan hassas bilgileri korur ve yalnızca uygulamanızın çalışması için bilgilere erişim gerektiğinde kullanılmalıdır. Bu belgede, bu tür bilgilere erişim gerektirmeden aynı (veya daha iyi) işlevselliği elde etmenizi sağlayabilecek yöntemlerle ilgili ipuçları verilmektedir. Bu belge, Android işletim sisteminde izinlerin 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. Kodunuzdaki 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üklemeden önce değil çalışma zamanında kullanıcıdan izin isteyebilir. Bu sayede uygulamalar, hizmetler tarafından korunan hizmetlere veya verilere gerçekten ihtiyaç duyduklarında izin isteyebilir. Bu durum, uygulamanın genel davranışını (mutlaka) değiştirmese de hassas kullanıcı verilerinin işlenme şekliyle ilgili birkaç değişiklik yapar:

Daha fazla durumsal bağlam

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

İzin 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 isteyin. Kullanıcıların, bekledikleri izin isteklerine olumlu yanıt verme ihtimali daha yüksektir.

İzin verme konusunda daha fazla esneklik

Kullanıcılar, istendiğinde ve ayarlarda tek tek izinlere erişimi reddedebilir ancak bu durum, işlevlerin bozulmasına neden olduğunda kullanıcılar yine de şaşırabilir. İzinleri reddeden kullanıcı sayısını (ör.Google Analytics kullanarak) izlemeniz iyi bir fikirdir. Böylece, 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ğuna dair daha iyi bir açıklama sunabilirsiniz. Ayrıca, kullanıcılar izin isteklerini reddettiğinde veya ayarlarda izinleri devre dışı bıraktığında uygulamanızın istisnaları işlediğinden de emin olmalısınız.

İşlem yükünün artması

Kullanıcılardan izin gruplarına erişim izni vermeleri toplu olarak değil, ayrı ayrı istenir. Bu nedenle, istediğiniz izinlerin sayısını en aza indirmeniz son derece önemlidir. Bu durum, izin verme konusunda kullanıcı yükünü artırır ve bu nedenle, isteklerden en az birinin reddedilme olasılığını yükseltir.

Varsayılan işleyici olmayı gerektiren izinler

Bazı uygulamalar, arama kayıtları ve SMS mesajlarıyla ilgili hassas kullanıcı bilgilerine erişime ihtiyaç duyar. Arama kayıtları ve SMS mesajlarıyla ilgili 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 bir sistem işlevi için varsayılan işleyici olarak ayarlamasını istemeniz gerekir.

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

Ç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şlevleri uygulamak için LOCATION izin grubuna erişim isteyebilir. Ancak kullanıcı 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ı seçtiği gibi geliştiriciler de kitaplıklarını incelemeli ve gereksiz izinler kullanmayan üçüncü taraf SDK'larını seçmelidir. Örneğin, konum işlevselliği sağlayan bir kitaplık kullanıyorsanız konum tabanlı hedefleme işlevselliğini 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 fayda sağlamalıdır.

Her iki izin modeli için de test yapın

Android 6.0 (API düzeyi 23) ve sonraki sürümlerde kullanıcılar, uygulama izinlerini uygulama yüklenirken 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 manifestinde beyan ettiği tüm izinlere sahip olduğunu varsaymak makul olurdu. Kullanıcılar artık 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ü sürümlerin yüklü olduğu cihazlarda izinlerle ilgili kod sorunlarını bulmanıza yardımcı olacaktır:

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

Ek kaynaklar