در Android 6 و بالاتر، ارائه دهندگان خدمات Wi-Fi و تحلیلگرهای بسته از بازیابی آدرس MAC کارخانه دستگاه از طریق پشته Wi-Fi از درخواست های شبکه محدود شده اند. با شروع Android 10، محدودیتهای اضافی اعمال میشود که دسترسی به شناسههای دستگاه (ID) را به برنامههایی با سطح مجوز ممتاز محدود میکند. این از شناسه های دستگاه مانند
- شماره تلفن IMEI، MEID، ESN و IMSI.
- شماره سریال ساخت، سیم کارت یا USB.
چه کسی می تواند به شناسه دستگاه دسترسی داشته باشد
شناسههای دستگاه در همه دستگاههای Android 10 محدود شده است، حتی اگر برنامهها Android 9 یا پایینتر را هدف قرار دهند. به شناسههای دستگاه میتوان با موارد زیر دسترسی داشت:
- برنامه پیش فرض پیامک.
- برنامههایی با مجوز
READ_PRIVILEGED_PHONE_STATE
در کلاسManifest.permission
و لیست مجاز در فایلprivapp-permission.xml
. اینها همچنین باید در فهرستpriv-app
بارگذاری شوند. - برنامههای دارای امتیازات اپراتور همانطور که در امتیازات حامل UICC تعریف شده است.
- مالک دستگاه یا مالک نمایه با مجوز
READ_PHONE_STATE
که در کلاسManifest.permission
اعطا شده است. (فهرست مجاز الزامی نیست.)
دسترسی به بسته های ممتاز
یک بسته برای دسترسی به شناسه های دستگاه باید دارای امتیاز باشد. باید مجوز READ_PRIVILEGED_PHONE_STATE
در کلاس Manifest.permission
داشته باشد و در فایل privapp-permission.xml
در لیست مجاز باشد. برای اطلاعات در مورد فرآیند لیست مجاز، به فهرست مجاز مجوزهای ممتاز مراجعه کنید.
برای کسب اطلاعات در مورد دریافت شناسه منحصر به فرد برای یک بسته غیرمجاز ، به موارد استفاده رایج و شناسه مناسب برای استفاده مراجعه کنید.
شناسههای دستگاه محدود و آدرسهای MAC تصادفیشده
برای محدود کردن بیشتر شناسههای دستگاه، همه دستگاههای Android 10 بهطور پیشفرض آدرسهای MAC تصادفیشده را برای هر دو درخواست و درخواستهای مرتبط ارسال میکنند و باید یک آدرس MAC تصادفی متفاوت برای هر SSID داشته باشند. از آدرس MAC کارخانه دستگاه در حالت سرویس گیرنده، نقطه دسترسی نرم (AP) یا موارد استفاده از Wi-Fi Direct استفاده نکنید. باید از APIهای قابل دسترسی عمومی که برنامههای ممتاز نیستند، پنهان بماند. برنامههای ممتازی که نیاز به بازگرداندن آدرس MAC کارخانه دارند، باید مجوز LOCAL_MAC_ADDRESS
داشته باشند.
کاربران این گزینه را دارند که آدرس MAC تصادفی پیش فرض را که به هر SSID اختصاص داده شده است، نگه دارند. این گزینه در قسمت Privacy در تنظیمات > جزئیات شبکه قابل مشاهده است. برای کسب اطلاعات در مورد به دست آوردن یک آدرس MAC تصادفی به آدرس های MAC تصادفی مراجعه کنید.
شکل 1. آدرس MAC به صورت تصادفی در زیر Privacy در جزئیات شبکه نشان داده شده است.
برنامههایی که APIهای شناسه دستگاه را فراخوانی میکنند
برنامههایی که APIهای شناسه دستگاه را فراخوانی میکنند باید الزامات Android 10 را برآورده کنند. در غیر این صورت، هنگامی که آنها سعی می کنند به شناسه های دستگاه دسترسی پیدا کنند، موارد زیر برگردانده می شود:
- برنامه هایی که اندروید 10 را هدف قرار می دهند
-
SecurityException
از APIهای شناسه دستگاه پرتاب می شود. - برنامه هایی که اندروید 9 یا نسخه های قبلی را هدف قرار می دهند
- اگر مجوز
READ_PHONE_STATE
را داشته باشند، یک پاسخnull
یا داده های مکان نگهدار برگردانده می شود. - اگر این کار را انجام ندهند، APIهای شناسه دستگاه،
SecurityException
را پرتاب میکنند که حاوی نام روش فراخوانی شده است، و نشان میدهد که برنامه تماسگیرنده شرایط لازم برای دسترسی به شناسه درخواستی را برآورده نمیکند.
برای اطلاعات بیشتر در مورد شناسههای دستگاه غیرقابل تغییر، به شناسههای دستگاه غیرقابل تنظیم و بهترین روشها برای شناسههای منحصربهفرد مراجعه کنید.
آزمایش کردن
برنامهها باید از دسترسی به شماره سریال دستگاه و در صورت لزوم به IMEI یا MEID، شماره سریال سیمکارت و شناسه مشترک جلوگیری کنند. برنامههایی که مجوز دسترسی به این شناسهها را دارند نیز باید یکی از معیارهای فهرست شده در زیر چه کسی میتواند به شناسههای دستگاه دسترسی داشته باشد، داشته باشد.