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

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

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

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

permissions.query()

בדיקת הסטטוס של הרשאה באמצעות method 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 שבו מגדירים את שם ההרשאה. התשובה היא הבטחה כדי לפתור את הבעיה PermissionStatus לאובייקט. מהאובייקט הזה אפשר לבדוק את המצב באמצעות permissionStatus.state ל-'granted', ל-'denied' או 'prompt'. אפשר גם להטמיע אירוע handler של permissionStatus.onchange ויטפל בשינויים בהרשאה .

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

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

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

התראות בדחיפה וגם ל-midi יש עוד שהוא ספציפי לאותו API.

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

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');
});

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

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

כל הדוגמאות מופיעות כאן.

תמיכה בדפדפן

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

בעיות מוכרות

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