مجوزهای زمان اجرا

در اندروید 6.0 و بالاتر، مدل مجوزهای برنامه اندروید به گونه ای طراحی شده است که مجوزها را برای کاربران قابل فهم تر، مفیدتر و ایمن تر کند. این مدل برنامه‌های Android را که به مجوزهای خطرناک نیاز دارند (به مجوزهای تحت تأثیر مراجعه کنید) از یک مدل مجوز زمان نصب به یک مدل مجوز زمان اجرا منتقل کرد:

  • مجوزهای زمان نصب

    ( Android 5.1 و پایین تر ) کاربران هنگام نصب یا به روز رسانی برنامه، مجوزهای خطرناکی را به یک برنامه اعطا می کنند. سازندگان دستگاه و شرکت‌های مخابراتی می‌توانند بدون اطلاع کاربر، برنامه‌هایی را با مجوزهای قبلی نصب کنند.

  • مجوزهای زمان اجرا

    ( Android 6.0 – 9 ) کاربران هنگام اجرا شدن برنامه، مجوزهای خطرناکی را به یک برنامه می دهند. زمانی که مجوزها درخواست می‌شوند (مانند زمانی که برنامه راه‌اندازی می‌شود یا زمانی که کاربر به یک ویژگی خاص دسترسی پیدا می‌کند) به برنامه بستگی دارد، اما کاربر دسترسی برنامه را به گروه‌های مجوز خاصی اعطا یا رد می‌کند. OEM/شرکت‌های مخابراتی می‌توانند برنامه‌ها را از قبل نصب کنند، اما نمی‌توانند مجوزها را از قبل صادر کنند، مگر اینکه مراحل استثنا را طی کنند. (به ایجاد استثناها مراجعه کنید.)

    ( اندروید 10 ) کاربران شاهد افزایش شفافیت هستند و کنترل دارند که کدام برنامه ها دارای مجوزهای زمان اجرا تشخیص فعالیت (AR) هستند. در گفتگوی مجوزهای زمان اجرا از کاربران خواسته می شود که همیشه اجازه دهند، در حین استفاده اجازه دهند یا مجوزها را رد کنند. در ارتقای سیستم عامل به اندروید 10، مجوزهای داده شده به برنامه ها حفظ می شود، اما کاربران می توانند به تنظیمات رفته و آنها را تغییر دهند.

مجوزهای زمان اجرا از دسترسی برنامه‌ها به داده‌های خصوصی بدون رضایت کاربر جلوگیری می‌کند و زمینه و دید بیشتری را در مورد انواع مجوزهایی که برنامه‌ها به دنبال آن هستند یا به آنها اعطا شده است، در اختیار آنها قرار می‌دهد. مدل زمان اجرا توسعه دهندگان را تشویق می کند تا به کاربران کمک کنند تا بفهمند چرا برنامه ها به مجوزهای درخواستی نیاز دارند، و شفافیت بیشتری را فراهم می کند تا کاربران بتوانند تصمیمات بهتری در مورد اعطای یا رد آنها بگیرند.

مجوزهای تحت تأثیر

Android 6.0 و بالاتر برای استفاده از مدل مجوزهای زمان اجرا به مجوزهای خطرناک نیاز دارد. مجوزهای خطرناک مجوزهای پرخطری هستند (مانند READ_CALENDAR ) که به برنامه‌های درخواست‌کننده اجازه دسترسی به داده‌های کاربر خصوصی یا کنترل یک دستگاه را می‌دهند که می‌تواند بر کاربر تأثیر منفی بگذارد. برای مشاهده لیستی از مجوزهای خطرناک، دستور زیر را اجرا کنید:

adb shell pm list permissions -g -d

اندروید 6.0 و بالاتر رفتار مجوزهای عادی را تغییر نمی‌دهد. اینها همه مجوزهای غیر خطرناک از جمله مجوزهای عادی، سیستمی و امضا هستند. مجوزهای معمولی مجوزهای کم خطری هستند (مانند SET_WALLPAPER ) که به برنامه‌های درخواست‌کننده اجازه دسترسی به ویژگی‌های سطح برنامه جداگانه را با کمترین خطر برای سایر برنامه‌ها، سیستم یا کاربر می‌دهند. همانند نسخه‌های اندروید 5.1 و نسخه‌های پایین‌تر، سیستم به طور خودکار مجوزهای عادی را به برنامه درخواست‌کننده در هنگام نصب می‌دهد و کاربر را برای تأیید درخواست نمی‌کند. برای جزئیات در مورد مجوزها، به مستندات عنصر <permission> مراجعه کنید.

محدودیت های سخت و نرم در اندروید 10

یک مجوز علاوه بر خطرناک بودن، می تواند با محدودیت سخت یا محدود باشد. در هر صورت، مجوز محدود نیز باید در لیست سفید قرار گیرد. محدودیت‌های سخت غیرفهرست رفتار متفاوتی با محدودیت‌های نرم غیر لیست سفید دارند:

  • ( محدودیت‌های سخت ) نمی‌توان به برنامه‌هایی مجوز داد که در لیست سفید نیستند.
  • ( محدودیت‌های نرم ) برنامه‌های بدون قرار گرفتن در لیست سفید بر اساس مجوز خاصی که درخواست می‌کنند رفتار می‌کنند. این رفتار در اسناد عمومی برای مجوز درخواستی توضیح داده شده است.

هنگام نصب یک برنامه، نصب کننده (مانند فروشگاه Google Play) ممکن است انتخاب کند که مجوزهای محدود شده برای برنامه در لیست سفید قرار نگیرد. مجوزها توسط پلتفرم محدود شده و تنها در صورتی قابل اعطا هستند که یک برنامه معیارهای خاصی را برای هر خط مشی پلت فرم داشته باشد. نمونه هایی از انواع مجوزهای محدود شده عبارتند از مجوزهای SMS و Call Log.

لیست سفید در حین نصب و زمان انجام می شود

  • یک برنامه قبلاً در حین ارتقاء اندروید 9 به 10 نصب شده است.
  • یک مجوز از قبل صادر شده است یا یک برنامه از قبل نصب شده است.
  • برای نقشی که قبلاً برای لیست سفید مجوز تعریف شده است، مجوز لازم است.
  • نصب کننده (مانند فروشگاه Google Play) مجوز را در لیست سفید علامت گذاری می کند.

کاربران نمی توانند به صورت دستی مجوزها را در لیست سفید قرار دهند.

الزامات

مدل مجوز زمان اجرا برای همه برنامه‌ها، از جمله برنامه‌های از پیش نصب‌شده و برنامه‌هایی که به عنوان بخشی از فرآیند راه‌اندازی به دستگاه تحویل داده می‌شوند، اعمال می‌شود. الزامات نرم افزار کاربردی عبارتند از:

  • مدل مجوز زمان اجرا باید در همه دستگاه‌های دارای Android نسخه 6.0 و بالاتر سازگار باشد. این توسط تست‌های مجموعه تست سازگاری Android (CTS) اعمال می‌شود.
  • برنامه ها باید از کاربران بخواهند که مجوزهای برنامه را در زمان اجرا اعطا کنند. برای جزئیات، به به روز رسانی برنامه ها را ببینید. ممکن است استثنائات محدودی به برنامه‌ها و کنترل‌کننده‌های پیش‌فرض داده شود که عملکرد پایه دستگاه را برای عملکرد مورد انتظار دستگاه ارائه می‌کنند. (به عنوان مثال، برنامه شماره‌گیر پیش‌فرض دستگاه برای مدیریت ACTION_CALL ممکن است به مجوز تلفن دسترسی داشته باشد.) برای جزئیات، به ایجاد استثناها مراجعه کنید.
  • برنامه های از پیش بارگذاری شده که مجوزهای خطرناکی دارند باید سطح 23 API را هدف قرار دهند و مدل مجوز زمان اجرا را حفظ کنند. یعنی جریان UI در حین نصب برنامه نباید از اجرای AOSP PermissionController منحرف شود، کاربران می توانند مجوزهای خطرناک برنامه های از پیش نصب شده را لغو کنند و غیره.
  • برنامه های Headless باید از یک اکتیویتی برای درخواست مجوز یا اشتراک گذاری یک UID با برنامه دیگری که مجوزهای لازم را دارد استفاده کنند. برای جزئیات، به برنامه‌های بدون سر مراجعه کنید.

مهاجرت مجوزها

مجوزهای اعطا شده به برنامه‌های کاربردی در Android 5.x پس از به‌روزرسانی به Android 6.0 یا بالاتر همچنان اعطا می‌شوند، اما کاربران می‌توانند هر زمان که بخواهند این مجوزها را لغو کنند.

در به‌روزرسانی اندروید ۹ به ۱۰، همه مجوزهای محدود شده در لیست سفید قرار می‌گیرند. برای جزئیات در مورد اجرای مجوزهای تقسیم پیش‌زمینه/پس‌زمینه، تغییر حریم خصوصی Android 10 را ببینید که با درخواست موقعیت پس‌زمینه شروع می‌شود.

ادغام

هنگام ادغام مدل مجوزهای زمان اجرا برنامه برای اندروید 6.0 و بالاتر، باید برنامه های از پیش نصب شده را برای کار با مدل جدید به روز کنید. همچنین می‌توانید برای برنامه‌هایی که کنترل‌کننده/ارائه‌دهنده پیش‌فرض عملکرد اصلی هستند، استثنائاتی تعریف کنید، مجوزهای سفارشی را تعریف کنید، و تم مورد استفاده در برنامه PermissionController را سفارشی کنید.

به روز رسانی اپلیکیشن ها

برنامه‌های کاربردی روی تصویر سیستم و برنامه‌های از پیش نصب‌شده به‌طور خودکار مجوزهای از قبل اعطا شده نیستند. ما شما را تشویق می کنیم که با توسعه دهندگان برنامه از پیش نصب شده (OEM، شرکت مخابراتی و شخص ثالث) کار کنید تا تغییرات مورد نیاز برنامه را با استفاده از دستورالعمل های برنامه نویس انجام دهید. به طور خاص، باید اطمینان حاصل کنید که برنامه‌های از پیش نصب‌شده برای جلوگیری از خرابی‌ها و سایر مشکلات زمانی که کاربران مجوزها را لغو می‌کنند، اصلاح می‌شوند.

برنامه های از پیش بارگذاری شده

در Android 9 و پایین‌تر، برنامه‌های از پیش بارگذاری‌شده که از مجوزهای خطرناک استفاده می‌کنند باید سطح API 23 یا بالاتر را هدف قرار دهند و مدل مجوز AOSP Android نسخه 6.0 و بالاتر را حفظ کنند. برای مثال، جریان UI در طول نصب برنامه نباید از اجرای AOSP PermissionController منحرف شود. کاربران حتی می توانند مجوزهای خطرناک برنامه های از پیش نصب شده را لغو کنند.

در اندروید 6.0 تا 9، برخی از مجوزها در جریان نصب اعطا می شوند. با این حال، با شروع در 10، جریان نصب (که توسط برنامه Package Installer انجام می‌شود) تابعی مجزا از اعطای مجوزها (در برنامه Permission Controller ) است.

برنامه های کاربردی بدون سر

فقط فعالیت‌ها می‌توانند مجوز درخواست کنند. سرویس‌ها نمی‌توانند مستقیماً مجوز درخواست کنند.

  • در اندروید 5.1 و نسخه‌های قبلی، برنامه‌های هدلس می‌توانند هنگام نصب یا اگر از قبل بدون استفاده از فعالیتی نصب شده باشند، مجوز درخواست کنند.
  • در اندروید 6.0 و بالاتر، برنامه‌های هدلس باید از یکی از روش‌های زیر برای درخواست مجوز استفاده کنند:
    • یک فعالیت برای درخواست مجوز اضافه کنید. (این روش ترجیحی است.)
    • یک UID را با برنامه دیگری که مجوزهای لازم را دارد به اشتراک بگذارید. از این روش فقط زمانی استفاده کنید که به پلتفرم نیاز دارید تا چندین APK را به عنوان یک برنامه واحد مدیریت کنید.

هدف جلوگیری از سردرگمی کاربران با درخواست‌های مجوزی است که خارج از زمینه ظاهر می‌شوند.

سفارشی کردن PackageInstaller UI

در صورت تمایل، می‌توانید با به‌روزرسانی تم‌های پیش‌فرض دستگاه ( Theme.DeviceDefault.Settings و Theme.DeviceDefault.Light.Dialog.NoActionBar ) که توسط PackageInstaller استفاده می‌شود، طرح زمینه Permissions UI را سفارشی کنید. با این حال، از آنجایی که سازگاری برای توسعه دهندگان برنامه بسیار مهم است، نمی توانید مکان، موقعیت و قوانین مربوط به زمانی که رابط کاربری Permissions ظاهر می شود را سفارشی کنید.

برای گنجاندن رشته‌ها برای زبان‌های دیگر، رشته‌ها را به AOSP اضافه کنید.

ایجاد استثنائات

می‌توانید با استفاده از کلاس DefaultPermissionGrantPolicy.java در PackageManager به برنامه‌هایی که کنترل‌کننده یا ارائه‌دهنده پیش‌فرض عملکرد سیستم‌عامل اصلی هستند، مجوز از قبل اعطا کنید. مثال ها:

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

تعریف مجوزهای سفارشی

می‌توانید مجوزها و گروه‌های سفارشی را به‌عنوان عادی یا خطرناک تعریف کنید و مجوزهای OEM/Carrier خاص را به گروه‌های مجوزهای موجود اضافه کنید، درست همانطور که در Android 5.x و نسخه‌های قبلی می‌توانید انجام دهید.

در Android نسخه 6.0 و بالاتر، اگر مجوز خطرناک جدیدی اضافه کنید، باید مانند سایر مجوزهای خطرناک (در زمان اجرای برنامه درخواست شده و توسط کاربران قابل لغو باشد) با آن رفتار شود. به طور مشخص:

  • می‌توانید مجوزهای جدیدی را به گروه فعلی اضافه کنید، اما نمی‌توانید نقشه AOSP مجوزهای خطرناک و گروه‌های مجوز خطرناک را تغییر دهید. (به عبارت دیگر، شما نمی توانید یک مجوز را از یک گروه حذف کنید و به گروه دیگری اختصاص دهید).
  • می‌توانید گروه‌های مجوز جدید را در برنامه‌های نصب شده روی دستگاه اضافه کنید، اما نمی‌توانید گروه‌های مجوز جدید را در مانیفست پلت فرم اضافه کنید.

مجوزهای تست

Android شامل تست‌های Compatibility Test Suite (CTS) است که تأیید می‌کند مجوزهای فردی به گروه‌های صحیح نگاشت شده‌اند. گذراندن این تست ها برای سازگاری CTS اندروید 6.0 و جدیدتر الزامی است.