شناسه‌های دستگاه غیرقابل تغییر

در 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 تصادفی مراجعه کنید.

Screen shows if device ID uses a randomized MAC address for privacy
شکل 1. آدرس MAC به صورت تصادفی در زیر Privacy در جزئیات شبکه نشان داده شده است

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

برنامه‌هایی که APIهای شناسه دستگاه را فراخوانی می‌کنند باید الزامات Android 10 را برآورده کنند. در غیر این صورت، هنگامی که آنها سعی می کنند به شناسه های دستگاه دسترسی پیدا کنند، موارد زیر برگردانده می شود:

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

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

آزمایش کردن

برنامه‌ها باید از دسترسی به شماره سریال دستگاه و در صورت لزوم به IMEI/MEID، شماره سریال سیم‌کارت و شناسه مشترک جلوگیری کنند. برنامه‌هایی که مجوز دسترسی به این شناسه‌ها را دارند نیز باید یکی از معیارهای فهرست شده در زیر چه کسی می‌تواند به شناسه‌های دستگاه دسترسی داشته باشد، داشته باشد.