PracticU

הרשאות מסוכנות על אנדרואיד

בלי כתוביותעם כתוביות
PracticU › קורס פיתוח אפליקציות - לאנדרואיד - Android - ב-JAVA › הרשאות מסוכנות על אנדרואיד
מילון מושגים:
הרשאה - קביעה אילו פעולות ומשאבים מותרים למשתמש או לתהליך לאחר שזהותו אומתה. שולטת במי רשאי לעשות מה.
כפתור - רכיב בממשק המשתמש שהמשתמש לוחץ עליו כדי להפעיל פעולה, כמו שליחת טופס או מעבר לדף אחר.
חריגה - מצב שגיאה שמתרחש בזמן ריצת התוכנית ומפסיק את המהלך הרגיל, אלא אם הקוד תופס ומטפל בו.
פונקציה - קטע קוד בעל שם שמבצע משימה מוגדרת, מקבל ערכי קלט (פרמטרים) ויכול להחזיר תוצאה. מאפשרת לארגן קוד ולהשתמש בו שוב.
SDK - ערכת כלים לפיתוח: אוסף ספריות, כלים ותיעוד שמאפשרים לבנות תוכנה לפלטפורמה או שירות מסוימים.
מערך - מבנה נתונים שמאחסן אוסף ערכים מאותו סוג ברצף, שאפשר לגשת אליהם לפי מספר מיקום (אינדקס).
מחרוזת - סוג נתונים שמייצג רצף של תווים, כלומר טקסט, ומשמש לאחסון מילים, משפטים או כל רצף סימנים.

הרשאות מסוכנות על אנדרואיד
איך מציגים את רשימת אנשי הקשר של המשתמש כשההרשאה היא Dangerous, ואיך מטפלים בה בזמן ריצה כך שהאפליקציה תעבוד גם ב-Lollipop וגם ב-Marshmallow ומעלה.
השלבים העיקריים
1. בלי הרשאה ב-manifest: לחיצה על הכפתור show user contacts זורקת exception של permission denial, שמוצג ב-TextView. זה קורה גם ב-Lollipop וגם ב-Marshmallow.
2. הוספת READ_CONTACTS ב-manifest: ב-Lollipop זה מספיק והרשימה מוצגת. ב-Marshmallow עדיין מתקבל אותו exception.
3. הוצאת הקוד לפונקציה: הקוד שמביא את השמות דרך ContactsManager ומציג אותם עובר לפונקציה showContacts, עטוף ב-try/catch שמציג את הודעת ה-exception.
4. בדיקה בלחצן: מבקשים הרשאה רק אם גרסת ה-SDK היא Marshmallow ומעלה וגם ההרשאה עדיין PERMISSION_DENIED. אחרת קוראים ישר ל-showContacts.
5. בקשת ההרשאה: requestPermissions מקבלת מערך של הרשאות ו-request code, כאן 0. אפשר לבקש כמה הרשאות בבת אחת, והמשתמש מאשר כל אחת.
6. טיפול בתשובה: המשתמש רואה דיאלוג, והמערכת קוראת ל-onRequestPermissionsResult. בודקים שההרשאה במקום 0 היא READ_CONTACTS, ושהתוצאה במקום 0 היא PERMISSION_GRANTED. אם כן קוראים ל-showContacts, ואם לא כותבים ב-TextView "permission not granted".
7. הרצה: ב-Lollipop אין דיאלוג והרשימה מוצגת. ב-Marshmallow מופיע דיאלוג allow או deny. אחרי allow המשתמש לא נשאל שוב, גם אם סוגרים ומריצים מחדש.
פקודות והגדרות
- Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
- checkSelfPermission(Manifest.permission.READ_CONTACTS) == PackageManager.PERMISSION_DENIED
- requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, 0)
- onRequestPermissionsResult(requestCode, permissions, grantResults)
שימו לב
המשתמש יכול לבטל הרשאה גם אחרי שאישר אותה. ב-App Info, Settings של האפליקציה ואז Permissions, הוא מכבה אותה בלחיצה. בכניסה הבאה האפליקציה שוב צריכה לבקש אישור. לכן לכל Dangerous Permission צריך לבקש בזמן ריצה ולטפל בתשובה, מלבד מה שכבר אושר.
אחרי ההרצאה אפשר לכתוב בדיקה ובקשה של Dangerous Permission בזמן ריצה, ולהגיב לאישור ולסירוב של המשתמש.

פרקי ההרצאה: הרשאות מסוכנות על אנדרואיד

  1. 00:00

    הצגת רשימת אנשי הקשר בלחצן

  2. 00:41

    קריאת אנשי קשר עם Content Resolver

  3. 02:19

    תפיסת חריגה כשאין הרשאה

  4. 02:56

    הרצה ללא הרשאה במניפסט

  5. 03:54

    הוספת READ_CONTACTS למניפסט

  6. 04:51

    הוצאת הקוד לפונקציה נפרדת

  7. 06:15

    בדיקת גרסה ו-checkSelfPermission

תמלול ההרצאה: הרשאות מסוכנות על אנדרואיד

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

  1. 00:02

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

  2. 00:22

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

  3. 00:43

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

  4. 00:58

    יש לנו כאן הרייליסט, הפעם של סטרינג, יש לנו את ה-Content Resolver שמאפשר להביא מידע לגבי קונטנט כלשהו. כאן אנחנו נכנסים לרשימת הקונטקט ואנחנו רוצים להביא את ה-Display Name, להוסיף את זה ל-ArrayList ולבסוף להחזיר את רשימת הקונטקט כאשר אנחנו רוצים לראות רק Display Name,

  5. 01:24

    מה השם של הקונטקט של היוזר. אוקיי, אז מה שאנחנו רוצים לעשות זה הרייליסט של string, בואו נקרא לזה contacts ובואו ניקח את ה-contacts manager, get contacts וככה אנחנו בעצם מקבלים את רשימת אנשי הקשר של ה-user, רק את השמות שלהם.

  6. 01:49

    מה שאנחנו רוצים לעשות זה לרוץ על זה ב-forEach, עבור כל string contact בודד ברשימת ה-contacts, נשים את זה באותה שורה, אנחנו רוצים textViewContacts.append את ה-contact משהו שר עם איזה שהוא Enter כזה, בהתחלה בואו ניקח את ה-textViewContacts ונבצע setText, נאפס אותו, ובואו נעטוף את הכל ב-tryCatch,

  7. 02:30

    כי במידה ותתרחש exception עקב חוסר בפרמישן, אנחנו רוצים לתפוס ב-catch את ה-exception ולהציג את המידע. בואו ניגש ל-textViewContext, נשתמש בו to setText את המסג' של ה-exception.

  8. 02:49

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

  9. 03:07

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

  10. 03:37

    opening provider, contact provider, בעזרת הפרוסס הזה, requires read contacts or write contacts. בואו ניגש למארשמלו, show user contacts ונקבל בדיוק אותו הדבר.

  11. 03:54

    אז זה כמובן לא מפליא אותנו, אבל אנחנו עכשיו ניגשים למניפסט, use as permission, ואנחנו רוצים to read contacts. הנה יש לנו עכשיו permission שביקשנו במניפסט, בואו נראה אם זה מספיק.

  12. 04:11

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

  13. 04:35

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

  14. 04:54

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

  15. 05:13

    אז בואו נעשה את זה. הדבר הראשון שאנחנו צריכים לבצע זה לקחת את הקוד הזה ולהוציא אותה החוצה לפונקציה. בואו נקרא לה private void show contacts כי אנחנו הולכים לקרוא את הקוד הזה בעצם כמה פעמים אחרי שנבשה איזושהי בדיק סוימת.

  16. 05:34

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

  17. 05:50

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

  18. 05:59

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

  19. 06:18

    אז אנחנו צריכים לשאול פה את השאלה הבאה. אם build.version.sdkint, המספר של ה-sdk, הוא יותר גדול או שווה לbuild.versionCodes.m, שזה מרשמלו, וגם אנחנו בעצם רוצים לבדוק שני דברים, check self permission עבור manifest נקודה permission נקודה

  20. 07:01

    ואנחנו רוצים את ה read contacts אם כל הדבר הזה שווה ל package manager נקודה permission denied אז מה השאלה הזאת בעצם שואלת אנחנו שואלים פה האם אנחנו צריכים לבקש runtime permission מתי אנחנו רוצים לבקש runtime permission? אם אנחנו נמצאים במארשמלו או מעל וגם לא קיבלנו

  21. 07:35

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

לקורס המלא: קורס פיתוח אפליקציות לאנדרואיד

ההרצאה הקודמת: הרשאות רגילות על אנדרואיד

ההרצאה הבאה: זיהוי מגע באנדרואיד

הרצאות קשורות מקורסים אחרים

  • הרשאות על קבצים - חלק 1
  • הרשאות NTFS
  • הרצת הטסטים האוטומטיים - אנדרואיד סטודיו
  • חיבור אייפון וסימולטור של אנדרואיד ל-Flutter

קורסים נוספים במסלול

  • קורס יסודות התכנות - שפת JAVA - קורס ג'אווה למתחילים
  • קורס פיתוח אפליקציות - לאייפון iPhone iOS - ב-Swift-Xcode
  • קורס פלאטר - Flutter - שפת DART של גוגל למובייל - פיתוח אפליקציות לאנדרואיד ואייפון
  • קורס PhoneGap - פיתוח אפליקציות לאנדרואיד ואייפון