Android'de izin güncellemeleri ↗11

Android 11 kullanıcılara konum, mikrofon ve kamera için daha ayrıntılı izinler belirleme olanağı sunar. Ayrıca sistem, Android 11 veya sonraki sürümleri hedefleyen kullanılmayan uygulamaların izinlerini sıfırlar. Uygulamaların, sistem uyarı penceresini kullanmaları veya telefon numaralarıyla ilgili bilgileri okumaları durumunda 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ılara yönelik izinler 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 tek seferlik izin verilir.

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

Kullanılmayan uygulamaların izinlerini otomatik olarak sıfırlayın

Uygulamanız Android 11 veya sonraki bir sürümü 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ştirmesiyle 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şimde bulunduğundan özelliklerin ihtiyaç duydukları izinlere sahip olduğunu doğrulamanız gerekir.

Sistemin kullanılmayan uygulamaların izinlerini nasıl otomatik olarak 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 cihaza yüklendiği süre boyunca belirli bir izin için Reddet'e birden fazla kez dokunan kullanıcılar, uygulamanız bu izni tekrar isterse 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ı daha önce "tekrar sorma" onay kutusunu veya seçeneğini belirlemediği sürece uygulamanız her izin istediğinde kullanıcılar sistem izinleri iletişim kutusunu görüyordu. Android 11'deki bu davranış değişikliği, kullanıcıların reddetmeyi seçtikleri izin isteklerinin tekrar tekrar istenmesini önler.

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

Burada PACKAGE_NAME, incelenecek paketin adıdır.

Komutun çıktısı, aşağıdakine benzer 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 tarafından işaretlenir. İki kez Reddet seçeneği belirlendiğinde kalıcı olarak reddedilen izinler USER_FIXED tarafından işaretlenir.

İstek iletişim kutusu gösterilmediğinde test kullanıcılarının şaşırmamasını sağlamak için test sırasında 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 permissions API referans sayfasını ziyaret edin.

Uygulamanızda izin reddini nasıl işleyeceğinizle ilgili daha fazla bilgi edinin.

Sistem uyarı penceresi değişiklikleri

Android 11, uygulamalara SYSTEM_ALERT_WINDOW izninin verilme şekliyle ilgili çeşitli değişiklikler yapar. Bu değişikliklerin amacı, izni daha bilinçli bir şekilde vererek kullanıcıları korumaktır.

Belirli uygulamalara, istek üzerine otomatik olarak SYSTEM_ALERT_WINDOW izni verilir

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

  • ROLE_CALL_SCREENING sahibi olan ve SYSTEM_ALERT_WINDOW isteğinde bulunan tüm uygulamalara bu izin otomatik olarak verilir. Uygulama, ROLE_CALL_SCREENING iznini kaybederse izni kaybeder.

  • Ekranı bir MediaProjection aracılığıyla kaydeden ve SYSTEM_ALERT_WINDOW isteğinde bulunan tüm uygulamalara, kullanıcı uygulamaya erişim iznini açıkça reddetmediği sürece otomatik olarak izin verilir. Uygulama, ekranı yakalamayı bıraktığında izni kaybeder. Bu kullanım alanı esasen oyun canlı yayın uygulamalarına yöneliktir.

Bu uygulamaların SYSTEM_ALERT_WINDOW iznini almak için ACTION_MANAGE_OVERLAY_PERMISSION göndermesi gerekmez, doğrudan SYSTEM_ALERT_WINDOW izni isteyebilirler.

MANAGE_OVERLAY_PERMISSION amaçları, kullanıcıyı her zaman sistem izinleri ekranına getirir

Android 11'den itibaren ACTION_MANAGE_OVERLAY_PERMISSION amaçları, kullanıcıyı her zaman en üst düzey Ayarlar ekranına getirir. Burada kullanıcılar, uygulamalar için SYSTEM_ALERT_WINDOW izinlerini verebilir veya iptal edebilir. Amaçtaki package: verileri yoksayılır.

Android'in önceki sürümlerinde ACTION_MANAGE_OVERLAY_PERMISSION amacı, bir paketi belirterek kullanıcıyı izni yönetmesi için uygulamaya özel bir ekrana götürür. Bu işlev, Android 11 itibarıyla desteklenmemektedir. Bunun yerine, kullanıcının öncelikle izin vermek veya izni iptal etmek istediği uygulamayı seçmesi gerekir. Bu değişikliğin amacı, izin verme sürecini daha bilinçli hale getirerek kullanıcıları korumaktı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 bir sürümü 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, READ_PHONE_STATE uygulamasının önceki listede yer alanlar dışındaki yöntemleri çağırmasını belirtiyorsa tüm Android sürümlerinde READ_PHONE_STATE için istekte bulunmaya 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. Uygulamanızın, izni yalnızca Android 10 (API düzeyi 29) ve önceki sürümlerde kullanması için READ_PHONE_STATE beyanınızı değiştirin.
  2. READ_PHONE_NUMBERS iznini ekleyin.

Aşağıdaki manifest beyan snippet'i bu süreci gösterir:

<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'deki izinlerde yapılan değişiklikler hakkında daha fazla bilgi için aşağıdaki materyalleri inceleyin:

Videolar

Android 11'deki son gizlilik değişiklikleriyle geliştirme