כדי להגן על פרטיות המשתמשים, אפליקציות שמשתמשות בשירותי מיקום צריכות לבקש הרשאות גישה למיקום.
יש כמה הרשאות שקשורות למיקום. ההרשאות שאתם מבקשים והאופן שבו אתם מבקשים אותן תלויים בדרישות המיקום של תרחיש השימוש באפליקציה.
בדף הזה מתוארים סוגים שונים של דרישות למיקום, ומוסבר איך לבקש הרשאות למיקום בכל מקרה.
כדי לבקש הרשאות מיקום, צריך לפעול לפי השיטות המומלצות לכל הרשאות זמן הריצה.
סוגים של גישה למיקום
לכל הרשאה יש שילוב של המאפיינים הבאים:
- קטגוריה: מיקום בחזית או מיקום ברקע.
- דיוק: מיקום מדויק או מיקום משוער.
מיקום במצב פעיל
אם האפליקציה שלך מכילה תכונה שמשתפת או מקבלת פרטי מיקום רק פעם אחת, או למשך פרק זמן מוגדר, התכונה הזו דורשת גישה למיקום בחזית האפליקציה. דוגמאות:
- באפליקציית ניווט, תכונה מאפשרת למשתמשים לקבל מסלול מפורט.
- באפליקציית הודעות, תכונה מאפשרת למשתמשים לשתף את המיקום הנוכחי שלהם עם משתמש אחר.
המערכת מחשיבה שאפליקציה משתמשת במיקום בפורגראונד אם תכונה של האפליקציה ניגשת למיקום הנוכחי של המכשיר באחת מהסיטואציות הבאות:
- פעילות ששייכת לאפליקציה שלכם גלויה.
האפליקציה שלך מפעילה שירות בחזית. כששירות שפועל בחזית פועל, המערכת מציגה התראה קבועה כדי להגביר את המודעות של המשתמשים. האפליקציה שומרת על הגישה כשהיא פועלת ברקע, למשל כשהמשתמש לוחץ על הלחצן דף הבית במכשיר או מכבה את המסך של המכשיר.
בנוסף, צריך להצהיר על סוג השירות שפועל בחזית של
location
, כמו שמוצג בקטע הקוד הבא. ב-Android 10 (רמת API 29) ומעלה, צריך להצהיר על סוג השירות הזה שפועל בחזית.<!-- Recommended for Android 9 (API level 28) and lower. --> <!-- Required for Android 10 (API level 29) and higher. --> <service android:name="MyNavigationService" android:foregroundServiceType="location" ... > <!-- Any inner elements would go here. --> </service>
מצהירים על הצורך במיקום במצב פעיל כשהאפליקציה מבקשת את ההרשאה ACCESS_COARSE_LOCATION
או את ההרשאה ACCESS_FINE_LOCATION
, כמו שמוצג בקטע הקוד הבא:
<manifest ... >
<!-- Always include this permission -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- Include only if your app benefits from precise location access. -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</manifest>
מיקום ברקע
אפליקציה דורשת גישה למיקום ברקע אם תכונה באפליקציה משתפת מיקום באופן קבוע עם משתמשים אחרים או משתמשת ב-Geofencing API. הנה כמה דוגמאות:
- באפליקציה לשיתוף מיקום עם המשפחה, יש תכונה שמאפשרת למשתמשים לשתף את המיקום שלהם עם בני המשפחה באופן רציף.
- באפליקציית IoT, יש תכונה שמאפשרת למשתמשים להגדיר את המכשירים הביתיים כך שהם יכובו כשהמשתמש יוצא מהבית וידלקו כשהמשתמש חוזר הביתה.
המערכת מחשיבה את האפליקציה כמשתמשת במיקום ברקע אם היא ניגשת למיקום הנוכחי של המכשיר בכל מצב אחר מלבד אלה שמתוארים בקטע מיקום בחזית. הדיוק של המיקום ברקע זהה לדיוק של המיקום בחזית, שתלוי בהרשאות המיקום שהאפליקציה מצהירה עליהן.
ב-Android מגרסה 10 (רמת API 29) ואילך, צריך להצהיר על ההרשאה ACCESS_BACKGROUND_LOCATION
במניפסט של האפליקציה כדי לבקש גישה למיקום ברקע בזמן הריצה. בגרסאות קודמות של Android, כשהאפליקציה מקבלת גישה למיקום בחזית, היא מקבלת באופן אוטומטי גם גישה למיקום ברקע.
<manifest ... >
<!-- Required only when requesting background location access on
Android 10 (API level 29) and higher. -->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
</manifest>
דיוק
Android תומך ברמות הדיוק הבאות של המיקום:
- משוער
- מספק הערכה של מיקום המכשיר. אם המיקום המשוער הזה הוא מ-
LocationManagerService
או מ-FusedLocationProvider
, הוא מדויק בטווח של כ-3 קמ"ר (כ-1.2 מיילים רבועים). האפליקציה יכולה לקבל מיקומים ברמת הדיוק הזו כשמצהירים על ההרשאהACCESS_COARSE_LOCATION
אבל לא על ההרשאהACCESS_FINE_LOCATION
. - מדויק
- מספק הערכה של מיקום המכשיר שהיא מדויקת ככל האפשר.
אם המיקום המשוער הוא מ-
LocationManagerService
או מ-FusedLocationProvider
, בדרך כלל הוא מדויק בטווח של כ-50 מטרים, ולפעמים בטווח של כמה מטרים או יותר. האפליקציה יכולה לקבל מיקומים ברמת הדיוק הזו כשמצהירים על ההרשאהACCESS_FINE_LOCATION
.
אם המשתמש מעניק הרשאת מיקום משוער, לאפליקציה יש גישה רק למיקום משוער, ללא קשר להרשאות המיקום שהאפליקציה מצהירה עליהן.
האפליקציה צריכה להמשיך לפעול גם אם המשתמש מעניק גישה רק למיקום משוער. אם תכונה באפליקציה שלכם מחייבת גישה למיקום מדויק באמצעות ההרשאה ACCESS_FINE_LOCATION
, אתם יכולים לבקש מהמשתמש לאשר לאפליקציה שלכם גישה למיקום מדויק.
תזכורת למתן הרשאת גישה למיקום ברקע
ב-Android מגרסה 10 (רמת API 29) ומעלה, כשמשתמש מעניק לאפליקציה גישה למיקום ברקע, ובפעם הראשונה שתכונה באפליקציה ניגשת למיקום המכשיר ברקע, המערכת מתזמנת שליחת התראה למשתמש. ההתראה הזו מזכירה למשתמש שהוא אישר לאפליקציה שלך לגשת למיקום המכשיר כל הזמן. דוגמה להתראה מופיעה באיור 8.
בדיקה של דרישות המיקום בהסתמכויות של ה-SDK באפליקציה
בודקים אם באפליקציה נעשה שימוש בערכות SDK שתלויות בהרשאות מיקום, ובמיוחד בהרשאה ACCESS_FINE_LOCATION
. במאמר Getting to know the behaviors of your SDK dependencies ב-Medium יש מידע נוסף.
מקורות מידע נוספים
מידע נוסף על הרשאות מיקום ב-Android זמין במקורות הבאים:
Codelabs
סרטונים
טעימות
- אפליקציה לדוגמה להדגמת השימוש בהרשאות מיקום.