Çalışma Zamanı İzinleri

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

  • Yükleme zamanı izinleri

    ( Android 5.1 ve altı ) Kullanıcılar, uygulamayı yüklediklerinde veya güncellediklerinde uygulamaya tehlikeli izinler verir. Cihaz üreticileri ve operatörler, kullanıcıyı bilgilendirmeden önceden verilen izinlere sahip uygulamaları ö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 (örneğin, uygulamanın ne zaman başlatıldığı veya kullanıcının belirli bir özelliğe ne zaman eriştiği) uygulamaya bağlıdır, ancak kullanıcı belirli izin gruplarına uygulama erişimi verir/reddeder. OEM'ler/taşıyıcılar uygulamaları önceden yükleyebilir, ancak istisna sürecinden geçmedikçe önceden izin veremezler. (Bkz. İstisnalar oluşturma .)

    ( Android 10 ) Kullanıcılar daha fazla şeffaflık görür ve hangi uygulamaların etkinlik tanıma (AR) çalışma zamanı izinlerine sahip olduğu üzerinde kontrol sahibi olur. Çalışma zamanı izinleri iletişim kutusu , kullanıcılardan izinleri her zaman izin vermeleri, kullanım sırasında izin vermeleri veya izinleri reddetmeleri istenir. Android 10'a yapılan bir işletim sistemi yükseltmesinde, uygulamalara verilen izinler korunur, ancak kullanıcılar Ayarlar'a gidip bunları değiştirebilir.

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

Etkilenen izinler

Android 6.0 ve sonraki sürümleri, bir ç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 yetkisi 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 üstü, normal izinlerin davranışını değiştirmez. Bunların tümü, normal, sistem ve imza izinleri dahil, tehlikeli olmayan izinlerdir. Normal izinler, istekte bulunan uygulamalara diğer uygulamalar, sistem veya kullanıcı için minimum riskle yalıtılmış uygulama düzeyindeki özelliklere erişim izni veren daha düşük riskli izinlerdir (örneğin SET_WALLPAPER ). Android 5.1 ve daha düşük sürümlerde olduğu gibi, sistem istekte bulunan bir uygulamaya yükleme sırasında 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ı izin de izin verilenler listesine eklenmelidir. İzin verilenler listesine girmeyen sabit kısıtlamalar, izin verilmeyen geçici kısıtlamalardan farklı davranır:

  • ( Kesin kısıtlamalar ) Uygulamalara izin verilenler listesine eklenmemiş izinler verilemez.
  • ( Yumuşak kısıtlamalar ) İzin verilenler listesine eklenmemiş uygulamalar, istedikleri özel izne göre davranır. Davranış, istenen izin için genel belgelerde açıklanmıştır.

Bir uygulama yüklerken, yükleyici (Google Play Store gibi), uygulamanın kısıtlanmış izinlerini izin verilenler listesine almamayı seçebilir. İzinler, platform tarafından kısıtlanır ve yalnızca bir uygulama, platform ilkesi başına özel ölçütleri karşılıyorsa verilebilir. Kesin olarak kısıtlanmış izin türlerine örnek olarak SMS ve Çağrı Günlüğü izinleri dahildir.

İzin verilenler listesine yükleme sırasında ve

  • Android 9'dan 10'a yükseltme sırasında bir uygulama zaten yüklendi.
  • bir izin önceden verilir veya bir uygulama önceden yüklenir.
  • İzni izin verilenler listesine eklemek için önceden tanımlanmış bir rol için bir izin gereklidir.
  • yükleyici (Google Play Store gibi), izni izin verilenler listesine ekledi.

Kullanıcılar izin verilenler listesi izinlerini manuel olarak veremez.

Gereksinimler

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

  • Çalışma zamanı izin modeli, Android 6.0 ve sonraki sürümleri çalıştıran tüm cihazlarda tutarlı olmalıdır. Bu, Android Uyumluluk Test Paketi (CTS) testleri tarafından zorlanır.
  • Uygulamalar, kullanıcılardan çalışma zamanında uygulama izinleri 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 verilebilir. (Örneğin, ACTION_CALL işlemek için cihazın varsayılan Çevirici uygulaması Telefon izni erişimine sahip 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 yüklemesi sırasındaki kullanıcı arayüzü akışı, PermissionController'ın AOSP uygulamasından sapmamalıdır, 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 .

İzin taşıma

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

Bir Android 9'dan 10'a güncellemede, tüm katı kısıtlamalı izinler izin verilenler listesine alınır. Ön plan/arka plan bölme izinlerinin uygulanmasıyla ilgili ayrıntılar için, Arka planda konum iste ile başlayan Android 10 gizlilik değişikliği konusuna bakın.

Entegrasyon

Android 6.0 ve sonraki sürümler için uygulama çalışma zamanı izinleri modelini entegre ederken, yeni modelle çalışmak için önceden yüklenmiş uygulamaları güncellemeniz gerekir. Ayrıca, temel işlevler 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 verilmiş 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 yüklemesi sırasındaki kullanıcı arabirimi 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, yükleme akışı sırasında bazı izinler verilir. Ancak, 10'dan başlayarak, yükleme akışı ( Package Installer uygulaması tarafından gerçekleştirilen), 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 sonraki sürümlerde, başsız uygulamalar izin istemek için aşağıdaki yöntemlerden birini kullanmalıdır:
    • İ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 çok APK'yı tek bir uygulama olarak işlemesine ihtiyacınız olduğunda kullanın.

Amaç, bağlam dışında görünen izin istekleriyle kullanıcıların kafasını karıştırmamaktı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 İzinler UI temasını özelleştirebilirsiniz. Ancak, uygulama geliştiricileri için tutarlılık kritik önem taşıdığından, İzinler Kullanıcı Arayüzü'nün ne zaman göründüğüne ilişkin yerleşimi, konumu ve kuralları özelleştiremezsiniz.

Ek diller için dizeler eklemek için dizeleri AOSP'ye ekleyin.

İstisnalar oluşturma

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

ACTION_CALL (Dialer) Default
Phone, Contacts, SMS, Microphone
tutucu2 l10n-yer
SMS_DELIVER_ACTION (SMS/MMS) Default
Phone, Contacts, SMS

Özel izinleri tanımlama

Android 5.x ve önceki sürümlerde olduğu gibi, özel izinleri ve grupları normal veya tehlikeli olarak tanımlayabilir ve 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, diğer tehlikeli izinlerle aynı şekilde ele alınmalıdır (uygulama çalışma zamanında istenir ve kullanıcılar tarafından geri alınabilir). özellikle:

  • Geçerli bir gruba yeni izinler ekleyebilirsiniz, ancak tehlikeli izinlerin ve tehlikeli izin gruplarının AOSP eşlemesini değiştiremezsiniz. (Başka bir deyişle, bir gruptan bir izni kaldıramaz ve başka bir gruba atayamazsınız).
  • Cihazda yüklü uygulamalarda yeni izin grupları ekleyebilirsiniz, ancak platform bildiriminde yeni izin grupları ekleyemezsiniz.

izinleri test etme

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

İzinleri iptal etme

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

Tek bir izni iptal etmenin, izinleri gruba göre değerlendiren ayarlar kullanıcı arayüzüne yansıtılmayabileceğini anlamak önemlidir. Tipik olarak, bir izin grubu, o gruptaki izinlerden en az birine verildiği sürece, verilmiş olarak görüntülenir. Kullanıcıların ayarlarda iptali onaylayabilmelerini sağlamak sizin için önemliyse, izin grubundaki her izni 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, ilgili ön plan izinlerinden hiçbirine hala verilmemişse, ilgili arka plan izinlerini de iptal eder.

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

Bir izin iptali etkili olduktan sonra, tekrar talep edebilirsiniz ve kullanıcıdan talebi kabul etmesi veya reddetmesi istenir. Kullanıcı tarafından daha önce reddedilmiş bir izin istenemez. Halihazırda sahip olduğunuz ancak artık ihtiyaç duymadığınız izinleri iptal etmeniz için teşvik edilmekle birlikte, geçerlilik kazanıncaya kadar kullanıcıyı iptal hakkında bilgilendirmemeye dikkat etmelisiniz.