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, izinlerin Android işletim sisteminde nasıl çalıştığına dair 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 veya hizmetler tarafından korunan veriler gerçekten gerektiğinde izin isteyebilir. Bu durum, genel uygulama 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, uygulamanızın bağlamında çalışma zamanında bu izin gruplarının kapsadığı işlevlere erişim izni istenir. Kullanıcılar, iznin istendiği bağlama karşı 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ği sırada 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'i kullanarak) izlemeniz önerilir. 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 emin olmalısınız.

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

Kullanıcılardan izin gruplarına erişim izni vermeleri tek tek istenir, toplu olarak istenmez. Bu nedenle, istediğiniz izin sayısını en aza indirmeniz son derece önemlidir. Bu durum, izin verme konusunda kullanıcı yükünü artırır ve dolayısıyla 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 bağlıdır. 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.

Varsayılan işleyiciler hakkında daha fazla bilgi edinmek ve kullanıcılara varsayılan işleyici istemi gösterme ile ilgili yönergeleri incelemek için yalnızca varsayılan işleyicilerde kullanılan izinler hakkındaki rehbere bakın.

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

Bazen uygulamanızda kullandığınız kitaplıklar izin gerektirir. Ö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ı tercih ettiğinden geliştiriciler de kitaplıklarını incelemeli ve gereksiz izin 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 iznini 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 daha yüksek sürümlerin yüklü olduğu cihazlarda izinlerle ilgili kod sorunlarını bulmanıza yardımcı olur:

  • 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ı manifestinde 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 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 listeleme:
      $ adb shell pm list permissions -d -g
    • Bir veya daha fazla izin verin ya da iptal edin:
      $ adb shell pm [grant|revoke] <permission-name> ...
  • Uygulamanızı izin kullanan hizmetler açısından analiz edin.

Ek kaynaklar