Permissions API للويب

إذا كنت قد استخدمت واجهة برمجة تطبيقات رصد الموقع الجغرافي من قبل، فمن المحتمل أنك أردت التحقق مما إذا كان لديك إذن لاستخدام رصد الموقع الجغرافي بدون التسبب في إشعار لم يكن ذلك ممكنًا. كان عليك طلب الموضع الحالي، وسيشير ذلك إلى حالة الإذن أو سيؤدي إلى ظهور طلب للمستخدم.

لا تعمل كل واجهات برمجة التطبيقات بهذه الطريقة. تضم واجهة برمجة التطبيقات Notifications API طريقتها الخاصة في السماح التحقّق من حالة الإذن الحالية من خلال Notification.permission

ومع نمو نظام الويب الأساسي في واجهات برمجة التطبيقات، يجب أن تكون هناك طريقة واحدة قياسية على المطوّرين التحقّق من حالة الإذن بدلاً من تذكُّره وكيف تعمل جميع واجهات برمجة التطبيقات تتوفر واجهة Permission API في الإصدار 43 من Chrome أن تكون هذه الطريقة الوحيدة القياسية للتحقق من حالة الإذن لواجهة برمجة التطبيقات.

permissions.query()

تحقَّق من حالة أحد الأذونات باستخدام الطريقة permissions.query(). سيؤدي هذا إلى إرجاع حالة "ممنوح" (لديك إذن)، مرفوض (تم منعك من الدخول إلى واجهة برمجة التطبيقات) أو مطالبة (احتياجات المستخدم يُطلب منك ذلك). على سبيل المثال:

// 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' أو "الطلب". يمكنك أيضًا تنفيذ حدث معالج permissionStatus.onchange ومعالجة التغييرات في الإذن الولاية.

أدوات وصف الأذونات المتوافقة

في المثال أعلاه، نوضّح كيفية طلب البحث عن حالة الإذن رصد الموقع الجغرافي باستخدام واصف الأذونات التالي: {name:'geolocation'}

ويتشابه واصف إذن الإشعار في أنه لا يتطلب سوى سمة الاسم: {name:'notifications'}

الدفع ميدي، ولكلّ منها الخاصة بواجهة برمجة التطبيقات هذه.

للحصول على إذن الإرسال، يمكنك توفير مَعلمة userVisibleOnly. يشير هذا إلى ما إذا كنت تريد عرض إشعار لكل رسالة فورية أو التمكن من إرسال إشعارات فورية صامتة (في الوقت الحالي Chrome فقط تدعم الرسائل الفورية ذات الإشعارات). يمكنك استخدامها على النحو التالي:

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

يسمح Midi بالمَعلمة sysex. يشير هذا إلى ما إذا كنت بحاجة إلى و/أو استلام الرسائل الحصرية للنظام. بالنسبة إلى جهاز midi، يكون هذا الناتج:

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

طلب الأذونات

يعتمد طلب الإذن من المستخدم على واجهة برمجة التطبيقات المحدّدة. على سبيل المثال: سيعرض رصد الموقع الجغرافي طلبًا للحصول على إذن عند استدعاء 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 تتيح طريقة متسقة لمراقبة حالة الأذونات مع إمكانية دعم مجموعة من واجهات برمجة التطبيقات المفعّلة حاليًا على الويب.

تتمثل الميزة الكبيرة لهذا الأمر في أنه يتيح لك بناء تجارب أفضل المستخدمين، لا تطلب منك إلا عندما يكون واضحًا للمستخدم سبب احتياجك إلى هذه الامتيازات والاستفادة بشكل كامل من واجهات برمجة التطبيقات هذه عندما تعلم أنك كنت من ممنوحًا للإذن.

يمكنك الاطّلاع على مجموعة كاملة من الأمثلة هنا.

دعم المتصفح

Chrome هو المتصفّح الأوّل الذي يستخدم هذه الميزة، وتخطّط Mozilla لتوفير الشحن و Microsoft أبدت اهتمامًا بواجهة برمجة التطبيقات.

المشاكل المعروفة

  • لن تؤدي ميزة رصد الموقع الجغرافي إلى إعادة عرض طلب إذا رفض المستخدم الإذن. طلبك. ومع ذلك، تظل حالة الإذن "مطلب". [bugs.chromium.org]