ב-Android 10 (רמת API 29) נוספו כמה תכונות ושינויים בהתנהגות כדי להגן טוב יותר על פרטיות המשתמשים. השינויים האלה מרחיבים את השקיפות ואת השליטה שיש למשתמשים על הנתונים שלהם ועל היכולות שהם מעניקים לאפליקציות. התכונות האלה עשויות להוביל לכך שהתנהגויות או נתונים ספציפיים שהאפליקציה שלכם תלויה בהם יפעלו בצורה שונה בהשוואה לגרסאות ישנות יותר של הפלטפורמה. ההשפעה על האפליקציה אמורה להיות מינימלית אם האפליקציה פועלת בהתאם לשיטות המומלצות הנוכחיות לטיפול בנתוני משתמשים.
בדף הזה מופיע סיכום של כל שינוי.
השינויים המובילים
בקטע הזה מפורטים השינויים העיקריים ב-Android 10 שקשורים לפרטיות.
גישה לאחסון חיצוני שמוגבלת לקבצים ולמדיה של האפליקציה
כברירת מחדל, לאפליקציות שמטרגטות ל-Android 10 ואילך ניתנת גישה מוגבלת לאחסון חיצוני, או אחסון מוגבל. אפליקציות כאלה יכולות לראות את סוגי הקבצים הבאים במכשיר אחסון חיצוני, בלי שיצטרכו לבקש הרשאות משתמש שקשורות לאחסון:
- קבצים בספרייה הספציפית לאפליקציה, שהגישה אליהם מתבצעת באמצעות
getExternalFilesDir()
. - תמונות, סרטונים וקליפים של אודיו שהאפליקציה יצרה ממאגר המדיה.
מידע נוסף על אחסון מוגבל היקף, ועל שיתוף, גישה ושינוי של קבצים שמאוחסנים בהתקני אחסון חיצוניים זמין במדריכים בנושא ניהול קבצים באחסון חיצוני וגישה לקובצי מדיה ושינוי שלהם.
נדרשת הרשאה כדי לגשת למיקום המכשיר ברקע
כדי לתמוך בשליטה הנוספת של המשתמשים על הגישה של האפליקציה למידע על המיקום, ב-Android 10 נוספה ההרשאה ACCESS_BACKGROUND_LOCATION
.
בניגוד להרשאות ACCESS_FINE_LOCATION
ו-ACCESS_COARSE_LOCATION
, ההרשאה ACCESS_BACKGROUND_LOCATION
משפיעה רק על הגישה של האפליקציה למיקום כשהיא פועלת ברקע. אפליקציה נחשבת כזו שמקבלת גישה למיקום ברקע, אלא אם מתקיים אחד מהתנאים הבאים:
- פעילות ששייכת לאפליקציה גלויה.
האפליקציה מפעילה שירות שפועל בחזית, שהוצהר עליו סוג שירות שפועל בחזית של
location
.כדי להצהיר על סוג השירות שפועל בחזית של שירות באפליקציה, צריך להגדיר את הערך של
targetSdkVersion
אוcompileSdkVersion
באפליקציה ל-29
ומעלה. מידע נוסף על האופן שבו שירותים בחזית יכולים להמשיך פעולות שהמשתמש יזם שדורשות גישה למיקום.
אם האפליקציה שלכם יוצרת מחסומי גיאוגרפיה ומנטרת אותם ומטרגטת ל-Android 10 (רמת API 29) ואילך, עליכם להצהיר על ההרשאה ACCESS_BACKGROUND_LOCATION
.
הגישה ניתנת באופן אוטומטי כשמטרגטים מכשירי Android מגרסה 9 ומטה
אם האפליקציה פועלת ב-Android 10 ואילך אבל מטרגטת ל-Android 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 ובהרשאות שמוגדרות בה, כמו שמוצג בטבלה הבאה:
גרסת פלטפורמת היעד | גסה או עדינה האם ההרשאה ניתנה? |
האם הרשאת הרקע מוגדרת במניפסט? |
מצב הרשאת ברירת המחדל המעודכן |
---|---|---|---|
Android 10 | כן | כן | גישה במצב פעיל וברקע |
Android 10 | כן | לא | גישה במצב פעיל בלבד |
Android 10 | לא | (המערכת התעלמה ממנו) | אין גישה |
Android מגרסה 9 ומטה | כן | נוסף באופן אוטומטי על ידי המערכת בזמן שדרוג המכשיר | גישה במצב פעיל וברקע |
Android מגרסה 9 ומטה | לא | (המערכת התעלמה ממנו) | אין גישה |
חשוב לזכור שהמשתמש יכול לשנות את רמת הגישה הזו גם אחרי שהמערכת מעדכנת באופן אוטומטי את הגישה של האפליקציה למיקום המכשיר. לדוגמה, המשתמש יכול לצמצם את הגישה של האפליקציה לרקע בלבד או לבטל את הגישה לגמרי. לפני ניסיון גישה למיקום המכשיר, במיוחד בשירות שפועל בחזית, האפליקציה צריכה לבדוק אם המשתמש עדיין מאפשר לאפליקציה לקבל את פרטי המיקום האלה.
ביטול הגישה כשמעדכנים את רמת ה-API לטירגוט במכשירי Android 10
כדאי לקחת בחשבון את מקרה שבו האפליקציה כבר מותקנת במכשיר עם Android 10. אם תעדכנו את האפליקציה כך שתתמקד ב-Android 10 במצב כזה, ההרשאה ACCESS_BACKGROUND_LOCATION
תבוטל במכשיר.
למידע נוסף על אחזור מיקום המכשיר בזמן שהאפליקציה פועלת ברקע, קראו את המדריך בנושא קבלת עדכוני מיקום תקופתיים.
הגבלות על התחלת פעילויות מהרקע
החל מ-Android 10, המערכת מגבילה פעילויות מהרקע. שינוי ההתנהגות הזה עוזר לצמצם את ההפרעות למשתמש ומאפשר לו לשלוט טוב יותר במה שמוצג במסך. כל עוד האפליקציה מתחילה פעילויות כתוצאה ישירה מאינטראקציה של משתמשים, סביר להניח שהיא לא מושפעת מההגבלות האלה.
למידע נוסף על החלופה המומלצת להתחלת פעילויות מהרקע, אפשר לעיין במדריך בנושא התראות למשתמשים על אירועים שתלויים בזמן באפליקציה.
מזהים ונתונים
בקטע הזה מפורטים שינויים ספציפיים לעבודה עם מזהים ונתונים של מכשירים.
הסרת תחום עניין משותף של אנשי קשר
החל מ-Android 10, הפלטפורמה לא עוקבת אחרי מידע על קשרי אנשי הקשר. לכן, אם האפליקציה שלך מבצעת חיפוש של אנשי הקשר של המשתמש, התוצאות לא מסודרות לפי תדירות האינטראקציה.
במדריך בנושא ContactsProvider
מופיעה הודעה שמתארת את השדות והשיטות הספציפיים שהוצאו משימוש בכל המכשירים החל מ-Android 10.
רנדומיזציה של כתובת MAC
במכשירים עם Android מגרסה 10 ומעלה, המערכת מעבירה כתובות MAC אקראיות כברירת מחדל.
אם האפליקציה שלכם מטפלת בתרחיש לדוגמה לשימוש בארגון, הפלטפורמה מספקת ממשקי API לכמה פעולות שקשורות לכתובות MAC:
- קבלת כתובת MAC אקראית: אפליקציות של בעלי מכשירים ואפליקציות של בעלי פרופילים יכולות לאחזר את כתובת ה-MAC האקראית שהוקצתה לרשת ספציפית באמצעות קריאה ל-
getRandomizedMacAddress()
. - קבלת כתובת MAC בפועל של היצרן: אפליקציות של בעלי המכשיר יכולות לאחזר את כתובת ה-MAC האמיתית של החומרה במכשיר באמצעות קריאה ל-
getWifiMacAddress()
. השיטה הזו שימושית למעקב אחרי Fleet מכשירים.
הגבלת הגישה למערכת הקבצים /proc/net
במכשירים עם Android מגרסה 10 ואילך, לאפליקציות אין גישה למאפיין /proc/net
, שכולל מידע על מצב הרשת של המכשיר. אפליקציות שזקוקות לגישה למידע הזה, כמו רשתות VPN, צריכות להשתמש בכיתה NetworkStatsManager
או בכיתה ConnectivityManager
.
הגבלה על מזהי מכשירים שלא ניתן לאפס
החל מ-Android 10, לאפליקציות צריכה להיות ההרשאה READ_PRIVILEGED_PHONE_STATE
כדי לגשת למזהים של המכשיר שלא ניתן לאפס, כולל מספר ה-IMEI והמספר הסידורי.
השיטות המושפעות כוללות:
Build
TelephonyManager
אם לאפליקציה שלכם אין את ההרשאה הזו ואתם מנסים לבקש מידע על מזהים שלא ניתן לאפס בכל זאת, התגובה של הפלטפורמה משתנה בהתאם לגרסה של ערכת ה-SDK היעד:
- אם האפליקציה שלכם מטרגטת ל-Android 10 ואילך, מתרחש אירוע
SecurityException
. - אם האפליקציה מטרגטת את Android 9 (רמת API 28) ומטה, ה-method יחזיר נתונים
null
או placeholder אם לאפליקציה יש את ההרשאהREAD_PHONE_STATE
. אחרת, נוצרSecurityException
.
במקרים רבים של תרחישים לדוגמה, אין צורך במזהי מכשירים שלא ניתן לאפס. לדוגמה, אם באפליקציה שלכם נעשה שימוש במזהי מכשירים שלא ניתן לאפס למטרות מעקב אחר מודעות או לניתוח נתוני משתמשים, תוכלו להשתמש במזהה הפרסום של Android במקום זאת בתרחישי השימוש הספציפיים האלה. מידע נוסף זמין במאמר שיטות מומלצות למזהים ייחודיים.
גישה מוגבלת לנתונים שבלוח
האפליקציה לא יכולה לגשת לנתוני הלוח אם היא לא עורך שיטת הקלט (IME) שמוגדרת כברירת מחדל או אם היא לא האפליקציה שבה מופיע המיקוד כרגע. הדבר נכון לגבי Android מגרסה 10 ואילך.
הגנה על המספר הסידורי של מכשיר USB
אם האפליקציה שלכם מטרגטת את Android מגרסה 10 ואילך, היא לא תוכל לקרוא את המספר הסידורי עד שהמשתמש יעניק לאפליקציה הרשאה לגשת למכשיר ה-USB או לציוד ההיקפי.
למידע נוסף על עבודה עם מכשירים מסוג USB, אפשר לעיין במדריך בנושא הגדרת מארחי USB.
מצלמה וקישוריות
בקטע הזה מפורטים שינויים ספציפיים למטא-נתונים של המצלמה ול-API של הקישוריות.
הגבלת הגישה לפרטים ולמטא-נתונים של המצלמה
ב-Android 10 יש שינוי בהיקף המידע שמוחזר כברירת מחדל על ידי השיטה getCameraCharacteristics()
. באופן ספציפי, לאפליקציה צריכה להיות ההרשאה CAMERA
כדי לגשת למטא-נתונים שעשויים להיות ספציפיים למכשיר, שכלולים בערך המוחזר של השיטה הזו.
מידע נוסף על השינויים האלה זמין בקטע שדות מצלמה שדורשים הרשאה.
הגבלה על הפעלה והשבתה של Wi-Fi
באפליקציות שמטרגטות את Android 10 ואילך לא ניתן להפעיל או להשבית Wi-Fi. ה-method WifiManager.setWifiEnabled()
תמיד מחזירה false
.
אם אתם צריכים לבקש מהמשתמשים להפעיל או להשבית את ה-Wi-Fi, השתמשו בלוח הגדרות.
הגבלות על גישה ישירה לרשתות Wi-Fi מוגדרות
כדי להגן על פרטיות המשתמשים, הגדרה ידנית של רשימת רשתות ה-Wi-Fi מוגבלת לאפליקציות מערכת ולנאמני מידע למדיניות המכשיר (DPC). חשבון DPC יכול להיות בעל המכשיר או בעל הפרופיל.
אם האפליקציה שלכם מטרגטת ל-Android 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 של שירותי טלפוניה, Bluetooth ו-Wi-Fi נדרשת הרשאת מיקום FINE
אם האפליקציה שלכם מטרגטת את Android 10 ואילך, היא צריכה את ההרשאה ACCESS_FINE_LOCATION
כדי להשתמש בכמה שיטות ב-API של Wi-Fi, ב-Wi-Fi Aware או ב-Bluetooth. בקטעים הבאים מפורטות הכיתות והשיטות שהושפעו.
טלפוניה
TelephonyManager
getCellLocation()
getAllCellInfo()
requestNetworkScan()
requestCellInfoUpdate()
getAvailableNetworks()
getServiceState()
TelephonyScanManager
requestNetworkScan()
TelephonyScanManager.NetworkScanCallback
onResults()
PhoneStateListener
onCellLocationChanged()
onCellInfoChanged()
onServiceStateChanged()
Wi-Fi
WifiManager
startScan()
getScanResults()
getConnectionInfo()
getConfiguredNetworks()
WifiAwareManager
WifiP2pManager
WifiRttManager
Bluetooth
BluetoothAdapter
startDiscovery()
startLeScan()
BluetoothAdapter.LeScanCallback
BluetoothLeScanner
startScan()
הרשאות
בקטע הזה מתוארים עדכונים למודל ההרשאות של Android.
הגישה לתוכן המסך הוגבלה
כדי להגן על תוכן המסך של המשתמשים, ב-Android 10 מונעת גישה שקטה לתוכן המסך של המכשיר על ידי שינוי ההיקף של ההרשאות READ_FRAME_BUFFER
, CAPTURE_VIDEO_OUTPUT
ו-CAPTURE_SECURE_VIDEO_OUTPUT
. החל מ-Android 10, ההרשאות האלה הן גישה לחתימה בלבד.
אפליקציות שצריכות לגשת לתוכן המסך של המכשיר צריכות להשתמש ב-API MediaProjection
, שמציגה בקשה למשתמש להביע הסכמה.
בדיקת הרשאות מול משתמשים באפליקציות מדור קודם
אם האפליקציה שלכם מטרגטת את Android 5.1 (רמת API 22) ואילך, המשתמשים יראו מסך הרשאות בפעם הראשונה שהם משתמשים באפליקציה במכשיר עם Android 10 ואילך, כפי שמוצג באיור 1. המסך הזה מאפשר למשתמשים לבטל את הגישה להרשאות שהמערכת העניקה לאפליקציה שלכם בזמן ההתקנה.
זיהוי פעילות גופנית
ב-Android 10 נוספה ההרשאה android.permission.ACTIVITY_RECOGNITION
לזמן ריצה לאפליקציות שצריכות לזהות את מספר הצעדים של המשתמש או לסווג את הפעילות הפיזית שלו, כמו הליכה, רכיבה על אופניים או תנועה ברכב. המטרה של התכונה הזו היא לתת למשתמשים אפשרות לראות איך נעשה שימוש בנתוני החיישנים של המכשיר בהגדרות.
ספריות מסוימות ב-Google Play Services, כמו 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
.
אם המערכת מעניקה את ההרשאה android.permission.ACTIVITY_RECOGNITION
, האפליקציה שומרת על ההרשאה אחרי שמעדכנים את האפליקציה כך שהיא תטרגט את Android 10. עם זאת, המשתמש יכול לבטל את ההרשאה הזו בכל שלב בהגדרות המערכת.
קבוצות ההרשאות הוסרו מממשק המשתמש
החל מ-Android 10, אפליקציות לא יכולות לחפש איך ההרשאות מקובצות בממשק המשתמש.