Çalışma zamanı izinleri

Android 6.0 ve sonraki sürümlerde Android uygulama izinleri modeli, daha anlaşılır, faydalı ve güvenli hale getirebilirsiniz. Model, Android'i taşıdı uygulamaları için (bkz. Etkilenen izinler) çalışma zamanı izin modeline yükleme zamanı izin modeli:

  • Yükleme zamanı izinleri

    (Android 5.1 ve önceki sürümler) Kullanıcılar bir uygulamayı yüklerken veya güncellerken uygulama için tehlikeli izinler verir. Cihaz üreticiler ve operatörler, önceden izin verilen uygulamaları belirtir.

  • Çalışma zamanı izinleri

    (Android 6.0-9) Kullanıcılar, bir uygulama çalışırken uygulamaya tehlikeli izinler verir. İzin istendiğinde (uygulama başlatıldığında veya kullanıcı belirli bir uygulamaya eriştiğinde) özelliği), uygulamaya bağlı olarak değişir ancak kullanıcı, uygulamanın belirli izin grupları oluşturabilirsiniz. OEM'ler/operatörler uygulamaları önceden yükleyebilir, ancak kullanmadıkları sürece izinleri önceden veremezler istisna sürecine tabi tutulabilir. (bkz. Oluşturma istisnalar için geçerlidir.)

    (Android 10) Kullanıcılar daha fazla şeffaflık görür ve hangi uygulamaların etkinlik tanıma (AR) çalışma zamanında istenen izinleri kontrol edeceğini kontrol edin. Kullanıcılar şunları yapar: çalışma zamanında istenen izinler iletişim kutusunu her zaman etkinleştirebilir, kullanımdayken izin verebilir veya izinleri reddedebilirsiniz. Android 10'a yükseltilen bir işletim sisteminde uygulamalara verilen izinler korunur. Ancak kullanıcılar Ayarlar'a gidip bu ayarları değiştirebilir.

Çalışma zamanı izinleri, uygulamaların kullanıcının izni olmadan gizli verilere erişmesini engeller. ve hangi izin türleri hakkında bilgi vereceğiniz konusunda ek bağlam veya izin verildiğini görebilirsiniz. Çalışma zamanı modeli, geliştiricileri şunları yapmaya teşvik eder: uygulamaların neden istenen izinleri gerektirdiğini anlamalarına yardımcı olur ve şeffaflığın sağlanmasına yardımcı olur.

Etkilenen izinler

Android 6.0 ve sonraki sürümler, çalışma zamanında istenen izin modelini kullanmak için tehlikeli izinler gerektirir. Tehlikeli izinler, kullanıcılara izin veren daha yüksek riskli izinler (ör. READ_CALENDAR) uygulamaların gizli kullanıcı verilerine erişmesini veya bir cihaz üzerinde kontrol sahibi olmasını isteme. Bu durum, etkilemek için kullanır. 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 sonraki sürümler normal izinleriyle ilgili daha fazla bilgi edinin. Bu izinlerin tümü tehlikeli olmayan izinler (normal, özelliklerini ve imza izinlerini kontrol edin. Normal izinler düşük riskli izinler (ör. SET_WALLPAPER), izin isteyen uygulamalara izole uygulama düzeyinde erişim izni veren diğer uygulamalar, sistem veya kullanıcı için asgari risk içeren özelliklerdir. Android 5.1 ve eski sürümlerde, sistem şu adresten istekte bulunan uygulamaya otomatik olarak normal izinleri verir: ve kullanıcıdan onay istemiyor. İzinlerle ilgili ayrıntılar için bkz. <permission> item dokümanlarına göz atın.

Android 10'daki sert ve hafif kısıtlamalar

İzin, tehlikeli olmanın yanı sıra kısıtlamaya tabi olabilir. veya sınırlı kısıtlamalı olabilir. Her iki durumda da kısıtlı iznin izin verilenler listesine eklenmesi gerekir. İzin verilenler listesinde değil sabit kısıtlamalar, izin verilenler listesinde olmayan yumuşak kısıtlamalardan farklı davranır kısıtlamalar:

  • (Katı kısıtlamalar) Uygulamalara kendileri dışındaki izinler izin verilenler listesinde.
  • (Esnek kısıtlamalar) İzin verilenler listesine eklenmeyen uygulamalar belirli bir izin istemesi gerekir. Davranış herkese açık olarak tanımlanır dokümanlarına göz atın.

Bir uygulamayı yüklerken yükleyici (ör. Google Play Store) izin verilenler listesine eklememeniz gerekir. İzinler: YouTube tarafından kısıtlanmış ve yalnızca uygulamanın özel ölçütleri karşılaması durumunda verilebilir izin verir. Kesin olarak kısıtlanmış izin türlerine örnek olarak SMS verilebilir. ve Arama Kaydı izinleri.

İzin verilenler listesine ekleme işlemi yükleme sırasında ve

  • Android 9'dan 10'a yükseltme sırasında bir uygulama zaten yüklüyse.
  • veya uygulama önceden yüklenmiş olduğundan emin olun.
  • izin verilenler listesine eklemek üzere önceden tanımlanmış bir rol için izni gerekir.
  • yükleyici (ör. Google Play Store), izni izin verilenler listesinde.

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

Gereksinimler

Çalışma zamanı izin modeli, önceden yüklenmiş uygulamalar ve uygulamalar da dahil olmak üzere tüm uygulamalar için geçerlidir. teslim edilen e-posta gönderilir. Uygulama yazılımı gereksinimleri şunları içerir:

  • Çalışma zamanı izin modeli, Android 6.0 çalıştıran tüm cihazlarda tutarlı olmalıdır. ve daha yüksek olabilir. Bu, Android Compatibility Test Suite (CTS) testleri tarafından zorunlu kılınır.
  • Uygulamalar, kullanıcılardan çalışma zamanında uygulama izni vermelerini istemelidir. Ayrıntılar için Güncelleme uygulamalar. Varsayılan uygulamalara ve işleyicilere sınırlı istisnalar tanınabilir Cihazın beklenen çalışması için temel cihaz işlevselliğini sağlayan özellikler. (Örneğin, cihazın ACTION_CALL kullanımı için varsayılan Çevirici uygulamasında Telefon izni erişimi.) Ayrıntılar için İstisna oluşturma başlıklı makaleyi inceleyin.
  • Tehlikeli izinlere sahip önceden yüklenmiş uygulamalar API düzeyi 23'ü hedeflemeli ve çalışma zamanında izin modelini korumalıdır. Yani, kullanıcı arayüzü akışı uygulanarak yüklemenin AOSP uygulanmasından ConsentController, kullanıcılar önceden yüklenmiş uygulamaların tehlikeli izinlerini iptal edebilir ve bu şekilde beklemeye gerek yoktur.
  • Gözetimsiz uygulamalar, izin istemek veya bir Gerekli izinlere sahip başka bir uygulamanın UID'si. Ayrıntılı bilgi için Gözetimsiz uygulamalar başlıklı makaleyi inceleyin.

İzin taşıma

Android 5.x sürümlerindeki uygulamalara verilen izinler, Android 6.0 sürümüne güncellendikten sonra da verilmiş olarak kalır. ya da daha yüksek olabilir, ancak kullanıcılar bu izinleri istedikleri zaman iptal edebilir.

Android 9'dan 10'a kadar olan bir güncellemede, kesin olarak kısıtlanmış tüm izinler izin verilenler listesinde. Ön plan/arka plan bölme izinlerini uygulama hakkında ayrıntılar için Arka plan isteme arka planıyla başlayan Android 10 gizlilik değişikliği bölümüne bakın. konum değerleridir.

Entegrasyon

Android 6.0 ve sonraki sürümler için uygulama çalışma zamanı izin modelini entegre ederken Önceden yüklenmiş uygulamaları yeni modelle çalışacak şekilde güncelleme. Ayrıca, uygulamalar için istisnalar da tanımlayabilirsiniz. Bunlar, temel işlevin varsayılan işleyicileri/sağlayıcılarıdır. PermissionController uygulamasında kullanılan temayı özelleştirin.

Uygulamaları güncelleme

Sistem görüntüsündeki ve önceden yüklenmiş uygulamalardaki uygulamalar otomatik olarak önceden oluşturulmaz izin verir. Önceden yüklenmiş uygulama geliştiricilerle (OEM, operatör ve üçüncü taraf taraf olmak üzere) geliştiricilerini kullanarak uygulamada gerekli yönergelerimize bakın. Özellikle, önceden yüklenmiş uygulamaların kötü amaçlı yazılımdan etkilenmemesi için kullanıcılar izinleri iptal ettiğinde oluşan kilitlenmeler ve diğer sorunlar hakkında bilgi edindiniz.

Önceden yüklenmiş uygulamalar

Android 9 ve önceki sürümlerde, tehlikeli izinler kullanan önceden yüklenmiş uygulamalar API düzeyi 23'ü hedeflemelidir veya Android 6.0 ve sonraki AOSP izin modelini kullanmaya devam edin. Örneğin, kullanıcı arayüzü akışı AOSP uygulamasından sapmaması gerekir. PermissionController Kullanıcılar e-postalarının tehlikeli izinlerini de önceden yüklü uygulamalar.

Android 6.0 ile 9 arasındaki sürümlerde bazı izinler yükleme akışı sırasında verilir. Ancak, 10'da ise yükleme akışı (Package Installer uygulaması tarafından gerçekleştirilen), izin verme işlevinden ( Permission Controller uygulaması).

Gözetimsiz uygulamalar

Yalnızca etkinlikler izin isteyebilir. Hizmetler doğrudan izin isteğinde bulunamaz.

  • Android 5.1 ve önceki sürümlerde, gözetimsiz uygulamalar aşağıdaki durumlarda izin isteyebilir veya herhangi bir etkinlik kullanılmadan önceden yüklenmiş olup olmadığını gösterir.
  • İçinde Android 6.0 ve sonraki sürümleri çalıştıran gözetimsiz uygulamaların aşağıdaki yöntemlerden birini kullanarak izin iste:
    • İzin istemek için bir etkinlik ekleyin. (Tercih edilen yöntem budur.)
    • Bir UID, gerekli izinlere sahip başka bir uygulamayla paylaşın. Bunu kullan yöntemini yalnızca platformun birden fazla APK'yı tek bir APK olarak işlemesi gerektiğinde uygulamasını indirin.

Amaç, izin isteklerinin bağlamı dışında gösterilen izinlerle kullanıcıların kafasını karıştırmaktan kaçınmaktır.

PackageLoader kullanıcı arayüzünü özelleştirme

İsterseniz İzinler kullanıcı arayüzü temasını şu şekilde özelleştirebilirsiniz: Varsayılan cihaz temaları güncelleniyor (Theme.DeviceDefault.Settings ve Theme.DeviceDefault.Light.Dialog.NoActionBar) tarafından kullanılan PackageLoader. Ancak tutarlılık uygulama geliştiriciler için son derece önemli olduğundan izinlerin ne zaman gösterileceğinin yerleşimini, konumunu ve kurallarını Kullanıcı arayüzü görüntülenir.

Ek dillere ilişkin dizeler eklemek için dizelerini AOSP'ye yazar.

İstisna oluştur

Varsayılan işleyici olan uygulamalara ya da temel işletim sistemi işlevselliği için PackageManager'da DefaultPermissionGrantPolicy.java sınıfı. Örnekler:

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

Özel izinler tanımlama

Özel izinleri ve grupları normal veya tehlikeli olmalı ve mevcut bilgilere OEM/Operatöre özel izinler izin grupları, Android 5.x ve önceki sürümlerde yapabildiğiniz gibi.

Android 6.0 ve sonraki sürümlerde yeni bir tehlikeli izin eklerseniz bu izin Aynı şekilde diğer tehlikeli izinlerle aynı şekilde (uygulamanın çalışma zamanında istenen ve kullanıcılar tarafından geri alınabilir). Özellikle:

  • Geçerli gruba yeni izinler ekleyebilirsiniz ancak Tehlikeli izinlerin ve tehlikeli izin gruplarının AOSP eşlemesi. (Başka bir deyişle, bir izni kaldırıp başka bir gruba atayamaz).
  • Cihazda yüklü uygulamalara yeni izin grupları ekleyebilir, ancak platform manifest dosyasına yeni izin grupları ekleyemezsiniz.

İzinleri test et

Android, Uyumluluk Test Paketi (CTS) ile ilgili testlerin doğru gruplarla eşlendiğinden emin olun. Bu testleri geçmek Android 6.0 ve sonraki CTS uyumluluğu için bir şart.

İzinleri iptal et

Android 13 ve sonraki sürümlerde, kendi verdiğiniz izinleri iptal edebilirsiniz. çalışma zamanı izinlerini Context.revokeSelfPermissionsOnKill() İptal işlemi eş zamansız olarak gerçekleşir ve işlemi kesintiye uğratmadan güvenli olduğunda tetiklenir gösterir. İptal işlemi tetiklendiğinde, çağrı UID'sinde çalışan tüm işlemler sonlandırılır.

Tek bir iznin iptal edilmesinin, kullanıcı arayüzü. İzin grupları genellikle şu şekilde gösterilir: söz konusu gruptaki izinlerden en az biri verildiği sürece verilir. Kullanıcıların iptalin sizin için önemli olduğunu doğrulayabilir, iptal edilen her bir izin grubunda olması gerekir. Hangi izinlerin belirli bir gruba ait olduğunu öğrenmek için: PackageManager.getGroupOfPlatformPermission kullan ve PackageManager.getPlatformPermissionsForGroup.

Sistem istenen izinleri iptal ettiğinde, ilgili arka planı da iptal eder izin verilmemesini sağlar.

İşlem ön planda kaldığı sürece iptal işlemi tetiklenmez, ancak işlem aynı zamanda, geçerli kullanıcı kimliğinde çalışan tüm işlemlerin manuel olarak sonlandırılmasıyla hemen tetiklenir. örneği System.exit() ile ifade edilir. Ancak, tetikleyicinin ne zaman tetikleneceğine sistem karar vermeniz önerilir.

Bir izin iptali etkili olduktan sonra tekrar istekte bulunabilirsiniz. Kullanıcı, isteği kabul etmenizin veya reddetmenizin istendiğini ifade eder. daha önce kullanıcı tarafından reddedilmiştir. Size verdiğiniz izinleri iptal etmeniz önerilir artık gerekli olmadığı halde, kullanıcıya bununla ilgili bilgi vermemeye geçerli olana kadar iptal edebilirsiniz.