כדי להגן על פרטיות המשתמשים, אפליקציות שמשתמשות בשירותי המיקום צריכות לבקש הרשאות מיקום.
יש כמה הרשאות שקשורות למיקום. ההרשאות שבהן תבקשו להשתמש והאופן שבו תבקשו אותן תלויים בדרישות המיקום של תרחיש לדוגמה של האפליקציה.
בדף הזה מתוארים הסוגים השונים של דרישות המיקום, ומוסבר איך לבקש הרשאות מיקום בכל מקרה.
כדי לבקש הרשאות מיקום, פועלים לפי השיטות המומלצות לכל ההרשאות בסביבת זמן הריצה.
סוגי הגישה למיקום
לכל הרשאה יש שילוב של המאפיינים הבאים:
- קטגוריה: מיקום בחזית או מיקום ברקע.
- רמת דיוק: מיקום מדויק או מיקום משוער.
מיקום בחזית
אם האפליקציה מכילה תכונה שמשתפת או מקבלת פרטי מיקום רק פעם אחת או למשך פרק זמן מוגדר, לתכונה הזו נדרשת גישה למיקום בחזית. דוגמאות:
- באפליקציית ניווט, תכונה שמאפשרת למשתמשים לקבל מסלול מפורט.
- באפליקציית הודעות, תכונה שמאפשרת למשתמשים לשתף את המיקום הנוכחי שלהם עם משתמש אחר.
המערכת מתייחסת לאפליקציה כאל אפליקציה שמשתמשת במיקום בחזית אם תכונה באפליקציה ניגשת למיקום הנוכחי של המכשיר באחת מהסיטואציות הבאות:
- פעילות ששייכת לאפליקציה שלכם גלויה.
באפליקציה פועל שירות שפועל בחזית. כששירות שפועל בחזית פועל, המערכת מראה התראה קבועה כדי למשוך את תשומת הלב של המשתמש. האפליקציה שומרת על הגישה גם כשהיא נמצאת ברקע, למשל כשהמשתמש לוחץ על הלחצן דף הבית במכשיר או מכבה את המסך של המכשיר.
בנוסף, צריך להצהיר על סוג שירות שפועל בחזית של
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
. מידע נוסף זמין בפוסט בבלוג Medium הסבר על ההתנהגות של יחסי התלות ב-SDK.
מקורות מידע נוספים
מידע נוסף על הרשאות מיקום ב-Android זמין במאמרים הבאים:
Codelabs
סרטונים
דוגמיות
- אפליקציה לדוגמה שממחישה את השימוש בהרשאות מיקום.