כחלק מהמאמצים שלנו לשפר את איכות האפליקציות ולהגן על פרטיות המשתמשים, מומלץ לצמצם את השימוש בהרשאות באפליקציות שלכם. כך המשתמשים יכולים לגלות ולהשתמש באפליקציות באיכות גבוהה שמספקות סביבת משתמש בטוחה ומאובטחת.
בקשת הרשאות מהמשתמשים קוטעת את תהליך השימוש, והמשתמשים יכולים לדחות את הבקשה. בנוסף, בכל פעם שמצהירים על הרשאה חדשה, צריך לבדוק איך האפליקציה מבקשת נתוני משתמשים ומשתפת אותם. יש הרשאות וממשקי API רגישים במיוחד שמחייבים הצגת גילוי נאות באפליקציה לגבי הגישה של האפליקציה לנתוני משתמשים, האיסוף שלהם, השימוש בהם והשיתוף שלהם.
יש כמה דרכים חלופיות לצמצם את השימוש בהרשאות:
- אם האפליקציה צריכה רק מיקום משוער, צריך להצהיר על הרשאות שמאפשרות לקבל מידע על מיקום בהערכה גסה ולא מידע על מיקום מדויק.
- הפעלת ממשקי API שמאפשרים לאפליקציה לבצע את הפונקציונליות הרצויה בלי להצהיר על הרשאות.
- להפעיל כוונות ספציפיות או פונקציות לטיפול באירועים כדי לבצע פעולות, במקום להצהיר על הרשאות.
- המערכת מספקת חוזים מובנים לפעולות שונות על קבצים, ותומכת גם בחוזים מותאמים אישית.
אם אתם חייבים להצהיר על הרשאה, אתם צריכים לכבד תמיד את ההחלטה של המשתמש ולספק דרך להפחית את חוויית השימוש באפליקציה בצורה הדרגתית.
בדף הזה מתוארים כמה תרחישים לדוגמה שבהם האפליקציה יכולה לפעול בלי להצהיר על הצורך בהרשאות כלשהן.
הצגת מקומות בקרבת מקום
יכול להיות שהאפליקציה שלכם תצטרך לדעת את המיקום המשוער של המשתמש. המיקום הזה שימושי להצגת מידע שקשור למיקום, כמו מסעדות בסביבה.
במקרים מסוימים, נדרשת רק הערכה גסה של מיקום המכשיר. במצבים האלה, אפשר לבצע אחת מהפעולות הבאות, בהתאם לתדירות שבה האפליקציה צריכה מידע על מיקום:
- אם האפליקציה צריכה לגשת למיקום לעיתים קרובות, צריך להצהיר על ההרשאה
ACCESS_COARSE_LOCATION
. ההרשאה מספקת הערכה של מיקום המכשיר משירותי המיקום, כפי שמתואר במסמכים בנושא רמת הדיוק של המיקום המשוער. - אם האפליקציה צריכה את המיקום בתדירות נמוכה יותר, או רק פעם אחת, כדאי לבקש מהמשתמש להזין כתובת או מיקוד במקום זאת.
במקרים אחרים נדרשת הערכה מדויקת יותר של מיקום המכשיר. במקרים האלה בלבד מותר להצהיר על הרשאת ACCESS_FINE_LOCATION
.
יצירה של קבצים וגישה אליהם
ב-Android אפשר ליצור קבצים ולגשת אליהם בלי להצהיר על הרשאות שקשורות לאחסון או לחיישנים.
פתיחת קובצי מדיה
יכול להיות שהאפליקציה מאפשרת למשתמשים לבחור תמונות וסרטונים, למשל כדי לצרף אותם להודעות או להגדיר אותם כתמונת פרופיל.
כדי לתמוך בפונקציונליות הזו, צריך להשתמש בכלי לבחירת תמונות. אין צורך בהרשאות בזמן ריצה כדי להשתמש בכלי לבחירת תמונות. כשמשתמש מקיים אינטראקציה עם הכלי לבחירת תמונות כדי לבחור תמונות או סרטונים לשיתוף עם האפליקציה שלכם, המערכת מעניקה גישת קריאה זמנית ל-URI שמשויך לקובצי המדיה שנבחרו.
אם האפליקציה שלך צריכה לגשת לקובצי מדיה בלי להשתמש בכלי לבחירת תמונות, לא צריך להצהיר על הרשאות גישה לאחסון:
- אם אתם ניגשים לקובצי מדיה שהאפליקציה שלכם יצרה, לאפליקציה כבר יש גישה לקבצים האלה במאגר המדיה.
- אם אתם ניגשים לקובצי מדיה שנוצרו על ידי אפליקציות אחרות, עליכם להשתמש ב-Storage Access Framework.
פתיחת מסמכים
יכול להיות שהאפליקציה שלכם תציג מסמכים שהמשתמש יצר, באפליקציה שלכם או באפליקציה אחרת. דוגמה נפוצה היא קובץ טקסט.
במצב כזה, צריך להצהיר על READ_EXTERNAL_STORAGE
רק לצורך תאימות למכשירים ישנים יותר. מגדירים את android:maxSdkVersion
לערך 28
.
בהתאם לאפליקציה שבה נוצר המסמך, מבצעים אחת מהפעולות הבאות:
- אם המשתמש יצר את המסמך באפליקציה שלכם, אפשר לגשת אליו ישירות.
- אם המשתמש יצר את המסמך באפליקציה אחרת, צריך להשתמש במסגרת של גישה לאחסון.
צילום תמונה
יכול להיות שהמשתמשים יצלמו תמונות באפליקציה שלכם באמצעות אפליקציית המצלמה המובנית.
במצב כזה, אל תצהירו על ההרשאה CAMERA
. במקום זאת, מפעילים את פעולת הכוונה ACTION_IMAGE_CAPTURE
.
צלם סרטון.
יכול להיות שהמשתמשים יצלמו סרטונים באפליקציה שלכם באמצעות אפליקציית המצלמה המובנית.
במצב כזה, אל תצהירו על ההרשאה CAMERA
. במקום זאת, מפעילים את פעולת הכוונה ACTION_VIDEO_CAPTURE
.
זיהוי המכשיר שבו פועל מופע של האפליקציה
יכול להיות שמופע מסוים של האפליקציה שלכם יצטרך לדעת באיזה מכשיר הוא פועל. ההרשאה הזו שימושית לאפליקציות עם העדפות או הודעות ספציפיות למכשיר, כמו פלייליסטים שונים למכשירי טלוויזיה ולמכשירים לבישים.
במצב כזה, אל תיגשו ישירות למספר ה-IMEI של המכשיר. למעשה, החל מ-Android 10, אי אפשר לעשות את זה. במקום זאת, אפשר לבצע אחת מהפעולות הבאות:
- אפשר לקבל מזהה מכשיר ייחודי למופע של האפליקציה באמצעות ספריית Instance ID.
- ליצור מזהה משלכם שמוגבל לנפח האחסון של האפליקציה. להשתמש בפונקציות מערכת בסיסיות, כמו
randomUUID()
.
התאמה למכשיר באמצעות Bluetooth
יכול להיות שהאפליקציה תציע חוויה משופרת על ידי העברת נתונים למכשיר אחר באמצעות Bluetooth.
כדי לתמוך בפונקציונליות הזו, אל תצהירו על ההרשאות ACCESS_FINE_LOCATION
,
ACCESS_COARSE_LOCATIION
או BLUETOOTH_ADMIN
. במקום זאת, צריך להשתמש בהתאמה של מכשיר משני.
הזנה אוטומטית של מספר כרטיס תשלום
פלטפורמת Google Play Services כוללת ספרייה שמאפשרת להזין באופן אוטומטי מספר של כרטיס תשלום. במקום להצהיר על ההרשאה CAMERA
, אפשר להשתמש בספרייה debit and credit card recognition (זיהוי כרטיסי חיוב מיידי וכרטיסי אשראי).
ניהול של שיחות טלפון והודעות טקסט
שירותי Android ו-Google Play מציעים ספריות שמאפשרות לכם לנהל שיחות טלפון והודעות טקסט בלי שתצטרכו להצהיר על הרשאות שקשורות לשיחות טלפון או להודעות SMS.
הזנה אוטומטית של קוד סיסמה חד-פעמי
כדי לייעל את תהליך העבודה של אימות דו-שלבי, האפליקציה עשויה להזין באופן אוטומטי את קוד הגישה החד-פעמי שנשלח למכשיר של המשתמש כדי לאמת את הזהות שלו.
כדי לתמוך בפונקציונליות הזו במכשירים שמבוססים על Google Play Services, אל תצהירו על ההרשאה READ_SMS
. במקום זאת, אפשר להשתמש ב-SMS Retriever API.
במכשירים אחרים, אם האפליקציה שלכם מיועדת ל-Android 8.0 (רמת API 26) או לגרסה מתקדמת יותר, צריך ליצור טוקן ספציפי לאפליקציה באמצעות createAppSpecificSmsToken()
. מעבירים את האסימון הזה לאפליקציה או לשירות אחרים שיכולים לשלוח הודעת SMS לאימות.
הזנת מספר הטלפון של המשתמש באופן אוטומטי
כדי לספק מכירות או תמיכה יעילות יותר, האפליקציה עשויה לאפשר למשתמש להזין באופן אוטומטי את מספר הטלפון של המכשיר שלו.
כדי לתמוך בפונקציונליות הזו במכשירים שמבוססים על Google Play Services, אל תצהירו על ההרשאה READ_PHONE_STATE
. במקום זאת, כדאי להשתמש בספרייה Phone Number
Hint.
סינון שיחות טלפון
כדי לצמצם את ההפרעות המיותרות למשתמש, האפליקציה עשויה לסנן שיחות טלפון כדי לזהות ספאם.
כדי לתמוך בפונקציונליות הזו, אל תצהירו על ההרשאה READ_PHONE_STATE
.
במקום זאת, צריך להשתמש ב-API CallScreeningService
.
ביצוע שיחות טלפון
יכול להיות שהאפליקציה תציע לכם להתקשר למישהו על ידי הקשה על הפרטים שלו.
כדי לתמוך בפונקציונליות הזו, צריך להשתמש בפעולת הכוונה ACTION_DIAL
ולא בפעולה ACTION_CALL
. אפליקציית ACTION_CALL
דורשת את הרשאת ההתקנה CALL_PHONE
, שמונעת ממכשירים שלא יכולים לבצע שיחות, כמו טאבלטים מסוימים, להתקין את האפליקציה שלכם.
השהיית המדיה כשיש הפרעה לאפליקציה
אם המשתמש מקבל שיחת טלפון או אם מופעלת אזעקה שהמשתמש הגדיר, האפליקציה צריכה להשהות את השמעת המדיה עד שהאפליקציה תקבל שוב את פוקוס האודיו.
כדי לתמוך בפונקציונליות הזו, אל תצהירו על READ_PHONE_STATE
הרשאה. במקום זאת, מטמיעים את
onAudioFocusChange()
מטפל האירועים, שמופעל באופן אוטומטי כשהמערכת מעבירה את מיקוד האודיו.
מידע נוסף על הטמעת מיקוד באודיו
סריקת ברקודים
Android כולל תמיכה ב-Google Code Scanner API, שמבוסס על Google Play Services ומאפשר לפענח ברקודים בלי להצהיר על הרשאות גישה למצלמה. ה-API הזה עוזר לשמור על פרטיות המשתמשים ומקטין את הסיכוי שתצטרכו ליצור ממשק משתמש מותאם אישית לתרחיש השימוש שלכם בסריקת ברקודים.
ה-API סורק את הברקוד ומחזיר לאפליקציה רק את תוצאות הסריקה. התמונות מעובדות במכשיר, ו-Google לא שומרת נתונים או תוצאות סריקה.
אם האפליקציה צריכה לתמוך בתרחישי שימוש מורכבים או בפורמטים של ברקודים, או אם היא דורשת ממשק משתמש מותאם אישית, צריך להשתמש במקום זאת ב-API של ML Kit לסריקת ברקודים.
איפוס הרשאות שלא נעשה בהן שימוש
ב-Android יש כמה דרכים לאפס הרשאות זמן ריצה שלא נעשה בהן שימוש למצב ברירת המחדל שלהן, כלומר למצב 'נדחתה'.
בקשת הרשאות בזמן ריצה
אחרי שקובעים שהאפליקציה צריכה להצהיר על הרשאות ולבקש אותן בזמן הריצה, צריך לפעול לפי תהליך עבודה ספציפי כדי לעשות זאת.
עליך להסביר למה האפליקציה שלך זקוקה להרשאות
השימוש ב-requestPermissions()
מציג תיבת דו-שיח שמציינת באילו הרשאות האפליקציה רוצה להשתמש, אבל לא מסבירה למה. זה עלול לבלבל את המשתמש.
במדריך לעיצוב אפשר לקרוא פרטים נוספים והמלצות לגבי האופן והזמן שבהם כדאי להציג את תיבת הדו-שיח הזו.
טיפול בדחיות של הרשאות
האפליקציה צריכה לעזור למשתמשים להבין את ההשלכות של סירוב להענקת הרשאה, לפני שהם בוחרים לעשות זאת ואחרי כן.