Çalışma Zamanı İzinleri

Android 6.0 ve üzeri sürümlerde, Android uygulama izinleri modeli, izinleri kullanıcılar için daha anlaşılır, kullanışlı ve güvenli hale getirmek üzere tasarlanmıştır. Model, tehlikeli izinler gerektiren (bkz. Etkilenen izinler ) Android uygulamalarını yükleme zamanı izin modelinden çalışma zamanı izin modeline taşıdı:

  • Yükleme zamanı izinleri

    ( Android 5.1 ve önceki sürümler ) Kullanıcılar, uygulamayı yüklerken veya güncellerken uygulamaya tehlikeli izinler verir. Cihaz üreticileri ve operatörler, kullanıcıya bildirimde bulunmadan uygulamaları önceden verilen izinlerle önceden yükleyebilir.

  • Çalışma zamanı izinleri

    ( Android 6.0 – 9 ) Kullanıcılar, uygulama çalışırken uygulamaya tehlikeli izinler verir. İzinlerin ne zaman istendiği (uygulama başlatıldığında veya kullanıcı belirli bir özelliğe eriştiğinde olduğu gibi) uygulamaya bağlıdır ancak kullanıcı, belirli izin gruplarına uygulama erişimi verir/reddeder. OEM'ler/operatörler uygulamaları önceden yükleyebilir ancak istisna sürecinden geçmedikleri sürece izinleri önceden veremezler. (Bkz. İstisnalar oluşturma .)

    ( Android 10 ) Kullanıcılar şeffaflığın arttığını görüyor ve hangi uygulamaların etkinlik tanıma (AR) çalışma zamanı izinlerine sahip olduğu üzerinde kontrole sahip oluyor. Çalışma zamanı izinleri iletişim kutusunda kullanıcılardan izinlere her zaman izin vermeleri, kullanım sırasında izin vermeleri veya izinleri reddetmeleri istenir. İşletim sisteminin Android 10'a yükseltilmesinde uygulamalara verilen izinler korunur ancak kullanıcılar Ayarlar'a giderek bunları değiştirebilir.

Çalışma zamanı izinleri, uygulamaların kullanıcının izni olmadan özel verilere erişmesini engeller ve uygulamalara, uygulamaların aradığı veya verildiği izin türlerine ilişkin ek bağlam ve görünürlük sağlar. Çalışma zamanı modeli, geliştiricilerin, kullanıcıların uygulamaların neden istenen izinleri gerektirdiğini anlamalarına yardımcı olmalarını teşvik eder ve kullanıcıların izin verme veya reddetme konusunda daha iyi kararlar verebilmeleri için daha fazla şeffaflık sağlar.

Etkilenen izinler

Android 6.0 ve üzeri, çalışma zamanı izinleri modelini kullanmak için tehlikeli izinler gerektirir. Tehlikeli izinler, istekte bulunan uygulamalara özel kullanıcı verilerine erişim veya bir cihaz üzerinde kontrol izni veren ve kullanıcıyı olumsuz etkileyebilecek daha yüksek riskli izinlerdir ( READ_CALENDAR gibi). Tehlikeli izinlerin listesini görüntülemek için şu komutu çalıştırın:

adb shell pm list permissions -g -d

Android 6.0 ve üzeri normal izinlerin davranışını değiştirmez. Bunların tümü normal izinler, sistem izinleri ve imza izinleri de dahil olmak üzere tehlikesiz izinlerdir. Normal izinler, istekte bulunan uygulamalara diğer uygulamalara, sisteme veya kullanıcıya yönelik minimum riskle yalıtılmış uygulama düzeyindeki özelliklere erişim sağlayan daha düşük riskli izinlerdir (örneğin SET_WALLPAPER ). Android 5.1 ve daha düşük sürümlerde olduğu gibi sistem, kurulum sırasında istekte bulunan uygulamaya otomatik olarak normal izinler verir ve kullanıcıdan onay istemez. İzinlerle ilgili ayrıntılar için <permission> öğesi belgelerine bakın.

Android 10'da sert ve yumuşak kısıtlamalar

Tehlikeli olmasının yanı sıra, bir izin katı kısıtlamalı veya yumuşak kısıtlamalı olabilir. Her iki durumda da, kısıtlı iznin de izin verilenler listesine eklenmesi gerekir. İzin verilenler listesine eklenmeyen katı kısıtlamalar, izin verilenler listesine eklenmeyen yazılım kısıtlamalarından farklı davranır:

  • ( Sert kısıtlamalar ) İzin verilenler listesine eklenmeyen uygulamalara izin verilemez.
  • ( Yumuşak kısıtlamalar ) İzin verilenler listesine eklenmeyen uygulamalar, talep ettikleri özel izne göre davranır. Davranış, istenen izne ilişkin genel belgelerde açıklanmıştır.

Bir uygulamayı yüklerken yükleyici (Google Play Store gibi), uygulamanın kısıtlı izinlerini izin verilenler listesine eklememeyi seçebilir. İzinler platform tarafından kısıtlanır ve yalnızca bir uygulamanın platform politikasına göre özel kriterleri karşılaması durumunda verilebilir. Katı kısıtlamalı izin türlerine örnek olarak SMS ve Arama Kaydı izinleri verilebilir.

İzin verilenler listesine ekleme, yükleme sırasında ve ne zaman gerçekleşir?

  • Android 9'dan 10'a yükseltme sırasında bir uygulama zaten yüklenmiştir.
  • bir izin önceden verilmiştir veya bir uygulama önceden yüklenmiştir.
  • İznin izin verilenler listesine eklenmesi için önceden tanımlanmış bir rol için izin gereklidir.
  • yükleyici (Google Play Store gibi) izni izin verilenler listesine eklendi olarak işaretler.

Kullanıcılar izinleri manuel olarak izin verilenler listesine ekleyemez.

Gereksinimler

Çalışma zamanı izin modeli, önceden yüklenmiş uygulamalar ve kurulum sürecinin bir parçası olarak cihaza teslim edilen uygulamalar da dahil olmak üzere tüm uygulamalar için geçerlidir. Uygulama yazılımı gereksinimleri şunları içerir:

  • Çalışma zamanı izin modeli, Android 6.0 ve üstünü çalıştıran tüm cihazlarda tutarlı olmalıdır. Bu, Android Uyumluluk Testi Paketi (CTS) testleri tarafından zorunlu kılınır.
  • Uygulamalar, kullanıcılardan çalışma zamanında uygulama izinlerini vermelerini istemelidir. Ayrıntılar için bkz . Uygulamaları güncelleme . Cihazın beklenen çalışması için temel olan temel cihaz işlevselliğini sağlayan varsayılan uygulamalara ve işleyicilere sınırlı istisnalar tanınabilir. (Örneğin, ACTION_CALL işlemlerini gerçekleştirmek için cihazın varsayılan Çevirici uygulamasının Telefon izni erişimi olabilir.) Ayrıntılar için bkz. İstisnalar oluşturma .
  • Tehlikeli izinlere sahip önceden yüklenmiş uygulamalar, API düzeyi 23'ü hedeflemeli ve çalışma zamanı izin modelini korumalıdır. Yani, uygulama kurulumu sırasında kullanıcı arayüzü akışı PermissionController'ın AOSP uygulamasından sapmamalı, kullanıcılar önceden yüklenmiş uygulamaların tehlikeli izinlerini iptal edebilir vb.
  • Başsız uygulamalar, izin istemek veya bir UID'yi gerekli izinlere sahip başka bir uygulamayla paylaşmak için bir etkinlik kullanmalıdır. Ayrıntılar için bkz. Başsız uygulamalar .

İzinlerin taşınması

Android 5.x'teki uygulamalara verilen izinler, Android 6.0 veya sonraki bir sürüme güncelleme yapıldıktan sonra da verilmiş olmaya devam eder, ancak kullanıcılar bu izinleri istedikleri zaman iptal edebilirler.

Android 9'dan 10'a güncellemede, katı şekilde kısıtlanan tüm izinler izin verilenler listesine alınır. Ön plan/arka plan bölme izinlerinin uygulanmasına ilişkin ayrıntılar için Arka plan konumu iste ile başlayan Android 10 gizlilik değişikliğine bakın.

Entegrasyon

Android 6.0 ve üzeri için uygulama çalışma zamanı izinleri modelini entegre ederken, önceden yüklenmiş uygulamaları yeni modelle çalışacak şekilde güncellemeniz gerekir. Ayrıca, temel işlevsellik için varsayılan işleyiciler/sağlayıcılar olan uygulamalar için istisnalar tanımlayabilir, özel izinler tanımlayabilir ve PermissionController uygulamasında kullanılan temayı özelleştirebilirsiniz.

Uygulamaları güncelleme

Sistem görüntüsündeki uygulamalar ve önceden yüklenmiş uygulamalar, otomatik olarak önceden verilen izinler değildir. Geliştirici yönergelerini kullanarak gerekli uygulama değişikliklerini yapmak için önceden yüklenmiş uygulama geliştiricileriyle (OEM, operatör ve üçüncü taraf) çalışmanızı öneririz. Özellikle, kullanıcılar izinleri iptal ettiğinde çökmeleri ve diğer sorunları önlemek için önceden yüklenmiş uygulamaların değiştirildiğinden emin olmalısınız.

Önceden yüklenmiş uygulamalar

Android 9 ve önceki sürümlerde, tehlikeli izinler kullanan önceden yüklenmiş uygulamalar, API düzeyi 23 veya üzerini hedeflemeli ve Android 6.0 ve üzeri AOSP izin modelini korumalıdır. Örneğin, bir uygulama kurulumu sırasındaki kullanıcı arayüzü akışı, PermissionController AOSP uygulamasından sapmamalıdır. Kullanıcılar önceden yüklenmiş uygulamaların tehlikeli izinlerini bile iptal edebilir.

Android 6.0'dan 9'a kadar olan sürümlerde, yükleme akışı sırasında bazı izinler verilir. Ancak 10'dan itibaren yükleme akışı ( Package Installer uygulaması tarafından gerçekleştirilir), izinlerin verilmesinden ( Permission Controller uygulamasında) ayrı bir işlevdir.

Başsız uygulamalar

Yalnızca etkinlikler izin isteyebilir. Hizmetler doğrudan izin isteyemez.

  • Android 5.1 ve önceki sürümlerde, başsız uygulamalar yüklendiğinde veya bir etkinlik kullanılmadan önceden yüklenmişse izin isteyebilir.
  • Android 6.0 ve üzeri sürümlerde, başsız uygulamaların izin istemek için aşağıdaki yöntemlerden birini kullanması gerekir:
    • İzin istemek için bir etkinlik ekleyin. (Bu tercih edilen yöntemdir.)
    • Bir UID'yi gerekli izinlere sahip başka bir uygulamayla paylaşın. Bu yöntemi yalnızca platformun birden fazla APK'yı tek bir uygulama olarak işlemesine ihtiyaç duyduğunuzda kullanın.

Amaç, bağlam dışı görünen izin istekleriyle kullanıcıların kafasını karıştırmaktan kaçınmaktır.

PackageInstaller Kullanıcı Arayüzünü Özelleştirme

İsterseniz, PackageInstaller tarafından kullanılan varsayılan cihaz temalarını ( Theme.DeviceDefault.Settings ve Theme.DeviceDefault.Light.Dialog.NoActionBar ) güncelleyerek Permissions UI temasını özelleştirebilirsiniz. Ancak uygulama geliştiricileri için tutarlılık kritik öneme sahip olduğundan, İzinler Kullanıcı Arayüzü'nün göründüğü yerleşimi, konumu ve kuralları özelleştiremezsiniz.

Ek dillere yönelik dizeleri dahil etmek için dizeleri AOSP'ye ekleyin.

İstisnalar oluşturma

PackageManager'daki DefaultPermissionGrantPolicy.java sınıfını kullanarak, temel işletim sistemi işlevleri için varsayılan işleyiciler veya sağlayıcılar olan uygulamalara önceden izin verebilirsiniz. Örnekler:

ACTION_CALL (Dialer) Default
Phone, Contacts, SMS, Microphone
SMS_DELIVER_ACTION (SMS/MMS) Default
Phone, Contacts, SMS

Özel izinleri tanımlama

Özel izinleri ve grupları normal veya tehlikeli olarak tanımlayabilir ve tıpkı Android 5.x ve önceki sürümlerde yapabildiğiniz gibi, mevcut izin gruplarına OEM/Taşıyıcıya özel izinler ekleyebilirsiniz.

Android 6.0 ve sonraki sürümlerde, yeni bir tehlikeli izin eklerseniz bu izin, diğer tehlikeli izinlerle aynı şekilde ele alınmalıdır (uygulama çalışma zamanı sırasında istenir ve kullanıcılar tarafından iptal edilebilir). Özellikle:

  • Geçerli bir gruba yeni izinler ekleyebilirsiniz ancak tehlikeli izinlerin ve tehlikeli izin gruplarının AOSP eşlemesini değiştiremezsiniz. (Yani bir gruptan izin alıp başka bir gruba atayamazsınız).
  • Cihazda yüklü uygulamalara yeni izin grupları ekleyebilirsiniz ancak platform bildirimine yeni izin grupları ekleyemezsiniz.

İzinleri test etme

Android, bireysel izinlerin doğru gruplarla eşlendiğini doğrulayan Uyumluluk Test Paketi (CTS) testleri içerir. Bu testleri geçmek, Android 6.0 ve üzeri CTS uyumluluğu için bir gerekliliktir.

İzinleri iptal etme

Android 13 ve sonraki sürümlerde, Context.revokeSelfPermissionsOnKill() işlevini kullanarak kendi verilen çalışma zamanı izinlerinizi iptal edebilirsiniz. İptal işlemi eşzamansız olarak gerçekleşir ve kullanıcıyı rahatsız etmeden bunu yapmak güvenli olduğunda tetiklenir. İptal tetiklendiğinde çağıran UID'de çalışan tüm işlemler sonlandırılır.

Tek bir iznin iptal edilmesinin, izinleri gruba göre ele alan ayarlar kullanıcı arayüzüne yansımayabileceğini anlamak önemlidir. Genellikle bir izin grubu, o gruptaki izinlerden en az biri verildiği sürece verilmiş olarak görüntülenir. Kullanıcıların ayarlarda iptal işlemini onaylayabilmelerini sağlamak sizin için önemliyse izin grubundaki tüm izinleri iptal ettiğinizden emin olun. Hangi izinlerin belirli bir gruba ait olduğunu öğrenmek için PackageManager.getGroupOfPlatformPermission ve PackageManager.getPlatformPermissionsForGroup kullanabilirsiniz.

Sistem istenen izinleri iptal ettiğinde, karşılık gelen ön plan izinlerinden hiçbiri hala verilmemişse ilgili arka plan izinlerini de iptal eder.

İptal işlemi, işlem ön planda kaldığı sürece tetiklenmeyecektir ancak geçerli kullanıcı kimliğinde çalışan tüm süreçlerin manuel olarak öldürülmesiyle (örneğin System.exit() kullanılarak) hemen tetiklenebilir. Ancak ne zaman tetikleneceğine sistemin karar vermesine izin verilmesi önerilir.

İzin iptali etkili olduktan sonra tekrar talepte bulunabilirsiniz ve kullanıcıdan talebi kabul etmesi veya reddetmesi istenir. Daha önce kullanıcı tarafından reddedilen bir iznin talep edilmesi mümkün değildir. Şu anda sahip olduğunuz ancak artık ihtiyaç duymadığınız izinleri iptal etmeniz teşvik edilse de, geçerlilik kazanana kadar kullanıcıya iptal hakkında bilgi vermemeye dikkat etmelisiniz.