בקשת הרשאות ב-Wear OS

keywords: wear, permissions, collection_guideslandingwear image_path: images/training/wear/multiple_permissions.png

בקשת הרשאות ב-Wear OS דומה לבקשת הרשאות באפליקציות לנייד, עם כמה תרחישי שימוש נוספים. במאמר הזה אנחנו מניחים שאתם מבינים איך פועלות ההרשאות ב-Android. אם לא, כדאי לקרוא על הרשאות ב-Android.

בדומה לאפליקציה לנייד, המשתמש צריך להעניק הרשאות לאפליקציית Wear כדי לגשת לפונקציונליות מסוימת. באפליקציות ל-Wear, צריך לספק פונקציונליות משמעותית בלי לבקש הרשאות.

תרחישים של הרשאות

יש כמה תרחישים שיכולים לקרות כשמבקשים הרשאות מסוכנות ב-Wear OS:

  • אפליקציית Wear מבקשת הרשאות לאפליקציה שפועלת במכשיר הלביש.

  • אפליקציית Wear מבקשת הרשאות לאפליקציה שפועלת בטלפון.

  • אפליקציית הטלפון מבקשת הרשאות לאפליקציה שפועלת במכשיר הלביש.

  • אפליקציית הטלפון מבקשת כמה הרשאות שאפשר להשתמש בהן רק כשהמכשיר הלביש מחובר.

כדי לראות את כל התרחישים האלה באפליקציה פעילה, אפשר לעיין בדוגמה ExerciseSampleCompose ב-GitHub.

בקטעים הבאים מוסבר כל אחד מהתרחישים האלה. מידע מפורט יותר על בקשת הרשאות זמין בקטע דפוסי בקשות הרשאה.

אפליקציית Wear מבקשת הרשאה למכשיר הלביש

כשאפליקציית Wear מבקשת הרשאה לאפליקציה שפועלת במכשיר הלביש, המערכת מציגה תיבת דו-שיח שבה המשתמש מתבקש לאשר את ההרשאה. באפליקציה, צריך לבקש הרשאות רק כשהמשתמש מבין למה ההרשאות נדרשות כדי לבצע פעולה מסוימת.

כדאי לעיין בעקרונות בנושא הרשאות כדי לוודא שאתם מספקים למשתמשים את החוויה הטובה ביותר, ולזכור לסמן את התיבה shouldShowRequestPermissionRationale() ולספק מידע נוסף לפי הצורך.

אם אפליקציה או תצוגת שעון דורשות יותר מהרשאה אחת בכל פעם, בקשות ההרשאה מופיעות אחת אחרי השנייה.

מספר מסכי הרשאות, אחד אחרי השני.
איור 1. מסכי הרשאות שמופיעים ברצף.

אפליקציית Wear מבקשת הרשאה לטלפון

כשאפליקציית Wear מבקשת הרשאה בטלפון – לדוגמה, אפליקציה למכשיר לביש רוצה גישה לתמונות או לנתונים רגישים אחרים בגרסה לנייד של האפליקציה – אפליקציית Wear צריכה להפנות את המשתמש לטלפון כדי לאשר את ההרשאה. באפליקציית הטלפון, אפשר להשתמש בפעילות כדי לספק למשתמש מידע נוסף. בפעילות, צריך לכלול שני לחצנים: אחד למתן ההרשאה ואחד לדחיית ההרשאה.

אפליקציית Wear מפנה את המשתמש לטלפון כדי להעניק הרשאה.
איור 2. המשתמש צריך לעבור לטלפון כדי לאשר את ההרשאה.

אפליקציית הטלפון מבקשת הרשאה למכשיר לביש

אם המשתמש נמצא באפליקציית טלפון והאפליקציה דורשת הרשאה למכשיר לביש – לדוגמה, כדי לטעון מראש מוזיקה למקרה שהטלפון יתנתק – אפליקציית הטלפון מפנה את המשתמש למכשיר הלביש כדי לאשר את ההרשאה. הגרסה של האפליקציה למכשיר הלביש משתמשת בשיטה requestPermissions() כדי להפעיל את תיבת הדו-שיח של הרשאות המערכת.

אפליקציית הטלפון שולחת את המשתמש למכשיר הלביש כדי להעניק הרשאה.
איור 3. שולחים את המשתמש למכשיר הלביש כדי להעניק הרשאה.

אפליקציית הטלפון מבקשת כמה הרשאות בבת אחת

איור 4. תיבת דו-שיח של הרשאות שמשתמשת בפרופיל של מכשיר משני כדי לבקש כמה הרשאות בבקשה אחת.

אפליקציות של שותפים ב-Android 12 (רמת API‏ 31) ומעלה יכולות להשתמש בפרופילים של מכשירים נלווים כשהן מתחברות לשעון. השימוש בפרופיל מפשט את תהליך ההרשמה כי הוא מאפשר להעניק קבוצה של הרשאות ספציפיות לסוג המכשיר בשלב אחד.

ההרשאות שכלולות בחבילה ניתנות לאפליקציה הנלווית ברגע שהמכשיר מתחבר, והן תקפות רק בזמן שהמכשיר משויך. מחיקת האפליקציה או הסרת השיוך יסירו את ההרשאות. פרטים נוספים זמינים במאמר AssociationRequest.Builder.setDeviceProfile().

דפוסים של בקשות הרשאה

יש דפוסים שונים לבקשת הרשאות מהמשתמשים. לפי סדר העדיפות:

  • לבקש את ההרשאה בהקשר המתאים אם ברור שהיא נחוצה לפונקציונליות ספציפית, אבל לא נחוצה להפעלת האפליקציה כולה.

  • הסבר בהקשר כשסיבת הבקשה להרשאה לא ברורה וההרשאה לא נחוצה להרצת האפליקציה כולה.

הדפוסים האלה מוסברים בקטעים הבאים.

שאלות בהקשר

בקשת הרשאות כשברור למשתמש למה נדרשת ההרשאה כדי לבצע פעולה מסוימת. הסיכוי שהמשתמשים יאשרו הרשאה גבוה יותר אם הם מבינים את הקשר שלה לתכונה שבה הם רוצים להשתמש.

לדוגמה, אפליקציה עשויה לדרוש את מיקום המשתמש כדי להציג מקומות מעניינים בקרבת מקום. כשהמשתמש מקיש כדי לחפש מקומות בקרבת מקום, האפליקציה יכולה לבקש מיד את הרשאת המיקום כי יש קשר ברור בין חיפוש מקומות בקרבת מקום לבין הצורך בהרשאת המיקום. הקשר הזה ברור מאליו, ולכן אין צורך להציג במסך האפליקציה הסברים נוספים.

האפליקציה מבקשת הרשאה רק כשברור שהיא נחוצה.
איור 5. בקשת הרשאה בהקשר.

הסבר בהקשר

איור 6 מציג דוגמה להדרכה בהקשר. האפליקציה לא דורשת הרשאות כדי להפעיל את הטיימר, אבל מוצג רמז הסבר מוטבע שמציין שחלק מהפעילות – זיהוי המיקום – נעול. כשמשתמש מקיש על רמז, מופיע מסך בקשת הרשאה שמאפשר למשתמש לבטל את הנעילה של זיהוי המיקום.

אפשר להשתמש בשיטה shouldShowRequestPermissionRationale() כדי לעזור לאפליקציה להחליט אם לספק מידע נוסף. פרטים נוספים זמינים במאמר בנושא בקשת הרשאות לאפליקציה. לחלופין, אפשר לבדוק איך אפליקציית הרמקול לדוגמה ב-GitHub מטפלת בהצגת מידע.

כשהאפליקציה צריכה את ההרשאה, היא מסבירה למה היא נחוצה.
איור 6. הסבר בהקשר.

טיפול בדחייה

אם המשתמש דוחה בקשת הרשאה שלא חיונית לפעילות המיועדת, אל תחסמו את המשך הפעילות. אם חלקים מסוימים בפעילות מושבתים בגלל הרשאה שנדחתה, צריך לספק משוב חזותי שניתן לפעולה.

באיור 7 מוצג סמל של מנעול שמציין שתכונה נעולה כי המשתמש לא העניק הרשאה להשתמש בה.

אם המשתמש דוחה את ההרשאה, מוצג סמל של נעילה לצד התכונה המשויכת.
איור 7. סמל נעילה שמראה שתכונה נעולה בגלל שאין הרשאה.

כשתיבת דו-שיח של הרשאה למכשיר לביש שנשללה בעבר מופיעה בפעם השנייה, היא כוללת את האפשרות דחייה, לא להציג שוב. אם המשתמש בוחר באפשרות הזו, הדרך היחידה שבה הוא יוכל להעניק את ההרשאה הזו בעתיד היא להיכנס לאפליקציית ההגדרות של המכשיר הלביש.

המערכת מציעה להפסיק את הבקשה להרשאה.
איור 8. המשתמש יכול לגשת דרך ההגדרות לבקשת הרשאה שנדחתה בעבר פעמיים.

איך מטפלים בדחיית בקשת הרשאה

הרשאות לשירותים

רק פעילות יכולה לקרוא לשיטה requestPermissions(). לכן, אם המשתמש מקיים אינטראקציה עם האפליקציה באמצעות שירות – למשל, באמצעות תצוגת שעון – השירות חייב לפתוח פעילות לפני שהוא מבקש את ההרשאה. בפעילות הזו, מספקים הסבר נוסף על הסיבה לכך שנדרשת ההרשאה.

באופן כללי, לא כדאי לבקש הרשאות עבור פני שעון. במקום זאת, מטמיעים סיבוך ומאפשרים למשתמש לבחור אילו נתונים יוצגו דרך הסיבוך.

הגדרות

משתמש יכול לשנות את ההרשאות של אפליקציית Wear בכל שלב בהגדרות. כשהמשתמש מנסה לבצע פעולה שדורשת הרשאה, צריך קודם לקרוא לשיטה checkSelfPermission() כדי לבדוק אם לאפליקציה יש הרשאה לבצע את הפעולה.

חשוב לבצע את הבדיקה הזו גם אם המשתמש כבר העניק את ההרשאה בעבר, כי יכול להיות שהוא ביטל אותה מאוחר יותר.

המשתמש יכול לשנות את ההרשאות דרך אפליקציית ההגדרות.
איור 9. המשתמש יכול לשנות את ההרשאות באמצעות אפליקציית ההגדרות.