ב-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
תבוטל במכשיר.
מידע נוסף על אחזור המיקום של המכשיר בזמן שהאפליקציה פועלת ברקע זמין במדריך בנושא קבלת עדכוני מיקום תקופתיים.
הגבלות על התחלת פעילויות מהרקע
החל מגרסה 10 של Android, המערכת מטילה הגבלות על התחלת פעילויות מהרקע. שינוי ההתנהגות הזה עוזר לצמצם את ההפרעות למשתמש ומאפשר לו לשלוט טוב יותר במה שמוצג במסך. כל עוד האפליקציה מתחילה פעילויות כתוצאה ישירה מאינטראקציה של משתמשים, סביר להניח שהיא לא מושפעת מההגבלות האלה.
למידע נוסף על החלופה המומלצת להתחלת פעילויות מהרקע, אפשר לעיין במדריך בנושא התראות למשתמשים על אירועים שתלויים בזמן באפליקציה.
מזהים ונתונים
בקטע הזה מפורטים שינויים ספציפיים לעבודה עם מזהים ונתונים של מכשירים.
הסרת ההתאמה של אנשי הקשר
החל מ-Android 10, הפלטפורמה לא עוקבת אחרי המידע על קשרי ההתאמה של אנשי הקשר. כתוצאה מכך, אם האפליקציה מבצעת חיפוש באנשי הקשר של המשתמש, התוצאות לא ממוינות לפי תדירות האינטראקציה.
המדריך בנושא ContactsProvider
מכיל הודעה שמתארת את השדות והשיטות הספציפיים שהוצאו משימוש בכל המכשירים החל מ-Android 10.
רנדומיזציה של כתובת MAC
במכשירים עם Android מגרסה 10 ואילך, המערכת משדרת כתובות MAC אקראיות כברירת מחדל.
אם האפליקציה שלכם מטפלת בתרחיש לדוגמה לשימוש בארגון, הפלטפורמה מספקת ממשקי API לכמה פעולות שקשורות לכתובות MAC:
- קבלת כתובת MAC אקראית: אפליקציות של בעלי המכשיר ואפליקציות של בעלי הפרופיל יכולות לאחזר את כתובת ה-MAC האקראית שהוקצתה לרשת ספציפית באמצעות קריאה ל-
getRandomizedMacAddress()
. - קבלת כתובת MAC בפועל של היצרן: אפליקציות של בעלי מכשירים יכולות לאחזר את כתובת ה-MAC בפועל של החומרה של המכשיר באמצעות קריאה ל-
getWifiMacAddress()
. השיטה הזו שימושית למעקב אחרי ציוד של מכשירים.
הגבלת הגישה למערכת הקבצים /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) או לגרסאות ישנות יותר, השיטה מחזירה את הערך
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. השיטה 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 דורשים הרשאת מיקום מדויקת
אם האפליקציה שלכם מטרגטת את 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, אפליקציות לא יכולות לחפש את אופן הקיבוץ של ההרשאות בממשק המשתמש.