Android'deki izin güncellemeleri{6/}

Android 11, kullanıcılara konum, mikrofon ve kamera için daha ayrıntılı izinler belirtme olanağı sunar. Ayrıca sistem, Android 11 veya sonraki sürümleri hedefleyen kullanılmayan uygulamaların izinlerini sıfırlar. Ayrıca, sistem uyarı penceresini kullanan veya telefon numaralarıyla ilgili bilgileri okuyan uygulamaların beyan ettikleri izinleri güncellemesi gerekebilir.

Tek seferlik izinler

Android 11'den itibaren, uygulamanız konum, mikrofon veya kamerayla ilgili bir izin istediğinde kullanıcıya yönelik izin iletişim kutusunda Yalnızca bu sefer adlı bir seçenek bulunur. Kullanıcı iletişim kutusunda bu seçeneği belirlerse uygulamanıza geçici bir tek seferlik izin verilir.

Sistemin tek seferlik izinleri nasıl ele aldığı hakkında daha fazla bilgi edinin.

Kullanılmayan uygulamalardaki izinleri otomatik olarak sıfırlama

Uygulamanız Android 11 veya sonraki sürümleri hedefliyorsa ve birkaç ay boyunca kullanılmıyorsa sistem, kullanıcının uygulamanıza verdiği hassas çalışma zamanı izinlerini otomatik olarak sıfırlayarak kullanıcı verilerini korur. Bu işlem, kullanıcının sistem ayarlarında bir izni görüntüleyip uygulamanızın erişim düzeyini Reddet olarak değiştirmesi ile aynı etkiye sahiptir. Uygulamanız çalışma zamanında izin isteme ile ilgili en iyi uygulamalara uyuyorsa uygulamanızda herhangi bir değişiklik yapmanız gerekmez. Bunun nedeni, kullanıcı uygulamanızdaki özelliklerle etkileşim kurarken bu özelliklerin ihtiyaç duyduğu izinlere sahip olduğunu doğrulamanız gerektiğidir.

Sistemin kullanılmayan uygulamaların izinlerini otomatik olarak nasıl sıfırladığı hakkında daha fazla bilgi edinin.

İzin iletişim kutusunun görünürlüğü

Android 11'den itibaren, uygulamanızın bir cihazda yüklü kaldığı süre boyunca belirli bir izin için kullanıcı Reddet'e birden fazla kez dokunursa uygulamanız bu izni tekrar isterse kullanıcı sistem izinleri iletişim kutusunu görmez. Kullanıcının işlemi "bir daha sorma" anlamına gelir. Önceki sürümlerde, kullanıcılar daha önce "tekrar sorma" onay kutusunu veya seçeneğini işaretlemediği sürece, uygulamanız her izin istediğinde sistem izinleri iletişim kutusunu görürdü. Android 11'deki bu davranış değişikliği, kullanıcıların reddetmeyi seçtiği izinler için tekrarlanan isteklerin önüne geçer.

Bir uygulamanın izinlerinin kalıcı olarak reddedilip reddedilmediğini belirlemek için (hata ayıklama ve test amacıyla) aşağıdaki komutu kullanın:

adb shell dumpsys package PACKAGE_NAME

Buradaki PACKAGE_NAME, incelenecek paketin adıdır.

Komutun çıktısı şu şekilde görünen bölümler içerir:

...
runtime permissions:
  android.permission.POST_NOTIFICATIONS: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
  android.permission.ACCESS_FINE_LOCATION: granted=false, flags=[ USER_SET|USER_FIXED|USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
  android.permission.BLUETOOTH_CONNECT: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
...

Kullanıcı tarafından bir kez reddedilen izinler USER_SET ile işaretlenir. Reddet'i iki kez seçerek kalıcı olarak reddedilen izinler USER_FIXED ile işaretlenir.

Test sırasında, istek iletişim kutusu gösterilmediğinde test kullanıcılarının şaşırmaması için bu işaretleri sıfırlamak isteyebilirsiniz. Bunun için şu komutu kullanın:

adb shell pm clear-permission-flags PACKAGE_NAME PERMISSION_NAME user-set user-fixed

PERMISSION_NAME, sıfırlamak istediğiniz iznin adıdır. Android uygulama izinlerinin tam listesini görüntülemek için izinler API referans sayfasını ziyaret edin.

Uygulamanızda izin reddedilmesini yönetme hakkında daha fazla bilgi edinin.

Sistem uyarı penceresinde yapılan değişiklikler

Android 11, uygulamalara SYSTEM_ALERT_WINDOW izninin verilmesinde çeşitli değişiklikler yapar. Bu değişikliklerin amacı, izin verme işlemini daha bilinçli hale getirerek kullanıcıları korumaktır.

Belirli uygulamalara istek üzerine otomatik olarak SYSTEM_ALERT_WINDOW izni verilir

Belirli uygulama sınıflarına, istek üzerine SYSTEM_ALERT_WINDOW izini otomatik olarak verilir:

  • ROLE_CALL_SCREENING sahip olan ve SYSTEM_ALERT_WINDOW isteyen tüm uygulamalara otomatik olarak izin verilir. Uygulama ROLE_CALL_SCREENING'yi kaybederse izni de kaybeder.

  • MediaProjection üzerinden ekranı yakalayan ve SYSTEM_ALERT_WINDOW isteyen tüm uygulamalara, kullanıcı uygulamaya izni açıkça reddetmediği sürece otomatik olarak izin verilir. Uygulama ekranı yakalamayı bıraktığında izni kaybeder. Bu kullanım alanı, öncelikle oyun canlı yayını uygulamaları için tasarlanmıştır.

Bu uygulamaların SYSTEM_ALERT_WINDOW iznini almak için ACTION_MANAGE_OVERLAY_PERMISSION göndermesi gerekmez. Uygulamalar doğrudan SYSTEM_ALERT_WINDOW isteğinde bulunabilir.

MANAGE_OVERLAY_PERMISSION intent'leri kullanıcıyı her zaman sistem izinleri ekranına yönlendiriyor

Android 11'den itibaren, ACTION_MANAGE_OVERLAY_PERMISSION intent'ler kullanıcıyı her zaman üst düzey Ayarlar ekranına yönlendirir. Bu ekranda kullanıcı, uygulamalara yönelik SYSTEM_ALERT_WINDOW izinleri verebilir veya iptal edebilir. Intent'teki tüm package: verileri yoksayılır.

Android'in önceki sürümlerinde ACTION_MANAGE_OVERLAY_PERMISSION intent'i bir paket belirtebilirdi. Bu paket, kullanıcıyı izni yönetmek için uygulamaya özel bir ekrana yönlendirirdi. Bu işlev Android 11'den itibaren desteklenmiyor. Bunun yerine, kullanıcının önce izin vermek veya iptal etmek istediği uygulamayı seçmesi gerekir. Bu değişiklik, izin verme işlemini daha bilinçli hale getirerek kullanıcıları korumayı amaçlamaktadır.

Telefon numaraları

Android 11, uygulamanızın telefon numaralarını okurken kullandığı telefonla ilgili izni değiştirir.

Uygulamanız Android 11 veya sonraki sürümleri hedefliyorsa ve aşağıdaki listede gösterilen telefon numarası API'lerine erişmesi gerekiyorsa READ_PHONE_STATE izni yerine READ_PHONE_NUMBERS iznini istemeniz gerekir.

Uygulamanız, önceki listedekilerden farklı yöntemleri çağırmak için READ_PHONE_STATE bildirirse tüm Android sürümlerinde READ_PHONE_STATE istemeye devam edebilirsiniz. Ancak READ_PHONE_STATE iznini yalnızca önceki listedeki yöntemler için kullanıyorsanız manifest dosyanızı aşağıdaki gibi güncelleyin:

  1. READ_PHONE_STATE beyanınızı, uygulamanızın izni yalnızca Android 10 (API düzeyi 29) ve önceki sürümlerde kullanacak şekilde değiştirin.
  2. READ_PHONE_NUMBERS iznini ekleyin.

Aşağıdaki manifest beyanı snippet'inde bu işlem gösterilmektedir:

<manifest>
    <!-- Grants the READ_PHONE_STATE permission only on devices that run
         Android 10 (API level 29) and lower. -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE"
                     android:maxSdkVersion="29" />
    <uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
</manifest>

Ek kaynaklar

Android 11'de izinlerde yapılan değişiklikler hakkında daha fazla bilgi için aşağıdaki materyalleri inceleyin:

Videolar

Android 11'deki en son gizlilik değişikliklerini kullanarak geliştirme yapma