ממשק API להרשאות באינטרנט

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

לא כל ממשקי ה-API פועלים בצורה הזו. ל-Notification API יש דרך משלו לבדוק את מצב ההרשאה הנוכחי באמצעות Notification.permission.

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

permissions.query()

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

// Check for Geolocation API permissions
navigator.permissions.query({name:'geolocation'})
    .then(function(permissionStatus) {
    console.log('geolocation permission state is ', permissionStatus.state);

    permissionStatus.onchange = function() {
        console.log('geolocation permission state has changed to ', this.state);
    };
    });

שיטת השאילתה לוקחת אובייקט PermissionDescriptor, שבו מגדירים את שם ההרשאה. התגובה היא Promise המתבטאת באובייקט PermissionStatus. מתוך האובייקט הזה, אפשר לבדוק את המצב ב-permissionStatus.state לציון 'אושרה', 'נדחתה' או 'הנחיה'. אפשר גם להטמיע handler של אירועים עבור permissionStatus.onchange ולטפל בשינויים במצב ההרשאה.

מתארי הרשאות נתמכים

בדוגמה שלמעלה, אנחנו מדגישים איך להריץ שאילתות על מצב ההרשאה לגבי מיקום גיאוגרפי באמצעות מתאר ההרשאה הבא: {name:'geolocation'}.

מתאר ההרשאה להתראות דומה בכך שהוא דורש רק מאפיין שם: {name:'notifications'}.

ל-Push ול-midi יש פרמטר נוסף שספציפי לאותו API.

להרשאת ה-Push, אפשר לציין פרמטר userVisibleOnly. מציין אם ברצונך להציג התראה עבור כל הודעת Push או לשלוח התראות שקטות (בשלב זה Chrome תומך רק בהודעות Push עם התראות). צריך להשתמש בה כך:

navigator.permissions.query({name:'push', userVisibleOnly:true})

אפליקציית Midi מאפשרת שימוש בפרמטר sysex. מציין אם אתם צריכים ו/או לקבל הודעות בלעדיות למערכת. עבור MIDI, התחילית הזו:

navigator.permissions.query({name:'midi', sysex:true})

בקשת הרשאות

בקשת ההרשאה מהמשתמש תלויה ב-API הספציפי. לדוגמה, המיקום הגיאוגרפי יציג בקשה להרשאה כשמתקשרים אל getCurrentPosition().

navigator.geolocation.getCurrentPosition(function(position) {
    console.log('Geolocation permissions granted');
    console.log('Latitude:' + position.coords.latitude);
    console.log('Longitude:' + position.coords.longitude);
});

לעומת זאת, כשמתקשרים אל requestPermission(), ההתראות יציגו בקשה למשתמש.

Notification.requestPermission(function(result) {
    if (result === 'denied') {
    console.log('Permission wasn\'t granted. Allow a retry.');
    return;
    } else if (result === 'default') {
    console.log('The permission request was dismissed.');
    return;
    }
    console.log('Permission was granted for notifications');
});

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

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

כאן תוכלו למצוא את כל הדוגמאות.

תמיכה בדפדפן

Chrome הוא הדפדפן הראשון שמטמיע את ההטמעה הזו, Mozilla מתכננת לספק את האפשרות הזו, ו-Microsoft מביעה עניין ב-API.

בעיות מוכרות

  • לא תוצג שוב בקשה למיקום הגיאוגרפי אם המשתמש יסגור את בקשת ההרשאה. עם זאת, סטטוס ההרשאה נשאר 'הנחיה'. [bugs.chromium.org]