İzin istekleri, cihazda bulunan 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şmeden aynı (veya daha iyi) işlevleri nasıl sağlayabileceğinizle ilgili ipuçları verilmektedir. Bu doküman, izinlerin Android işletim sisteminde 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. Kodunuzda 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 hizmetleri veya verileri gerçekten ihtiyaç duyduğunda izin isteyebilir. Bu durum, uygulamanın genel davranışını (mutlaka) değiştirmese de hassas kullanıcı verilerinin işlenmesiyle ilgili birkaç değişiklik yapar:
Artırılmış durum bağlamı
Kullanıcılardan, çalışma zamanında uygulamanız bağlamında bu izin gruplarının kapsadığı işleve erişme izni istenir. Kullanıcılar, izin istenen bağlama daha duyarlı olur. İstediğiniz izinle uygulamanızın amacı arasında uyuşmazlık varsa kullanıcıya izin isteme nedeninizle ilgili ayrıntılı bir açıklama sunmanız daha da önemlidir. Mümkün olduğunda, hem istek anında hem de kullanıcının isteği reddetmesi durumunda bir takip iletişim kutusunda isteğinizin açıklamasını sağlamalısınız.
İzin isteğinin kabul edilme olasılığını artırmak için yalnızca belirli bir özellik gerektiğinde istem gösterin. Örneğin, yalnızca kullanıcı mikrofon düğmesini tıkladığında mikrofon erişimi isteğinde bulunun. Kullanıcıların, bekledikleri izinlere izin verme ihtimali daha yüksektir.
İzin verme konusunda daha fazla esneklik
Kullanıcılar, izin isteklerinin yapıldığı sırada ve ayarlar bölümünde izinlere erişimi reddedebilir. Ancak bu işlem, işlevlerin çalışmamasına neden olabilir. Kaç kullanıcının izinleri (ör.Google Analytics'i kullanma) reddettiğini izlemek iyi bir fikirdir. Böylece, uygulamanızı bu izne bağımlı olmaktan kurtaracak şekilde yeniden yapılandırabilir veya uygulamanızın düzgün çalışması için neden izne ihtiyacınız olduğuna dair daha iyi bir açıklama sağlayabilirsiniz. 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.
Artan işlem yükü
Kullanıcılardan bir grup olarak değil, tek tek izin grupları için erişim vermeleri istenir. Bu nedenle, istek ettiğiniz izin sayısını en aza indirmeniz son derece önemlidir. Bu durum, izin verme konusunda kullanıcının yükünü artırır ve dolayısıyla isteklerden en az birinin reddedilme olasılığını artırır.
Varsayılan işleyici olmanızı gerektiren izinler
Bazı uygulamalar, arama kayıtları ve SMS mesajlarıyla ilgili hassas kullanıcı bilgilerine erişmek zorundadır. Arama kayıtları ve SMS mesajlarına özel izinleri istemek ve uygulamanızı Play Store'da yayınlamak istiyorsanız bu çalışma zamanında istenen izinleri 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östermeyle 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ılavuzu inceleyin.
Çalıştığınız kütüphaneleri tanıyın
Bazen uygulamanızda kullandığınız kitaplıklar bazı izinler gerektirir. Örneğin, reklamlar ve analiz kitaplıkları, gerekli işlevleri uygulamak için LOCATION
izin grubuna erişim gerektirebilir. Ancak kullanıcının bakış 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ği gibi, geliştiriciler de kitaplıklarını inceleyip gereksiz izin kullanmayan üçüncü taraf SDK'ları seçmelidir. Örneğin, konum işlevi sağlayan bir kitaplık kullanıyorsanız konuma dayalı hedefleme işlevini kullanmıyorsanız FINE_LOCATION
iznini istemediğinizden emin olun.
Konuma arka planda erişimi sınırlayın
Uygulamanız arka planda çalışırken konum erişimi, 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 modelini de test edin
Android 6.0 (API düzeyi 23) ve sonraki sürümlerde kullanıcılar uygulama izinlerini uygulamaları yüklerken vermek yerine çalışma zamanında verir veya iptal eder. Bunun sonucunda uygulamanızı daha geniş bir koşul yelpazesinde 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 varsayabilirsiniz. Kullanıcılar artık API düzeyinden bağımsız olarak herhangi bir uygulama için izinleri açıp kapatabilir. Uygulamanızın çeşitli izin senaryolarında doğru çalıştığından emin olmak için test yapmanız 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ı belirleyin.
- İzin korumalı hizmetler ve veriler genelinde 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
veACCESS_FINE_LOCATION
öğelerini listeleyebilir. Uygulamanın tüm izin yapılandırmalarını sorunsuz şekilde işleyebilmesi için uygulamayı bu izinlerin her birini açıp kapatarak test etmeniz gerekir. - Komut satırından izinleri 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 veya iptal edin:
$ adb shell pm [grant|revoke] <permission-name> ...
- İzinleri ve durumu gruba göre listeleyin:
- Uygulamanızı, izin kullanan hizmetler açısından analiz edin.
Ek kaynaklar
- Android izinleri için Materyal Tasarım yönergeleri
- Android Marshmallow 6.0: İzin İsteme: Bu videoda, Android çalışma zamanı izin modeli ve kullanıcılardan izin istemenin doğru yolu açıklanmaktadır.
- Uygulamanın neden izinlere ihtiyacı olduğunu açıklayın
- Benzersiz tanımlayıcılar için en iyi uygulamalar