החל מ-27 במרץ 2025, מומלץ להשתמש ב-android-latest-release
במקום ב-aosp-main
כדי ליצור תרומות ל-AOSP. מידע נוסף זמין במאמר שינויים ב-AOSP.
מזהי מכשירים קבועים
קל לארגן דפים בעזרת אוספים
אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.
ב-Android 6 ואילך, ספקיות שירותי Wi-Fi ומנתחי חבילות הוגבלו ביכולת לאחזר את כתובת ה-MAC המקורית של המכשיר דרך סטאק ה-Wi-Fi מבקשות רשת. החל מ-Android 10, יש הגבלות נוספות שמגבילות את הגישה למזהי המכשיר (מזהים) לאפליקציות עם רמת ההרשאה
המוענקת. כך מוגנים מזהי מכשירים כמו
- מספרי IMEI, MEID, ESN ו-IMSI של טלפוניה.
- מספרי build, SIM או USB.
למי יש גישה למזהי המכשירים
מזהי המכשירים מוגבלים בכל מכשירי Android מגרסה 10, גם אם האפליקציות מטרגטות Android מגרסה 9 ומטה. מי יכול לגשת למזהי המכשירים:
גישה לחבילות עם הרשאות
לחבילה צריכה להיות הרשאה לגשת למזהי המכשירים. צריכה להיות לו הרשאת
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.
האפשרות מוצגת בקטע פרטיות בקטע הגדרות > פרטי הרשת. מידע נוסף על קבלת כתובת MAC אקראית זמין במאמר
כתובות MAC אקראיות.
איור 1. כתובת ה-MAC מוצגת ככתובת אקראית בקטע 'פרטיות' שב'פרטי הרשת'.
אפליקציות שמפעילות ממשקי API של מזהי מכשירים
אפליקציות שמפעילות ממשקי API של מזהי מכשירים חייבות לעמוד בדרישות של Android 10. אחרת, כשהם מנסים לגשת למזהי המכשירים, מוחזר הערך הבא:
- אפליקציות שמטרגטות את Android 10
- אפליקציות שמטרגטות את Android מגרסה 9 ואילך
- אם יש להם את ההרשאה
READ_PHONE_STATE
, תוחזר תשובה מסוג null
או נתוני placeholder.
- אם לא, ממשקי ה-API של מזהי המכשיר יפיקו את השגיאה
SecurityException
שמכילה את שם השיטה שהתבצעה, וגם אינדיקציה לכך שהאפליקציה הקריאה לא עומדת בדרישות לגישה למזהה המבוקש.
מידע נוסף על מזהי מכשירים שלא ניתנים לשינוי זמין במאמרים מזהי מכשירים שלא ניתנים לאיפוס ושיטות מומלצות לשימוש במזהים ייחודיים.
בדיקה
חובה למנוע מאפליקציות לגשת למספר הסידורי של המכשיר, ובמקרים הרלוונטיים, למספר ה-IMEI או ה-MEID, למספר הסידורי של ה-SIM ולמזהה המנוי. אפליקציות עם הרשאה לגשת למזהים האלה צריכות גם לעמוד באחד מהקריטריונים שמפורטים בקטע מי יכול לגשת למזהי המכשיר.
דוגמאות התוכן והקוד שבדף הזה כפופות לרישיונות המפורטים בקטע רישיון לתוכן. Java ו-OpenJDK הם סימנים מסחריים או סימנים מסחריים רשומים של חברת Oracle ו/או של השותפים העצמאיים שלה.
עדכון אחרון: 2025-07-27 (שעון UTC).
[[["התוכן קל להבנה","easyToUnderstand","thumb-up"],["התוכן עזר לי לפתור בעיה","solvedMyProblem","thumb-up"],["סיבה אחרת","otherUp","thumb-up"]],[["חסרים לי מידע או פרטים","missingTheInformationINeed","thumb-down"],["התוכן מורכב מדי או עם יותר מדי שלבים","tooComplicatedTooManySteps","thumb-down"],["התוכן לא עדכני","outOfDate","thumb-down"],["בעיה בתרגום","translationIssue","thumb-down"],["בעיה בדוגמאות/בקוד","samplesCodeIssue","thumb-down"],["סיבה אחרת","otherDown","thumb-down"]],["עדכון אחרון: 2025-07-27 (שעון UTC)."],[],[],null,["# Immutable device IDs\n\nIn Android 6 and higher, Wi-Fi service providers and packet analyzers have\nbeen restricted from retrieving a device's factory MAC address through the\nWi-Fi stack from network requests. Starting in Android 10, additional restrictions are in place that limit access to device\nidentifiers (IDs) to apps with the [privileged](/docs/core/permissions/perms-allowlist)[permission\nlevel](https://developer.android.com/reference/android/R.attr.html#protectionLevel). This protects device IDs such as\n\n- telephony IMEI, MEID, ESN, and IMSI numbers.\n- build, SIM, or USB serial numbers.\n\n### Who can access device IDs\n\nDevice IDs are restricted on all Android 10\ndevices, even if apps target Android 9 or lower. Device IDs can be accessed by:\n\n- The default SMS app.\n- Apps with both [READ_PRIVILEGED_PHONE_STATE](/docs/core/permissions/perms-allowlist#customizing-allowlists) permission in the `\n `[Manifest.permission](https://developer.android.com/reference/android/Manifest.permission) class, and allowlisting in the `privapp-permission.xml` file. These must also be loaded in the `priv-app` directory.\n- Apps with carrier privileges as defined in [UICC Carrier\n Privileges](/docs/core/connect/uicc).\n- A device owner or profile owner with [READ_PHONE_STATE](https://developer.android.com/reference/android/Manifest.permission.html#READ_PHONE_STATE) permission granted in the [Manifest.permission](https://developer.android.com/reference/android/Manifest.permission) class. (Allowlisting isn't required.)\n\n#### Privileged packages access\n\nA package must be privileged to access device IDs. It must have\n[READ_PRIVILEGED_PHONE_STATE](/docs/core/permissions/perms-allowlist#customizing-allowlists) permission in the\n`Manifest.permission` class, and be allowlisted in the\n`privapp-permission.xml` file. For information on the allowlist\nprocess, see [Privileged\nPermission Allowlisting](/docs/core/permissions/perms-allowlist).\n\nFor information on getting a unique ID for a *nonprivileged* package,\nrefer to [Common use cases and the appropriate identifier to use](https://developer.android.com/training/articles/user-data-ids#common-use-cases).\n\n#### Restricted device IDs and randomized MAC addresses\n\nTo further restrict device IDs, all devices on Android 10 transmit randomized MAC addresses by default for both\nprobe and associated requests, and must have a different randomized MAC address\nfor each SSID. Don't use the device factory MAC address in client mode, soft\naccess point (AP), or Wi-Fi Direct use cases. It must remain hidden from\npublicly accessible APIs that aren't privileged apps. Privileged apps that\nrequire the factory MAC address to be returned are required to have\n`LOCAL_MAC_ADDRESS` permission.\n\nUsers have the option to keep the *default randomized* MAC address that's assigned to each SSID.\nThe option is viewable under **Privacy** in\n**Settings** \\\u003e **Network details** . To learn about\nobtaining a randomized MAC address see [Randomized MAC addresses](https://developer.android.com/about/versions/10/privacy/changes#data-ids).\n\n**Figure 1.**MAC address shows as randomized under Privacy in Network details.\n\n#### Apps that invoke device ID APIs\n\nApps that invoke device ID APIs must meet the Android 10 requirements. Otherwise, when they try to access\ndevice IDs the following is returned:\n\n- Apps targeting Android 10\n - [SecurityException](https://developer.android.com/reference/java/lang/SecurityException) is thrown from the device ID APIs.\n- Apps targeting Android 9 or earlier\n - If they have the [READ_PHONE_STATE](https://developer.android.com/reference/android/Manifest.permission.html#READ_PHONE_STATE) permission, either a `null` response or placeholder data is returned.\n - If they don't, the device ID APIs throw [SecurityException](https://developer.android.com/reference/java/lang/SecurityException) that contains the name of the method called, and an indication that the calling app doesn't meet the requirements to access the requested ID.\n\nFor more on immutable device IDs see [Nonresettable\ndevice identifiers](https://developer.android.com/about/versions/10/privacy/changes#data-ids) and [best practices\nfor unique identifiers](https://developer.android.com/training/articles/user-data-ids).\n\n### Testing\n\nApps *must* be prevented from accessing the device serial number and,\nwhere applicable, IMEI or MEID, SIM serial number, and subscriber ID. Apps with\npermission to access these IDs must also meet one of the criteria listed under\n[Who can access device IDs](#who-access)."]]