Android 10 (API düzeyi 29), kullanıcı gizliliğini daha iyi korumak için bir dizi özellik ve davranış değişikliği sunar. Bu değişiklikler, kullanıcıların verileri ve uygulamalara verdikleri izinler üzerindeki şeffaflık ve kontrolü artırır. Bu özellikler, uygulamanızın bağlı olduğu belirli davranışların veya verilerin platformun eski sürümlerine kıyasla farklı şekilde çalışabileceği anlamına gelebilir. Uygulamanız, kullanıcı verilerini işleme konusunda mevcut en iyi uygulamalara uyuyorsa uygulamanız üzerindeki etkiler minimum düzeyde olmalıdır.
Bu sayfada her değişikliğin özeti listelenir.
En önemli değişiklikler
Bu bölümde, Android 10'da gizlilikle ilgili önemli değişiklikler yer almaktadır.
Harici depolama alanına erişim, uygulama dosyaları ve medyayla sınırlandırıldı
Varsayılan olarak, Android 10 ve sonraki sürümleri hedefleyen uygulamalara harici depolama alanına kapsamlı erişim veya kapsamlı depolama izni verilir. Bu tür uygulamalar, depolama alanıyla ilgili kullanıcı izinleri istemeden harici bir depolama cihazındaki aşağıdaki dosya türlerini görebilir:
getExternalFilesDir()
kullanılarak erişilen, uygulamaya özel dizindeki dosyalar.- Uygulamanın medya deposundan oluşturduğu fotoğraflar, videolar ve ses klipleri
Kapsamlı depolama ve harici depolama cihazlarına kaydedilen dosyaları paylaşma, bu dosyalara erişme ve bunları değiştirme hakkında daha fazla bilgi edinmek için harici depolamadaki dosyaları yönetme ve medya dosyalarına erişme ve bunları değiştirme ile ilgili kılavuzlara göz atın.
Arka planda cihaz konumuna erişim için izin gerekir
Android 10, kullanıcıların bir uygulamanın konum bilgisine erişimi üzerinde daha fazla kontrol sahibi olmasını sağlamak için ACCESS_BACKGROUND_LOCATION
iznini kullanıma sunar.
ACCESS_FINE_LOCATION
ve ACCESS_COARSE_LOCATION
izinlerinden farklı olarak ACCESS_BACKGROUND_LOCATION
izni yalnızca bir uygulamanın arka planda çalışırken konuma erişimini etkiler. Aşağıdaki koşullardan biri karşılanmadığı sürece bir uygulamanın arka planda konuma eriştiği kabul edilir:
- Uygulamaya ait bir etkinlik görünür.
Uygulama,
location
ön plan hizmeti türü beyan eden bir ön plan hizmeti çalıştırıyor.Uygulamanızdaki bir hizmet için ön plan hizmeti türünü bildirmek üzere uygulamanızın
targetSdkVersion
veyacompileSdkVersion
değerini29
ya da daha yüksek bir değere ayarlayın. Konuma erişim gerektiren kullanıcı tarafından başlatılan işlemlerin ön plan hizmetleri tarafından nasıl devam ettirilebileceği hakkında daha fazla bilgi edinin.
Uygulamanız coğrafi sınırlar oluşturup izliyorsa ve Android 10 (API düzeyi 29) veya sonraki sürümleri hedefliyorsa ACCESS_BACKGROUND_LOCATION
iznini beyan etmeniz gerekir.
Android 9 veya önceki sürümler hedeflenirken erişim otomatik olarak verilir
Uygulamanız Android 10 veya sonraki sürümlerde çalışıyor ancak Android 9'u (API düzeyi 28) veya önceki sürümleri hedefliyorsa platform aşağıdaki davranışı uygular:
- Uygulamanız
ACCESS_FINE_LOCATION
veyaACCESS_COARSE_LOCATION
için bir<uses-permission>
öğesi beyan ediyorsa sistem, yükleme sırasındaACCESS_BACKGROUND_LOCATION
için otomatik olarak bir<uses-permission>
öğesi ekler. - Uygulamanız
ACCESS_FINE_LOCATION
veyaACCESS_COARSE_LOCATION
izni isterse sistem, isteğe otomatik olarakACCESS_BACKGROUND_LOCATION
iznini ekler.
Cihaz Android 10'a yükseltildiğinde erişim
Bir kullanıcı, uygulamanıza cihaz konumuna erişim izni verirse (ACCESS_COARSE_LOCATION
veya ACCESS_FINE_LOCATION
) ve cihazını Android 9'dan Android 10'a yükseltirse sistem, uygulamanıza verilen konum tabanlı izinler grubunu otomatik olarak günceller. Yükseltme işleminden sonra uygulamanızın aldığı izinler grubu, hedef SDK sürümüne ve tanımlanan izinlerine bağlıdır. Bu bilgiler aşağıdaki tabloda gösterilmiştir:
Tablo 1. Cihaz Android 10'a yükseltildikten sonra konum izni durumundaki değişiklikler
Hedef platform sürümü | Kaba veya ayrıntılı izin mi verildi? |
Bildiride arka plan izni tanımlanmış mı? |
Güncellenen varsayılan izin durumu |
---|---|---|---|
Android 10 | Evet | Evet | Ön planda ve arka planda erişim |
Android 10 | Evet | Hayır | Yalnızca ön planda erişim |
Android 10 | Hayır | (Sistem tarafından yoksayılır) | Erişim yok |
Android 9 veya önceki sürümler | Evet | Cihaz yükseltme sırasında sistem tarafından otomatik olarak eklenir. | Ön planda ve arka planda erişim |
Android 9 veya önceki sürümler | Hayır | (Sistem tarafından yoksayılır) | Erişim yok |
Kullanıcının, sistem uygulamanızın cihaz konumuna erişimini otomatik olarak güncelledikten sonra bile bu erişim düzeyini değiştirebileceğini unutmayın. Örneğin, kullanıcı uygulamanızın erişimini yalnızca ön planla sınırlayabilir veya erişimi tamamen iptal edebilir. Uygulamanız, özellikle bir ön plan hizmetinde cihazın konumuna erişmeye çalışmadan önce kullanıcının uygulamanızın bu konum bilgilerini almasına hâlâ izin verip vermediğini kontrol etmelidir.
Android 10 cihazlarda hedef API düzeyi güncellenirken erişimin iptal edilmesi
Uygulamanızın Android 10 çalıştıran bir cihaza zaten yüklendiğini varsayalım. Bu durumda uygulamanızı Android 10'u hedefleyecek şekilde güncellerseniz cihaz, ACCESS_BACKGROUND_LOCATION
iznini iptal eder.
Uygulamanız arka plandayken cihazın konumunu alma hakkında daha fazla bilgi için Periyodik konum güncellemeleri alma rehberine bakın.
Arka planda etkinlik başlatmayla ilgili kısıtlamalar
Android 10'dan itibaren sistem, arka planda etkinlik başlatma konusunda kısıtlamalar uygular. Bu davranış değişikliği, kullanıcının kesintiye uğramasını en aza indirir ve ekranda gösterilen içerikler üzerinde daha fazla kontrol sahibi olmasını sağlar. Uygulamanız, kullanıcı etkileşiminin doğrudan sonucu olarak etkinlik başlatıyorsa bu kısıtlamalardan etkilenmez.
Etkinlikleri arka plandan başlatmanın önerilen alternatifi hakkında daha fazla bilgi edinmek için uygulamanızda zamana duyarlı etkinlikler hakkında kullanıcıları uyarma konusundaki kılavuza bakın.
Tanımlayıcılar ve veriler
Bu bölümde, cihaz tanımlayıcıları ve verileriyle çalışmaya özgü değişiklikler listelenmektedir.
Kişi yakınlığı özelliğinin kaldırılması
Android 10'dan itibaren platform, kişilerin yakınlık bilgilerini takip etmez. Bu nedenle, uygulamanız kullanıcının kişileri arasında arama yaparsa sonuçlar etkileşim sıklığına göre sıralanmaz.
ContactsProvider
ile ilgili kılavuzda, Android 10'dan itibaren tüm cihazlarda kullanımdan kaldırılan belirli alanları ve yöntemleri açıklayan bir bildirim yer almaktadır.
MAC adresi rastgele seçimi
Android 10 veya sonraki sürümleri çalıştıran cihazlarda sistem, varsayılan olarak rastgele MAC adresleri iletir.
Uygulamanız kurumsal bir kullanım alanını ele alıyorsa platform, MAC adresleriyle ilgili çeşitli işlemler için API'ler sağlar:
- Rastgele MAC adresi alma: Cihaz sahibi uygulamaları ve profil sahibi uygulamaları,
getRandomizedMacAddress()
çağrısı yaparak belirli bir ağa atanmış rastgele MAC adresini alabilir. - Gerçek fabrika MAC adresini alma: Cihaz sahibi uygulamaları,
getWifiMacAddress()
işlevini çağırarak cihazın gerçek donanım MAC adresini alabilir. Bu yöntem, cihaz filolarını izlemek için kullanışlıdır.
/proc/net dosya sistemine erişim kısıtlaması
Android 10 veya sonraki sürümlerin yüklü olduğu cihazlarda uygulamalar, cihazın ağ durumuyla ilgili bilgileri içeren /proc/net
öğesine erişemez. VPN'ler gibi bu bilgilere erişmesi gereken uygulamalar NetworkStatsManager
veya ConnectivityManager
sınıfını kullanmalıdır.
Sıfırlanamayan cihaz tanımlayıcılarıyla ilgili kısıtlama
Android 10'dan itibaren uygulamaların, IMEI ve seri numarası da dahil olmak üzere cihazın sıfırlanamayan tanımlayıcılarına erişebilmesi için READ_PRIVILEGED_PHONE_STATE
ayrıcalıklı iznine sahip olması gerekir.
Etkilenen yöntemler şunlardır:
Build
TelephonyManager
Uygulamanızda izin yoksa ve yine de sıfırlanamayan tanımlayıcılar hakkında bilgi istemeye çalışırsanız platformun yanıtı hedef SDK sürümüne göre değişir:
- Uygulamanız Android 10 veya sonraki sürümleri hedefliyorsa
SecurityException
oluşur. - Uygulamanız Android 9'u (API düzeyi 28) veya daha eski bir sürümü hedefliyorsa ve
READ_PHONE_STATE
iznine sahipse yöntemnull
veya yer tutucu veriler döndürür. Aksi takdirdeSecurityException
oluşur.
Birçok kullanım alanında sıfırlanamayan cihaz tanımlayıcılarına gerek yoktur. Örneğin, uygulamanız reklam izleme veya kullanıcı analizi amacıyla sıfırlanamayan cihaz tanımlayıcıları kullanıyorsa bu özel kullanım alanları için Android reklam kimliğini kullanın. Daha fazla bilgi edinmek için benzersiz tanımlayıcılarla ilgili en iyi uygulamalar başlıklı makaleyi inceleyin.
Pano verilerine sınırlı erişim
Uygulamanız varsayılan giriş yöntemi düzenleyicisi (IME) değilse veya şu anda odaklanılmış uygulama değilse Android 10 ya da sonraki sürümlerdeki pano verilerine erişemez.
USB cihaz seri numarasının korunması
Uygulamanız Android 10 veya sonraki sürümleri hedefliyorsa kullanıcı, uygulamanıza USB cihazına ya da aksesuarına erişim izni verene kadar uygulamanız seri numarasını okuyamaz.
USB cihazlarla çalışma hakkında daha fazla bilgi edinmek için USB ana makinelerini yapılandırma hakkındaki kılavuza bakın.
Kamera ve bağlantı
Bu bölümde, kamera meta verileri ve bağlantı API'leriyle ilgili değişiklikler listelenmektedir.
Kamera ayrıntılarına ve meta verilere erişim kısıtlaması
Android 10, getCameraCharacteristics()
yönteminin varsayılan olarak döndürdüğü bilgilerin kapsamını değiştirir. Özellikle, bu yöntemin dönüş değerine dahil edilen, cihaza özel olabilecek meta verilere erişmek için uygulamanızın CAMERA
iznine sahip olması gerekir.
Bu değişiklikler hakkında daha fazla bilgi edinmek için izin gerektiren kamera alanları bölümüne bakın.
Kablosuz'u etkinleştirme ve devre dışı bırakma kısıtlaması
Android 10 veya sonraki sürümleri hedefleyen uygulamalar, kablosuz bağlantıyı etkinleştiremez ya da devre dışı bırakamaz. WifiManager.setWifiEnabled()
yöntemi her zaman false
değerini döndürür.
Kullanıcılardan kablosuz bağlantıyı etkinleştirmelerini ve devre dışı bırakmalarını istemeniz gerekiyorsa ayarlar paneli kullanın.
Yapılandırılmış kablosuz ağlara doğrudan erişim kısıtlamaları
Kullanıcı gizliliğini korumak için kablosuz ağlar listesinin manuel olarak yapılandırılması sistem uygulamaları ve cihaz politikası denetleyicileri (DPC'ler) ile sınırlandırılmıştır. Belirli bir DPC, cihaz sahibi veya profil sahibi olabilir.
Uygulamanız Android 10 veya sonraki sürümleri hedefliyorsa ve bir sistem uygulaması ya da DPC değilse aşağıdaki yöntemler yararlı veriler döndürmez:
getConfiguredNetworks()
yöntemi her zaman boş bir liste döndürür.Tam sayı değeri döndüren her ağ işlemi yöntemi (
addNetwork()
veupdateNetwork()
) her zaman -1 değerini döndürür.Boole değeri döndüren her ağ işlemi (
removeNetwork()
,reassociate()
,enableNetwork()
,disableNetwork()
,reconnect()
vedisconnect()
) her zamanfalse
değerini döndürür.
Uygulamanızın kablosuz ağlara bağlanması gerekiyorsa aşağıdaki alternatif yöntemleri kullanın:
- Kablosuz ağa anında yerel bağlantı başlatmak için standart
NetworkRequest
nesnesindeWifiNetworkSpecifier
kullanın. - Kullanıcıya internet erişimi sağlamak için değerlendirilecek kablosuz ağlar eklemek üzere
WifiNetworkSuggestion
nesneleriyle çalışın. Otomatik bağlanılacak ağ seçimi iletişim kutusunda görünen ağlarıaddNetworkSuggestions()
veremoveNetworkSuggestions()
yöntemlerini çağırarak ekleyebilir ve kaldırabilirsiniz. Bu yöntemler herhangi bir konum izni gerektirmez.
Bazı telefon, Bluetooth ve kablosuz ağ API'leri KESİN konum izni gerektirir
Uygulamanız Android 10 veya sonraki sürümleri hedefliyorsa Kablosuz, Wi-Fi Aware ya da Bluetooth API'lerindeki çeşitli yöntemleri kullanmak için ACCESS_FINE_LOCATION
iznine sahip olmalıdır. Aşağıdaki bölümlerde etkilenen sınıflar ve yöntemler listelenmiştir.
Telefon Hizmeti
TelephonyManager
getCellLocation()
getAllCellInfo()
requestNetworkScan()
requestCellInfoUpdate()
getAvailableNetworks()
getServiceState()
TelephonyScanManager
requestNetworkScan()
TelephonyScanManager.NetworkScanCallback
onResults()
PhoneStateListener
onCellLocationChanged()
onCellInfoChanged()
onServiceStateChanged()
Kablosuz bağlantı
WifiManager
startScan()
getScanResults()
getConnectionInfo()
getConfiguredNetworks()
WifiAwareManager
WifiP2pManager
WifiRttManager
Bluetooth
BluetoothAdapter
startDiscovery()
startLeScan()
BluetoothAdapter.LeScanCallback
BluetoothLeScanner
startScan()
İzinler
Bu bölümde, Android izin modeliyle ilgili güncellemeler açıklanmaktadır.
Ekran içeriğine erişim kısıtlandı
Android 10, kullanıcıların ekran içeriklerini korumak için READ_FRAME_BUFFER
, CAPTURE_VIDEO_OUTPUT
ve CAPTURE_SECURE_VIDEO_OUTPUT
izinlerinin kapsamını değiştirerek cihazın ekran içeriklerine sessiz erişimi engeller. Android 10'dan itibaren bu izinler yalnızca imza erişimi içindir.
Cihazın ekran içeriğine erişmesi gereken uygulamalar, kullanıcıdan izin vermesini isteyen bir istem görüntüleyen MediaProjection
API'sini kullanmalıdır.
Eski uygulamalarda kullanıcıya yönelik izin kontrolü
Uygulamanız Android 5.1'i (API düzeyi 22) veya daha eski bir sürümü hedefliyorsa kullanıcılar, Android 10 veya daha yeni bir sürümün yüklü olduğu cihazda uygulamanızı ilk kez kullanırken Şekil 1'de gösterildiği gibi bir izin ekranı görür. Bu ekran, kullanıcılara sistemin daha önce yükleme sırasında uygulamanıza verdiği izinlere erişimi iptal etme fırsatı sunar.
Fiziksel aktivite tanıma
Android 10, kullanıcının adım sayısını algılaması veya kullanıcının fiziksel aktivitesini (ör. yürüme, bisiklete binme veya araçla hareket etme) sınıflandırması gereken uygulamalar için android.permission.ACTIVITY_RECOGNITION
çalışma zamanı iznini kullanıma sunar. Bu özellik, kullanıcılara cihaz sensörü verilerinin Ayarlar'da nasıl kullanıldığı konusunda görünürlük sağlamak için tasarlanmıştır.
Google Play Hizmetleri'ndeki bazı kitaplıklar (ör. Activity Recognition API ve Google Fit API), kullanıcı uygulamanıza bu izni vermediği sürece sonuç sağlamaz.
Bu izni bildirmenizi gerektiren cihazdaki tek yerleşik sensörler, adım sayacı ve adım algılayıcı sensörleridir.
Uygulamanız Android 9'u (API düzeyi 28) veya daha eski bir sürümü hedefliyorsa ve aşağıdaki koşulların her birini karşılıyorsa sistem, gerektiğinde uygulamanıza android.permission.ACTIVITY_RECOGNITION
iznini otomatik olarak verir:
- Manifest dosyasında
com.google.android.gms.permission.ACTIVITY_RECOGNITION
izni yer alıyor. - Manifest dosyası iznini içermiyor.
android.permission.ACTIVITY_RECOGNITION
Sistem, android.permission.ACTIVITY_RECOGNITION
iznini otomatik olarak verirse uygulamanızı Android 10'u hedefleyecek şekilde güncelledikten sonra da bu izni kullanmaya devam edebilirsiniz. Ancak kullanıcı, bu izni istediği zaman sistem ayarlarından iptal edebilir.
İzin grupları kullanıcı arayüzünden kaldırıldı
Android 10'dan itibaren uygulamalar, kullanıcı arayüzünde izinlerin nasıl gruplandırıldığını arayamaz.