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

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

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

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

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

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

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

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

قابلیت مشاهده گفتگوی مجوز

با شروع اندروید 11، اگر کاربر بیش از یک بار در طول نصب برنامه شما در دستگاهی، برای یک مجوز خاص روی رد کردن ضربه بزند، اگر برنامه شما دوباره آن مجوز را درخواست کند، کاربر گفتگوی مجوزهای سیستم را نمی‌بیند. عملکرد کاربر به معنای "دوباره نپرس" است. در نسخه‌های قبلی، هر بار که برنامه شما درخواست مجوز می‌کرد، کاربران کادر گفتگوی مجوزهای سیستم را می‌بینند، مگر اینکه کاربر قبلاً کادر یا گزینه «دوباره سؤال نشود» را انتخاب کرده باشد. این تغییر رفتار در اندروید 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، از صفحه مرجع API مجوزها دیدن کنید.

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

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

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 11، اهداف ACTION_MANAGE_OVERLAY_PERMISSION همیشه کاربر را به صفحه تنظیمات سطح بالا می‌برد، جایی که کاربر می‌تواند مجوزهای SYSTEM_ALERT_WINDOW را برای برنامه‌ها اعطا یا لغو کند. هر package: داده های موجود در intent نادیده گرفته می شود.

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

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

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

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

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

  1. اعلامیه READ_PHONE_STATE خود را تغییر دهید تا برنامه شما فقط در Android 10 (سطح API 29) و پایین تر از مجوز استفاده کند.
  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، مطالب زیر را مشاهده کنید:

ویدیوها

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