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

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

مجوزهای یک‌بار مصرف

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

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

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

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

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

قابلیت مشاهده‌ی پنجره‌ی مجوزها

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

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

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 علامت‌گذاری می‌شوند. مجوزهایی که با دو بار انتخاب Deny به طور دائم رد شده‌اند، با USER_FIXED علامت‌گذاری می‌شوند.

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

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

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

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

تغییرات پنجره هشدار سیستم

اندروید ۱۱ تغییرات متعددی در نحوه‌ی اعطای مجوز 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 همیشه کاربر را به صفحه مجوزهای سیستم هدایت می‌کنند.

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

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

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

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

اگر برنامه شما برای اندروید ۱۱ یا بالاتر منتشر شده است و نیاز به دسترسی به APIهای شماره تلفن نشان داده شده در لیست زیر دارد، باید به جای مجوز READ_PHONE_STATE ، مجوز READ_PHONE_NUMBERS را درخواست کنید.

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

  1. اعلان READ_PHONE_STATE خود را تغییر دهید تا برنامه شما فقط از این مجوز در اندروید ۱۰ (سطح 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>

منابع اضافی

برای اطلاعات بیشتر در مورد تغییرات مجوزها در اندروید ۱۱، مطالب زیر را مشاهده کنید:

ویدیوها

توسعه با آخرین تغییرات حریم خصوصی در اندروید ۱۱