כחלק מהמאמצים שלנו לשפר את איכות האפליקציות ולהגן על פרטיות המשתמשים, מומלץ לצמצם את השימוש בהרשאות באפליקציות שלכם. כך המשתמשים יכולים לגלות ולהשתמש באפליקציות באיכות גבוהה שמספקות סביבת משתמש בטוחה ומאובטחת.
בקשת הרשאות מהמשתמשים קוטעת את תהליך השימוש, והמשתמשים יכולים לדחות את הבקשה. בנוסף, בכל פעם שמצהירים על הרשאה חדשה, צריך לבדוק איך האפליקציה מבקשת נתוני משתמשים ומשתפת אותם. ממשקי API והרשאות רגישים במיוחד מסוימים מחייבים הצגת גילוי נאות באפליקציה לגבי הגישה של האפליקציה לנתוני משתמשים, האיסוף שלהם, השימוש בהם והשיתוף שלהם.
יש כמה דרכים חלופיות לצמצם את השימוש בהרשאות:
- אם האפליקציה שלכם צריכה רק מיקום משוער, עליכם להצהיר על הרשאות שמאפשרות לקבל נתוני מיקום בהערכה גסה, ולא נתוני מיקום מדויקים.
- הפעלת ממשקי API שמאפשרים לאפליקציה לבצע את הפונקציונליות הרצויה בלי להצהיר על הרשאות.
- להפעיל כוונות ספציפיות או מטפלים באירועים כדי לבצע פונקציונליות, במקום להצהיר על הרשאות.
- המערכת מספקת חוזים מובנים לפעולות שונות על קבצים, ותומכת גם בחוזים מותאמים אישית.
אם אתם חייבים להצהיר על הרשאה, אתם תמיד צריכים לכבד את ההחלטה של המשתמש ולספק דרך לבצע הפחתה חיננית (graceful degradation) של חוויית השימוש באפליקציה.
בדף הזה מתוארים כמה תרחישים לדוגמה שבהם האפליקציה יכולה לפעול בלי להצהיר על הצורך בהרשאות כלשהן.
הצגת מקומות בקרבת מקום
יכול להיות שהאפליקציה שלכם צריכה לדעת את המיקום המשוער של המשתמש. המידע הזה שימושי להצגת מידע שקשור למיקום, כמו מסעדות בסביבה.
במקרים מסוימים נדרשת רק הערכה גסה של מיקום המכשיר. במקרים כאלה, אפשר לבצע אחת מהפעולות הבאות, בהתאם לתדירות שבה האפליקציה צריכה מידע על מיקום:
- אם האפליקציה צריכה לגשת למיקום לעיתים קרובות, צריך להצהיר על ההרשאה
ACCESS_COARSE_LOCATION. ההרשאה מספקת הערכה של מיקום המכשיר משירותי המיקום, כפי שמתואר במסמכים בנושא דיוק המיקום המשוער. - אם האפליקציה צריכה את המיקום בתדירות נמוכה יותר, או רק פעם אחת, כדאי לבקש מהמשתמש להזין כתובת או מיקוד במקום זאת.
במקרים אחרים נדרשת הערכה מדויקת יותר של מיקום המכשיר. במקרים האלה בלבד מותר להצהיר על הרשאת ACCESS_FINE_LOCATION.
יצירה של קבצים וגישה אליהם
ב-Android אפשר ליצור קבצים ולגשת אליהם בלי להצהיר על הרשאות שקשורות לאחסון או לחיישנים.
פתיחת קובצי מדיה
יכול להיות שהאפליקציה מאפשרת למשתמשים לבחור תמונות וסרטונים, למשל כדי לצרף אותם להודעות או להגדיר אותם כתמונת פרופיל.
כדי לתמוך בפונקציונליות הזו, צריך להשתמש בכלי לבחירת תמונות. אין צורך בהרשאות בזמן הריצה כדי להשתמש בכלי לבחירת תמונות. כשמשתמש מקיים אינטראקציה עם הכלי לבחירת תמונות כדי לבחור תמונות או סרטונים לשיתוף עם האפליקציה שלכם, המערכת מעניקה גישת קריאה זמנית ל-URI שמשויך לקובצי המדיה שנבחרו.
אם האפליקציה שלך צריכה לגשת לקובצי מדיה בלי להשתמש בכלי לבחירת תמונות, לא צריך להצהיר על הרשאות אחסון:
- אם אתם ניגשים לקובצי מדיה שהאפליקציה שלכם יצרה, לאפליקציה כבר יש גישה לקבצים האלה במאגר המדיה.
- אם אתם ניגשים לקובצי מדיה שנוצרו על ידי אפליקציות אחרות, צריך להשתמש ב-Storage Access Framework.
פתיחת מסמכים
יכול להיות שהאפליקציה שלכם תציג מסמכים שהמשתמש יצר, באפליקציה שלכם או באפליקציה אחרת. דוגמה נפוצה היא קובץ טקסט.
במצב כזה, צריך להצהיר על
READ_EXTERNAL_STORAGE
רק לצורך תאימות למכשירים ישנים יותר. מגדירים את android:maxSdkVersion לערך 28.
בהתאם לאפליקציה שבה נוצר המסמך, מבצעים אחת מהפעולות הבאות:
- אם המשתמש יצר את המסמך באפליקציה שלכם, אפשר לגשת אליו ישירות.
- אם המשתמש יצר את המסמך באפליקציה אחרת, צריך להשתמש במסגרת של גישה לאחסון.
צילום תמונה
יכול להיות שהמשתמשים יצלמו תמונות באפליקציה שלכם באמצעות אפליקציית המצלמה המובנית.
במצב כזה, אל תצהירו על ההרשאה CAMERA. במקום זאת, מפעילים את פעולת Intent ACTION_IMAGE_CAPTURE.
צלם סרטון.
יכול להיות שהמשתמשים יצלמו סרטונים באפליקציה שלכם באמצעות אפליקציית המצלמה המובנית.
במצב כזה, אל תצהירו על ההרשאה CAMERA. במקום זאת, מפעילים את פעולת Intent 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 לאימות.
אימות מספר הטלפון של משתמש
כדי לאפשר לאפליקציה לאמת באופן מאובטח את מספר הטלפון של המשתמש, הפתרון המומלץ הוא Digital Credentials API. השימוש בממשק ה-API הזה באופן ישיר או דרך מגוון רחב של צוברים תואמים מאפשר לכם לאמת באופן מהימן את פרטי חשבון המשתמש בלי לבקש הרשאות רגישות במכשיר. לפתרון Firebase, אפשר לעיין במאמר בנושא אימות מספרי טלפון ב-Firebase.
אפשר גם לאמת את מספר הטלפון של המשתמש באמצעות קוד אימות חד-פעמי, באמצעות SMS Retriever API.
הזנה אוטומטית של מספר הטלפון של המשתמש
כדי לספק מכירות או תמיכה יעילות יותר, האפליקציה עשויה לאפשר למשתמש להזין את מספר הטלפון של המכשיר שלו באופן אוטומטי.
כדי לתמוך בפונקציונליות הזו במכשירים שמבוססים על Google Play Services, אל תצהירו על ההרשאה READ_PHONE_STATE. במקום זאת, כדאי להשתמש בספרייה Phone Number
Hint.
סינון שיחות טלפון
כדי לצמצם את ההפרעות המיותרות למשתמש, האפליקציה עשויה לסנן שיחות טלפון כדי לזהות ספאם.
כדי לתמוך בפונקציונליות הזו, אל תצהירו על ההרשאה READ_PHONE_STATE.
במקום זאת, צריך להשתמש ב-API CallScreeningService.
ביצוע שיחות טלפון
יכול להיות שהאפליקציה מאפשרת להתקשר לאיש קשר על ידי הקשה על הפרטים שלו.
כדי לתמוך בפונקציונליות הזו, צריך להשתמש בפעולת Intent 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() מציג תיבת דו-שיח שמציינת באילו הרשאות האפליקציה רוצה להשתמש, אבל לא מסבירה למה. זה עלול לבלבל את המשתמש.
בהנחיות העיצוב מוסבר איך ומתי להציג את תיבת הדו-שיח הזו, ומופיעים בה פרטים נוספים והמלצות.
טיפול בדחיות של הרשאות
האפליקציה צריכה לעזור למשתמשים להבין את ההשלכות של סירוב להענקת הרשאה, לפני שהם בוחרים לעשות זאת ואחרי כן.