Android 11 — Gizliliğe Dair Herşey

Firuze Gümüş
5 min readFeb 21, 2021

Herkese merhaba,

Bir önceki yazımda Android 11'le birlikte permission konusunda yapılan değişikliklerden bahsetmiştim. Okumadıysanız gözatmanızı tavsiye ederim.

Bu yazımda genel anlamda privacy için Android 10 ve 11 arasındaki farklılıklardan, scoped storageden ve biz developerlara yardımcı olabilecek yeni apilardan bahsedeceğim.

Android 10 ile birlikte kullanıcılara “Allow all the time” yanında “Allow only while the app is in use” seçeneği sunulmaya başlanmıştı. Android 11'le birlikte kullanıcılara izinleri daha fazla kontrol etme hakkı verildi. Kullanıcılar artık “Only this time” seçeneği ile geçici olarak tek seferlik izinler verebiliyor.

Bu izin yalnızca uygulamanız foregrounddayken geçerli oluyor. Uygulama backgrounda geçtiğinde kısa süre sonra ilgili izin expire oluyor. Best practicelere göre yazılmış olan bir appde bu özellik için herhangi bir değişiklik yapılması gerekmiyor.

Background location request

Verilere göre, kullanıcıların yüzde 65’i bir appin background location iznini kullandığı hatırlatıldığı takdirde bu özelliği kısıtlamaya gidiyorlar. Bu nedenle Android 11’le birlikte background location izni almak için öncelikle foreground location izni (Manifest.permission.ACCESS_COARSE_LOCATION veya Manifest.permission.ACCESS_FINE_LOCATION) almanız gerekiyor. Eş zamanlı olarak background location izni istenmesi durumunda sistem hata mesajı fırlatıyor.

Android 11’i target eden appler için artık in-app dialog üzerinden background location izni isteyemiyoruz. Yani system dialog artık “Allow all the time” butonunu içermiyor. Dolayısıyla dialog üzerinden direk bu izni aktif hale getirtemiyoruz. Uygulamaların background location izni gerektiren featurelarını kullanıcıya net bir şekilde açıklaması gerekiyor. Ardından kullanıcıyı system settings ekranına yönlendirerek izin vermesi bekleniyor. Bu noktadan sonra kullanıcı fikrini değiştirerek izin vermekten vazgeçebilir. Bunu da her zamanki gibi gözönünde bulundurmamız gerekir.

auto-reset permissions

Yine verilere göre, ortalama olarak bir kullanıcının telefonunda 75 civarı uygulama bulunmakta ve bunlardan sadece 3 tanesini aktif olarak kullanmaktadır. Bu nedenle Android 11'le birlikte uzun süre kullanılmayan applerin sahip olduğu runtime izinler sistem tarafından otomatik olarak revoke edilmektedir. Bununla ilgili bir notification gönderilerek kullanıcıya unused appler için varolan permissionların iptal edildiği bilgisi veriliyor. Notificationa tıklandığında system settings ekranına gitmesi sağlanıyor. Bu noktada kullanıcı dilerse yeniden yetkilendirmek istediği applere izin verebilir.

foregroundServiceType

Android 11'le birlikte kamera ve mikrofon erişimi için iki yeni foregroundServiceType eklendi. Uygulamanızda mikrofon ya da kamera datasına erişim sağlayan herhangi bir foreground servis varsa bunların manifest dosyasında foregroundServiceType=”camera|microphone” şeklinde tanımlanması gerekiyor.

Scoped storage

Bir diğer özellik olan scoped storage Android 10'la birlikte tanıtılmıştı. Bu konuda bazı değişiklikler yapılarak Android 11 sonrasında scoped storage mandatory olmasına karar verildi. Uygulamalar kendilerine ait dosyaları herhangi bir izin almaları gerekmeden okuyabilirler. Ancak kendi sahip oldukları dosyalar dışında herhangi bir dosyayı açık kullanıcı izni olmadan okuyamaz, değiştiremez veya silemezler.

Uygulamalar Media ve Downloads dosyalarına izin almaksızın ulaşabilirler. Ancak kendileri üretmedikleri takdirde ilgili dosyaları değiştirmek veya silmek için izin almaları gerekmektedir. Media izni olan appler media dosyalarını file path üzerinden ulaşarak ya da MediaStore veya native libraryler kullanarak okuyabilirler. Ayrıca special app access izni olan uygulamalar shared storagedeki tüm dosyaları yönetebilirler.

Android 11'i target eden appler artık cihazda kurulu olan diğer appleri göremeyecek. Uygulamanızın manifest dosyasında hangi appleri görmeye ihtiyacı olduğunu tanımlaması gerekiyor. Uygulamanızın manifest dosyasında belirtilen listede bulunmayan herhangi bir appi query etme imkanı bulunmuyor.

Package belirterek query etme

Yalnızca ilgili packagename’lere sahip appleri query etmek için manifest dosyasında queries tagi altında package tagiyle ilgili packageları tek tek tanımlamamız gerekiyor.

Belli kategorilere göre query etme

Belli kategorilere göre query etmemiz gerekiyorsa intent tagini kullanıyoruz. Yukarıdaki gibi jpeg image paylaşımına izin veren appleri listelemeye yarayan bir intent tanımlayabiliyoruz. Böylece bu özelliğe sahip olan appleri query edebiliyoruz.

Ek olarak cihazda yüklü olan tüm packagelara erişme ihtiyacı olan appler için queryAllPackages tagi eklendi. Ancak uygulamaların büyük çoğunluğunun bu seviyede bir izne ihtiyacı olmadığı varsayılıyor.

REQUIRE_NON_BROWSER flag

Android 11'le birlikte query için birkaç intent flag tanıtıldı. Örneğin bir intent tanımlayarak kullanıcıyı direkt olarak native bir appe yönlendirmek istiyoruz. Bu durumda uygulamalar artık REQUIRE_NON_BROWSER activity flagini kullanabiliyor. Yukarıdaki örnekte startActivity çağrısı eğer bu çağrıyı karşılayabilecek herhangi bir native app yoksa bir exception fırlatacak. Bu durumda ilgili içeriği uygulama içinde görüntülemesini sağlayarak handle edebilirsiniz.

Data access auditing

Uygulamalar genel olarak birçok third party sdk library kullanabiliyorlar. Bu libraryler birçok sensitive data erişiminde bulunabiliyorlar. Developerlar için hangi librarynin hangi izni talep ettiği, hangi hassas veriye erişmek istediği gibi bilgileri tespit etmek oldukça zor.

Bunun yanında büyük çaplı applerde çok fazla developer birarada çalışır ve kodun her bir satırına hakim olamayabilirsiniz.

Bu nedenle developerlara yardımcı olmak amacıyla Android 11'le iki yeni API tanıtıldı.

Callback on data access

Birincisi herhangi bir hassas veriye erişim talebi yapıldığı anda bir callback vasıtasıyla handle edebileceğiniz “Callback on data access”

Feature tagging

Bir diğeri ise developerlara uygulamalarındaki fonksiyonlar için attribute tanımlamaya olanak sağlayan daha gelişmiş bir API olan “Feature tagging”

Daha fazla bilgi için aşağıdaki videoya göz atabilirsiniz.

Genel anlamda gizlilik konusunda yapılan değişikliklerden bahsettiğim yazımı burada noktalıyorum. Umarım faydalı olmuştur.

Scoped storage konusunda daha detaylı bir yazı hazırlayana dek kodla kalın..

--

--