به‌روزرسانی‌های اجازه‌ها در Android 11

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

اجازه دسترسی یک‌باره

از Android نسخه ۱۱ به بعد، هروقت برنامه‌تان اجازه‌ای مربوط به مکان، میکروفون، یا دوربین درخواست کند، کادر گفتگوی اجازه‌های سَمت کاربر حاوی گزینه‌ای به‌نام فقط این‌بار است. اگر کاربر این گزینه را در کادر گفتگو انتخاب کند، به برنامه شما اجازه دسترسی یک‌باره موقت اعطا می‌شود.

درباره نحوه مدیریت اجازه‌های دسترسی یک‌باره توسط سیستم بیشتر بدانید.

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

اگر برنامه شما Android 11 یا بالاتر را هدف قرار دهد و برای چند ماه استفاده نشود، سیستم با بازنشانی خودکار اجازه‌های حساس زمان اجرا که کاربر به برنامه شما اعطا کرده است، از داده‌های کاربر محافظت می‌کند. این اقدام همان تأثیری را دارد که کاربر اجازه‌ای را در تنظیمات سیستم مشاهده کند و سطح دسترسی برنامه شما را به رد کردن تغییر دهد. اگر برنامه‌تان از روال‌های مطلوب برای درخواست اجازه‌ها در زمان اجرا پیروی می‌کند، نباید هیچ تغییری در برنامه‌تان ایجاد کنید. دلیلش این است که وقتی کاربر با ویژگی‌های برنامه‌تان تعامل برقرار می‌کند، باید درستی‌سنجی کنید که ویژگی‌ها اجازه‌های لازم را داشته باشند.

درباره نحوه بازنشانی خودکار اجازه‌های برنامه‌های استفاده‌نشده توسط سیستم بیشتر بدانید.

رؤیت‌پذیری کادر گفتگوی اجازه

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

برای شناسایی اینکه آیا اجازه‌های برنامه‌ای برای همیشه رد شده است (برای اهداف اشکال‌زدایی و آزمایش)، از فرمان زیر استفاده کنید:

adb shell dumpsys package PACKAGE_NAME

که PACKAGE_NAME نام بسته‌ای است که باید بازرسی شود.

برونداد فرمان حاوی بخش‌هایی است که شبیه این است:

...
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]
...

اجازه‌هایی که یک‌بار توسط کاربر رد شده‌اند با USER_SET پرچم‌گذاری می‌شوند. اجازه‌هایی که با دو بار انتخاب کردن رد کردن برای همیشه رد شده‌اند با USER_FIXED پرچم‌گذاری می‌شوند.

درطول آزمایش ممکن است بخواهید این پرچم‌ها را بازنشانی کنید تا مطمئن شوید آزمایش‌کنندگان وقتی کادر گفتگوی درخواست نشان داده نمی‌شود غافلگیر نشوند. برای انجام این کار، از این فرمان استفاده کنید:

adb shell pm clear-permission-flags PACKAGE_NAME PERMISSION_NAME user-set user-fixed

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

درباره نحوه مدیریت کردن رد شدن اجازه در برنامه‌تان بیشتر بدانید.

تغییرات پنجره اعلام خطر سیستم

Android 11 تغییرات متعددی در نحوه اعطای اجازه SYSTEM_ALERT_WINDOW به برنامه‌ها ایجاد می‌کند. هدف از این تغییرات محافظت از کاربران ازطریق اعطای آگاهانه‌تر اجازه‌ها است.

برخی‌از برنامه‌ها به‌طور خودکار پس‌از درخواست، اجازه SYSTEM_ALERT_WINDOW را دریافت می‌کنند

به برخی‌از کلاس‌های برنامه‌ها به‌طور خودکار پس‌از درخواست، اجازه SYSTEM_ALERT_WINDOW اعطا می‌شود:

  • هر برنامه‌ای که ROLE_CALL_SCREENING داشته باشد و SYSTEM_ALERT_WINDOW را درخواست کند، به‌طور خودکار این اجازه را دریافت می‌کند. اگر برنامه ROLE_CALL_SCREENING را ازدست بدهد، اجازه را ازدست می‌دهد.

  • هر برنامه‌ای که صفحه‌نمایش را ازطریق MediaProjection ضبط می‌کند و درخواست SYSTEM_ALERT_WINDOW می‌کند، به‌طور خودکار این اجازه را دریافت می‌کند مگر اینکه کاربر صریحاً این اجازه را برای برنامه رد کرده باشد. وقتی برنامه ضبط صفحه‌نمایش را متوقف می‌کند، این اجازه را ازدست می‌دهد. این مورد استفاده در درجه اول برای برنامه‌های جاری‌سازی زنده بازی درنظر گرفته شده است.

این برنامه‌ها برای دریافت اجازه SYSTEM_ALERT_WINDOW نیازی به ارسال ACTION_MANAGE_OVERLAY_PERMISSION ندارند؛ برنامه‌ها می‌توانند به‌سادگی SYSTEM_ALERT_WINDOW را مستقیماً درخواست کنند.

هدف‌های MANAGE_OVERLAY_PERMISSION همیشه کاربر را به صفحه اجازه‌های سیستم می‌برد

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

در نسخه‌های قبلی Android، هدف ACTION_MANAGE_OVERLAY_PERMISSION می‌توانست بسته‌ای را مشخص کند که کاربر را به صفحه‌نمایش مختص برنامه برای مدیریت اجازه هدایت می‌کرد. این عملکرد از Android 11 به بعد پشتیبانی نمی‌شود. درعوض، کاربر باید ابتدا برنامه‌ای را که می‌خواهد اجازه را به آن اعطا یا از آن لغو کند انتخاب کند. هدف از این تغییر محافظت از کاربران با هدفمندتر کردن اعطای اجازه است.

شماره‌های تلفن

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

اگر برنامه شما Android 11 یا بالاتر را هدف قرار می‌دهد و نیاز به دسترسی به میاناهای برنامه‌سازی کاربردی شماره تلفن نشان‌داده‌شده در فهرست زیر دارد، باید اجازه READ_PHONE_NUMBERS را به‌جای اجازه READ_PHONE_STATE درخواست کنید.

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

  1. اظهارنامه READ_PHONE_STATE را تغییر دهید تا برنامه‌تان فقط در Android 10 (سطح API ‏۲۹) و پایین‌تر از این اجازه استفاده کند.
  2. اجازه READ_PHONE_NUMBERS را اضافه کنید.

تکه‌کد اعلام مانیفست زیر این فرایند را نشان می‌دهد:

<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>

منابع بیشتر

برای اطلاعات بیشتر درباره تغییرات اجازه‌ها در Android 11، مطالب زیر را مشاهده کنید:

ویدیوها

توسعه با جدیدترین تغییرات حریم خصوصی در Android 11