تغییرات حریم خصوصی در Android 10

Android 10 (سطح میانای برنامه‌سازی کاربردی ۲۹) تعدادی ویژگی و تغییر رفتار را برای محافظت بهتر از حریم خصوصی کاربران معرفی می‌کند. این تغییرات شفافیت و کنترلی را که کاربران بر داده‌های خود و قابلیت‌هایی که به برنامه‌ها می‌دهند دارند گسترش می‌دهد. این ویژگی‌ها ممکن است به این معنی باشد که رفتارها یا داده‌های خاصی که برنامه‌تان به آن‌ها وابسته است ممکن است درمقایسه با نسخه‌های قدیمی‌تر پلاتفرم رفتار متفاوتی داشته باشند. اگر برنامه‌تان از روال‌های مطلوب فعلی برای مدیریت داده‌های کاربر پیروی می‌کند، تأثیرات بر برنامه‌تان باید حداقل باشد.

این صفحه خلاصه‌ای از هر تغییر را فهرست می‌کند.

تغییرات برتر

این بخش شامل تغییرات کلیدی در Android 10 دررابطه‌با حریم خصوصی است.

دسترسی به فضای ذخیره‌سازی خارجی محدود به فایل‌ها و رسانه‌های برنامه

به‌طور پیش‌فرض، به برنامه‌هایی که Android نسخه ۱۰ و بالاتر را هدف قرار می‌دهند، دسترسی محدود به فضای ذخیره‌سازی خارجی یا فضای ذخیره‌سازی محدود داده می‌شود. این برنامه‌ها می‌توانند انواع فایل‌های زیر را در دستگاه فضای ذخیره‌سازی خارجی بدون نیاز به درخواست اجازه‌های کاربر مرتبط با فضای ذخیره‌سازی ببینند:

  • فایل‌های موجود در فهرست راهنمای مختص برنامه، که بااستفاده از getExternalFilesDir() به آن‌ها دسترسی پیدا شده است.
  • عکس‌ها، ویدیوها، و کلیپ‌های صوتی‌ای که برنامه از فضای ذخیره‌سازی رسانه ایجاد کرده است.

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

دسترسی به مکان دستگاه در پس‌زمینه به اجازه نیاز دارد

برای پشتیبانی از کنترل بیشتری که کاربران بر دسترسی برنامه به اطلاعات مکان دارند، Android 10 اجازه ACCESS_BACKGROUND_LOCATION را معرفی می‌کند.

برخلاف اجازه‌های ACCESS_FINE_LOCATION و ACCESS_COARSE_LOCATION ، اجازه ACCESS_BACKGROUND_LOCATION فقط بر دسترسی برنامه به مکان در زمانی که در پس‌زمینه اجرا می‌شود تأثیر می‌گذارد. برنامه درحال دسترسی به مکان در پس‌زمینه درنظر گرفته می‌شود، مگراینکه یکی از شرایط زیر برآورده شود:

  • فعالیتی متعلق به برنامه نمایان است.
  • برنامه درحال اجرای سرویس پیش‌زمینه‌ای است که نوع سرویس پیش‌زمینه‌ای location را اعلام کرده است.

    برای اعلام نوع سرویس پیش‌زمینه‌ای برای سرویسی در برنامه‌تان، targetSdkVersion یا compileSdkVersion برنامه‌تان را روی 29 یا بالاتر تنظیم کنید. درباره اینکه سرویس‌های پیش‌زمینه چگونه می‌توانند کنش‌های شروع‌شده توسط کاربر را که به دسترسی به مکان نیاز دارند ادامه دهند بیشتر بدانید.

اگر برنامه‌تان حصارکشی جغرافیایی ایجاد و نظارت می‌کند و Android 10 (سطح میانای برنامه‌سازی کاربردی ۲۹) یا بالاتر را هدف قرار می‌دهد، باید اجازه ACCESS_BACKGROUND_LOCATION را اعلام کنید.

دسترسی به‌طور خودکار هنگام هدف‌یابی Android 9 یا پایین‌تر اعطا می‌شود

اگر برنامه‌تان در Android نسخه ۱۰ یا بالاتر اجرا می‌شود اما Android نسخه ۹ (سطح میانای برنامه‌سازی کاربردی ۲۸) یا پایین‌تر را هدف قرار می‌دهد، پلاتفرم رفتار زیر را اعمال می‌کند:

  • اگر برنامه‌تان عنصر <uses-permission> را برای ACCESS_FINE_LOCATION یا ACCESS_COARSE_LOCATION اعلام کند، سیستم به‌طور خودکار عنصر <uses-permission> را برای ACCESS_BACKGROUND_LOCATION درطول نصب اضافه می‌کند.
  • اگر برنامه‌تان ACCESS_FINE_LOCATION یا ACCESS_COARSE_LOCATION را درخواست کند، سیستم به‌طور خودکار ACCESS_BACKGROUND_LOCATION را به درخواست اضافه می‌کند.

دسترسی هنگام ارتقای دستگاه به Android 10

اگر کاربری به برنامه شما اجازه دسترسی به مکان دستگاه را بدهد – چه ACCESS_COARSE_LOCATION یا ACCESS_FINE_LOCATION – سپس دستگاهش را از Android 9 به Android 10 ارتقا دهد، سیستم به‌طور خودکار مجموعه اجازه‌های مبتنی بر مکان اعطاشده به برنامه شما را به‌روز می‌کند. مجموعه اجازه‌هایی که برنامه شما پس‌از ارتقا دریافت می‌کند به نسخه SDK هدف و اجازه‌های تعریف‌شده آن بستگی دارد، همان‌طور که در جدول زیر نشان داده شده است:

جدول ۱. تغییرات در وضعیت اجازه مکان پس‌از ارتقای دستگاه به Android 10

نسخه پلاتفرم هدف اجازه
حدودی یا دقیق اعطا شده است؟
اجازه پس‌زمینه
در مانیفست تعریف شده است؟
وضعیت اجازه پیش‌فرض به‌روز شد
Android 10 بله بله دسترسی پیش‌زمینه‌ای و پس‌زمینه‌ای
Android 10 بله نه فقط دسترسی پیش‌زمینه‌ای
Android 10 نه (سیستم نادیده گرفته است) دسترسی ندارد
‫Android 9 یا پایین‌تر بله هنگام ارتقای دستگاه، به‌طور خودکار توسط سیستم اضافه شده است دسترسی پیش‌زمینه‌ای و پس‌زمینه‌ای
‫Android 9 یا پایین‌تر نه (سیستم نادیده گرفته است) دسترسی ندارد

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

دسترسی هنگام به‌روزرسانی سطح میانای برنامه‌سازی کاربردی هدف در دستگاه‌های Android 10 لغو شد

موردی را درنظر بگیرید که برنامه‌تان ازقبل در دستگاهی که Android 10 را اجرا می‌کند نصب شده است. اگر در این شرایط برنامه‌تان را برای هدف قرار دادن Android 10 به‌روز کنید، دستگاه اجازه ACCESS_BACKGROUND_LOCATION را لغو می‌کند.

برای کسب اطلاعات بیشتر درباره نحوه بازیابی مکان دستگاه درحالی‌که برنامه‌تان در پس‌زمینه است، راهنمای دریافت به‌روزرسانی‌های دوره‌ای مکان را ببینید.

محدودیت‌های اعمال‌شده بر فعالیت‌های آغازین در پس‌زمینه

از Android 10، سیستم محدودیت‌هایی برای شروع فعالیت‌ها از پس‌زمینه اعمال می‌کند. این تغییر رفتار به حداقل رساندن وقفه‌ها برای کاربر کمک می‌کند و به کاربر امکان می‌دهد کنترل بیشتری بر آنچه در صفحه‌نمایش نشان داده می‌شود داشته باشد. تا زمانی که برنامه‌تان فعالیت‌ها را به‌عنوان نتیجه مستقیم تعامل کاربر شروع می‌کند، احتمالاً تحت تأثیر این محدودیت‌ها قرار نمی‌گیرد.

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

شناسه‌ها و داده‌ها

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

برداشتن قرابت مخاطبین

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

راهنمای مربوط به ContactsProvider حاوی اعلانی است که فیلدها و روش‌های خاصی را که در همه دستگاه‌ها از Android 10 به بعد منسوخ شده‌اند شرح می‌دهد.

تصادفی‌سازی مک آدرس

در دستگاه‌هایی که Android نسخه ۱۰ یا بالاتر دارند، سیستم به‌طور پیش‌فرض مک آدرس‌های تصادفی ارسال می‌کند.

اگر برنامه شما مورد استفاده سازمانی را مدیریت می‌کند، پلاتفرم میاناهای برنامه‌سازی کاربردی را برای چندین عملیات مرتبط با نشانی‌های MAC ارائه می‌دهد:

  • دریافت مک آدرس تصادفی: برنامه‌های مالک دستگاه و برنامه‌های مالک نمایه می‌توانند مک آدرس تصادفی اختصاص‌داده‌شده به شبکه خاصی را با فراخوانی getRandomizedMacAddress() بازیابی کنند.
  • دریافت مک آدرس واقعی کارخانه: برنامه‌های مالک دستگاه می‌توانند مک آدرس سخت‌افزار واقعی دستگاه را با فراخوانی getWifiMacAddress() بازیابی کنند. این روش برای ردیابی ناوگان دستگاه‌ها مفید است.

محدودیت دسترسی به سیستم فایل proc /net/

در دستگاه‌هایی که Android نسخه ۱۰ یا بالاتر را اجرا می‌کنند، برنامه‌ها نمی‌توانند به /proc/net دسترسی داشته باشند که شامل اطلاعاتی درباره وضعیت شبکه دستگاه است. برنامه‌هایی که به این اطلاعات نیاز دارند، مثل VPN، باید از کلاس NetworkStatsManager یا ConnectivityManager استفاده کنند.

محدودیت در شناسه‌های دستگاه بازنشانی‌نشدنی

از Android نسخه ۱۰ به بعد، برنامه‌ها باید READ_PRIVILEGED_PHONE_STATE اجازه ممتاز داشته باشند تا بتوانند به شناسه‌های بازنشانی‌نشدنی دستگاه، که شامل IMEI و شماره سریال می‌شود، دسترسی پیدا کنند.

روش‌های تحت‌تأثیر شامل موارد زیر می‌شود:

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

  • اگر برنامه شما Android 10 یا بالاتر را هدف قرار دهد، SecurityException رخ می‌دهد.
  • اگر برنامه شما Android 9 (سطح میانای برنامه‌سازی کاربردی ۲۸) یا پایین‌تر را هدف قرار دهد، درصورتی‌که برنامه اجازه READ_PHONE_STATE را داشته باشد، این روش null یا داده‌های جای‌بان را برمی‌گرداند. درغیراین‌صورت، SecurityException رخ می‌دهد.

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

دسترسی محدود به داده‌های بریده‌دان

مگر اینکه برنامه شما ویرایشگر روش ورودی (IME) پیش‌فرض باشد یا برنامه‌ای باشد که درحال‌حاضر در کانون توجه است، برنامه شما نمی‌تواند به داده‌های بریده‌دان در Android نسخه ۱۰ یا بالاتر دسترسی داشته باشد.

محافظت از شماره سریال دستگاه USB

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

برای کسب اطلاعات بیشتر درباره کار با دستگاه‌های USB، راهنمای نحوه پیکربندی میزبان‌های USB را ببینید.

دوربین و اتصال‌پذیری

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

محدودیت دسترسی به جزئیات و فراداده‌های دوربین

Android 10 گستره اطلاعاتی را که روش getCameraCharacteristics() به‌طور پیش‌فرض برمی‌گرداند تغییر می‌دهد. به‌ویژه، برنامه‌تان باید اجازه CAMERA را داشته باشد تا بتواند به فراداده‌های بالقوه مختص دستگاه که در مقدار برگشتی این روش گنجانده شده است دسترسی پیدا کند.

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

محدودیت در فعال و غیرفعال کردن Wi-Fi

برنامه‌هایی که Android نسخه ۱۰ یا بالاتر را هدف قرار می‌دهند نمی‌توانند Wi-Fi را فعال یا غیرفعال کنند. روش WifiManager.setWifiEnabled() همیشه false را برمی‌گرداند.

اگر لازم است از کاربران بخواهید Wi-Fi را فعال و غیرفعال کنند، از پانل تنظیمات استفاده کنید.

محدودیت‌های دسترسی مستقیم به شبکه‌های Wi-Fi پیکربندی‌شده

برای محافظت از حریم خصوصی کاربر، پیکربندی دستی فهرست شبکه‌های Wi-Fi به برنامه‌های سیستم و کنترل‌کننده‌های خط‌مشی دستگاه (DPC) محدود شده است. یک DPC معین می‌تواند مالک دستگاه یا مالک نمایه باشد.

اگر برنامه شما Android 10 یا بالاتر را هدف قرار می‌دهد و برنامه سیستم یا DPC نیست، روش‌های زیر داده‌های مفیدی را برنمی‌گردانند:

  • روش getConfiguredNetworks() همیشه فهرست خالی برمی‌گرداند.

  • هر روش عملیات شبکه که مقدار عدد صحیح برمی‌گرداند—addNetwork() و updateNetwork()—همیشه ‎-۱ برمی‌گرداند.

  • هر عملیات شبکه که مقدار بولی برمی‌گرداند—removeNetwork()، reassociate()، enableNetwork()، disableNetwork()، reconnect()، و disconnect()—همیشه false را برمی‌گرداند.

اگر برنامه‌تان باید به شبکه‌های Wi-Fi متصل شود، از روش‌های جایگزین زیر استفاده کنید:

  • برای راه‌اندازی اتصال محلی فوری به شبکه Wi-Fi، از WifiNetworkSpecifier در شیء استاندارد NetworkRequest استفاده کنید.
  • برای افزودن شبکه‌های Wi-Fi جهت درنظر گرفتن برای ارائه دسترسی به اینترنت به کاربر، با اشیاء WifiNetworkSuggestion کار کنید. می‌توانید شبکه‌هایی را که در کادر گفتگوی انتخاب شبکه اتصال خودکار نشان داده می‌شوند با فراخوانی addNetworkSuggestions() و removeNetworkSuggestions() به‌ترتیب اضافه و حذف کنید. این روش‌ها به هیچ اجازه مکانی نیاز ندارند.

برخی‌از میاناهای برنامه‌سازی کاربردی تلفن، بلوتوث، و Wi-Fi به اجازه مکان دقیق نیاز دارند

اگر برنامه شما Android نسخه ۱۰ یا بالاتر را هدف قرار می‌دهد، باید اجازه ACCESS_FINE_LOCATION را داشته باشد تا بتواند از چندین روش در Wi-Fi،‏ Wi-Fi Aware، یا Bluetooth API استفاده کند. بخش‌های زیر کلاس‌ها و روش‌های تحت‌تأثیر قرارگرفته را فهرست می‌کند.

تلفن

Wi-Fi

بلوتوث

اجازه‌ها

این بخش به‌روزرسانی‌های مدل اجازه‌های Android را شرح می‌دهد.

دسترسی محدود به محتوای صفحه‌نمایش

برای محافظت از محتوای صفحه‌نمایش کاربران، Android 10 با تغییر دادن دامنه اجازه‌های READ_FRAME_BUFFER، CAPTURE_VIDEO_OUTPUT، و CAPTURE_SECURE_VIDEO_OUTPUT از دسترسی بی‌صدا به محتوای صفحه‌نمایش دستگاه جلوگیری می‌کند. از Android 10، این اجازه‌ها فقط دسترسی امضا هستند.

برنامه‌هایی که نیاز به دسترسی به محتوای صفحه‌نمایش دستگاه دارند باید از MediaProjection API استفاده کنند که پیام‌واره‌ای را نمایش می‌دهد و از کاربر می‌خواهد رضایت خود را اعلام کند.

بررسی اجازه سَمت کاربر در برنامه‌های قدیمی

اگر برنامه شما Android نسخه ۵.۱ (سطح میانای برنامه‌سازی کاربردی ۲۲) یا پایین‌تر را هدف قرار می‌دهد، وقتی کاربران برای اولین‌بار از برنامه شما در دستگاهی با Android نسخه ۱۰ یا بالاتر استفاده می‌کنند، صفحه اجازه‌ها را می‌بینند (همان‌طور که در شکل ۱ نشان داده شده است). این صفحه به کاربران فرصت می‌دهد دسترسی به اجازه‌هایی را که سیستم قبلاً در زمان نصب به برنامه شما اعطا کرده است لغو کنند.

ضبط صفحه‌نمایش از کادر گفتگو
شکل ۱. کادر گفتگوی سَمت کاربر که امکان مرور اجازه‌های قدیمی را فراهم می‌کند

تشخیص فعالیت بدنی

Android 10 اجازه زمان اجرای android.permission.ACTIVITY_RECOGNITION را برای برنامه‌هایی معرفی می‌کند که باید تعداد قدم‌های کاربر را تشخیص دهند یا فعالیت فیزیکی کاربر را طبقه‌بندی کنند، مانند پیاده‌روی، دوچرخه‌سواری، یا حرکت در خودرو. این ویژگی برای این طراحی شده است که کاربران بتوانند ببینند داده‌های حسگر دستگاه چگونه در «تنظیمات» استفاده می‌شود.

برخی‌از کتابخانه‌های موجود در خدمات Google Play، مثل Activity Recognition API و Google Fit API، نتایج را ارائه نمی‌دهند مگراینکه کاربر این اجازه را به برنامه شما اعطا کرده باشد.

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

اگر برنامه شما Android 9 (سطح میانای برنامه‌سازی کاربردی ۲۸) یا پایین‌تر را هدف قرار می‌دهد، سیستم به‌طور خودکار اجازه android.permission.ACTIVITY_RECOGNITION را درصورت نیاز به برنامه شما اعطا می‌کند، اگر برنامه شما هریک از شرایط زیر را برآورده کند:

  • فایل مانیفست حاوی اجازه com.google.android.gms.permission.ACTIVITY_RECOGNITION است.
  • فایل مانیفست فاقد اجازه android.permission.ACTIVITY_RECOGNITION است.

اگر سیستم به‌طور خودکار اجازه android.permission.ACTIVITY_RECOGNITION را اعطا کند، برنامه‌تان پس‌از به‌روزرسانی برنامه برای هدف‌یابی Android 10، این اجازه را حفظ می‌کند. بااین‌حال، کاربر می‌تواند این اجازه را در هرزمانی در تنظیمات سیستم لغو کند.

گروه‌های اجازه از واسط کاربر برداشته شد

از Android نسخه ۱۰، برنامه‌ها نمی‌توانند نحوه گروه‌بندی اجازه‌ها را در واسط کاربر جستجو کنند.