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

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

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

تغییرات برتر

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

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

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

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

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

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

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

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

اگر برنامه شما geofences ایجاد و نظارت می کند و Android 10 (سطح API 29) یا بالاتر را هدف قرار می دهد، باید مجوز ACCESS_BACKGROUND_LOCATION را اعلام کنید.

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

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

  • اگر برنامه شما عنصر <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 هدف و مجوزهای تعریف شده آن بستگی دارد، همانطور که در جدول زیر نشان داده شده است:

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

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

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

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

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

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

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

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

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

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

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

حذف وابستگی مخاطبین

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

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

تصادفی سازی آدرس MAC

در دستگاه‌هایی که اندروید 10 یا بالاتر را اجرا می‌کنند، سیستم به‌طور پیش‌فرض آدرس‌های MAC را به‌صورت تصادفی ارسال می‌کند.

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

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

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

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

محدودیت در شناسه‌های دستگاه غیر قابل تنظیم مجدد

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

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

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

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

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

دسترسی محدود به داده های کلیپ بورد

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

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

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

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

دوربین و قابلیت اتصال

در این بخش تغییرات مختص متادیتا دوربین و APIهای اتصال فهرست می شود.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

برخی از APIهای تلفن، بلوتوث، وای فای به مجوز مکان FINE نیاز دارند

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

تلفن

وای فای

بلوتوث

مجوزها

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

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

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

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

بررسی مجوزهای کاربر در برنامه های قدیمی

اگر برنامه شما Android 5.1 (سطح API 22) یا پایین‌تر را هدف قرار می‌دهد، کاربران هنگام استفاده از برنامه شما در دستگاهی که برای اولین بار دارای Android 10 یا بالاتر است، صفحه مجوزها را مشاهده می‌کنند، همانطور که در شکل 1 نشان داده شده است. این صفحه به کاربران این فرصت را می‌دهد تا دسترسی به مجوزهایی را که سیستم قبلاً در زمان نصب به برنامه شما داده بود لغو کنید.

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

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

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

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

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

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

  • فایل مانیفست شامل مجوز com.google.android.gms.permission.ACTIVITY_RECOGNITION است.
  • فایل مانیفست شامل مجوز android.permission.ACTIVITY_RECOGNITION نیست .

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

گروه‌های مجوز از رابط کاربری حذف شدند

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