تمكّننا واجهة برمجة تطبيقات Push Messaging API من إرسال إشعارات إلى أي مستخدم حتى عند تم إغلاق المتصفح. يرغب العديد من المطورين في الحصول على إمكانية استخدام هذه المراسلة من أجل تحديث المحتوى ومزامنته بدون أن يكون المتصفح مفتوحًا، ولكن تتوفر لدى واجهة برمجة التطبيقات أحد القيود المهمة: يجب عليك دائمًا عرض إشعار لكل تلقي رسالة فورية واحدة.
القدرة على إرسال رسالة فورية لمزامنة البيانات على جهاز المستخدم أو إخفائها إلا أن الإشعار الذي عرضته سابقًا يمكن أن يكون مفيدًا للغاية للمستخدمين للمطوّرين، ولكن السماح لتطبيق ويب بالعمل في الخلفية بدون استخدام المستخدم معرفتها عرضة لإساءة الاستخدام.
الميزانية واجهة برمجة التطبيقات، هي واجهة برمجة تطبيقات جديدة مصمَّمة للسماح للمطوّرين بتنفيذ أعمال محدودة في الخلفية بدون إشعار المستخدم، مثل الدفع الصامت أو تنفيذ خلفية جلب. في الإصدار Chrome 60 والإصدارات الأحدث، ستتمكّن من بدء استخدام واجهة برمجة التطبيقات هذه يتطلّع فريق Chrome إلى تلقّي الملاحظات من المطوّرين.
وللسماح للمطورين باستهلاك موارد المستخدم في الخلفية، فإن شبكة الإنترنت مفهوم الميزانية باستخدام واجهة برمجة تطبيقات Budget API الجديدة. على كل مقدار من الموارد بناءً على تفاعل المستخدم الذي الإجراءات التي يمكن تنفيذها في الخلفية، مثل الدفع الصامت، حيث تستنفد كل عملية الميزانية. عندما استنفاد الميزانية، ولم يعد من الممكن تنفيذ الإجراءات في الخلفية بدون مستوى الرؤية. سيكون وكيل المستخدم مسؤولاً عن تحديد الميزانية قد تم تعيينها إلى تطبيق ويب بناءً على إرشاداته، على سبيل المثال، بدل الميزانية بتفاعل المستخدم. يمكن لكل متصفح تحديد استدلاله الخاص.
النص المختصر (TL;DR): تسمح لك واجهة برمجة تطبيقات الميزانية بحجز الميزانية واستخدام الميزانية والحصول على قائمة من الميزانية المتبقية وفهم تكلفة العمليات الأساسية
حجز الميزانية
في الإصدار 60 من Chrome والإصدارات الأحدث، ستتوفّر الطريقة navigator.budget.reserve()
.
بدون أي علامات.
تتيح لك طريقة reserve()
طلب ميزانية لعملية محدّدة
ستظهر لك قيمة منطقية للإشارة إلى ما إذا كانت الميزانية يمكن حجزها. في حال حذف
تم حجز الميزانية، ولا داعي لإشعار المستخدم بخلفيتك
عملك.
في مثال الإشعارات الفورية، يمكنك محاولة الاحتفاظ بميزانية
"silent-push" (دفع صامت) وإذا تم حل reserve()
مع true، تكون العملية
مسموح به. وإلا ستظهر القيمة "false" وستحتاج إلى عرض إشعار
self.addEventListener('push', event => {
const promiseChain = navigator.budget.reserve('silent-push')
.then((reserved) => {
if (reserved) {
// No need to show a notification.
return;
}
// Not enough budget is available, must show a notification.
return registration.showNotification(...);
});
event.waitUntil(promiseChain);
});
في Chrome 60، "silent-push" هي نوع العملية الوحيد الذي متاحة، ولكن يمكنك العثور على قائمة كاملة بأنواع العمليات في المواصفات. وليست هناك طريقة سهلة لزيادة ميزانيتك للاختبار أو تصحيح الأخطاء. لأغراض بمجرد استخدامه، ولكن كحل بديل مؤقت يمكنك إنشاء طريقة في Chrome. للأسف، لا يمكنك استخدام وضع التصفح المتخفي لإجراء ذلك سواء كان وضع ميزانية ستعرض واجهة برمجة التطبيقات ميزانية تساوي صفر في وضع التصفح المتخفي (على الرغم من وجود خطأ يؤدي إلى حدوث خطأ أثناء الاختبار).
يجب عدم استدعاء الدالة reserve()
إلا عندما تنوي تنفيذ العملية التي تجريها.
حجزها في مرحلة ما في المستقبل. لاحظ أنه إذا اتصلت بالحجز في
المثال أعلاه ولكن مع استمرار ظهور إشعار، ستظل الميزانية مستخدمة.
إحدى حالات الاستخدام الشائعة التي لا تفعّلها منصة reserve()
وحدها، هي القدرة على تنفيذ ما يلي:
وجدولة إرسال صامت من الواجهة الخلفية. تحتوي واجهة برمجة تطبيقات الميزانية على واجهات برمجة تطبيقات لتمكين
حالة الاستخدام هذه، لكنها لا تزال قيد المعالجة في Chrome ويتم العمل عليها حاليًا
لا تتوفّر إلّا بعد الإبلاغ عن المحتوى و / أو خلال فترة تجريبية من أجل المصدر.
واجهة برمجة التطبيقات للميزانية ومراحل التجربة والتقييم
هناك طريقتان، هما getBudget()
وgetCost()
، يمكن لأي تطبيق ويب استخدامهما.
للتخطيط لاستخدام ميزانيته.
في Chrome 60، تتوفّر هاتان الطريقتان في حال الاشتراك في التجربة المصدر ولكن لأغراض الاختبار، يمكنك استخدامها محليًا عن طريق تمكين الميزات التجريبية للنظام الأساسي للويب (افتح chrome://flags/#enable-experimental-web-platform-features في Chrome).
لنلقِ نظرة على كيفية استخدام واجهات برمجة التطبيقات هذه.
الحصول على ميزانيتك
يمكنك العثور على ميزانيتك المتاحة باستخدام الطريقة getBudget()
. بعض المتصفّحات
(مثل Chrome) انخفاض في الميزانية بمرور الوقت،
لإعطائك كامل
مستوى الرؤية الذي يؤدي إلى عرض صفيف من BudgetStates
، يشير إلى قيمة ميزانيتك
ستكون في أوقات مختلفة في المستقبل.
لسرد إدخالات الميزانية التي يمكننا تشغيلها:
navigator.budget.getBudget()
.then((budgets) => {
budgets.forEach((element) => {
console.log(\`At '${new Date(element.time).toString()}' \` +
\`your budget will be '${element.budgetAt}'.\`);
});
});
سيكون الإدخال الأول هو ميزانيتك الحالية وستظهر القيم الإضافية. ما ستكون عليه ميزانيتك في مراحل مختلفة في المستقبل.
At 'Mon Jun 05 2017 12:47:20' you will have a budget of '3'.
At 'Fri Jun 09 2017 10:42:57' you will have a budget of '2'.
At 'Fri Jun 09 2017 12:31:09' you will have a budget of '1'.
تتمثل إحدى فوائد تضمين مخصصات الميزانية المستقبلية في أنه يمكن للمطورين مشاركة هذه المعلومات مع الواجهة الخلفية لتعديل سلوك العميل من جهة الخادم (أي إرسال رسالة فورية فقط لتشغيل تحديث عندما يكون لدى العميل ميزانية لدفع صامت).
الحصول على تكلفة إحدى العمليات
لمعرفة تكلفة إحدى العمليات، سيؤدي الاتصال بـ getCost()
إلى عرض
رقم يشير إلى الحد الأقصى لمبلغ الميزانية الذي سيتم استهلاكه إذا اتصلت
reserve()
لهذه العملية.
على سبيل المثال، يمكننا معرفة تكلفة عدم عرض إشعار عند تلقّي رسالة فورية (مثل تكلفة إجراء الإشعارات بدون صوت) الرمز:
navigator.budget.getCost('silent-push')
.then((cost) => {
console.log('Cost of silent push is:', cost);
})
.catch((err) => {
console.error('Unable to get cost:', err);
});
في وقت كتابة هذا التقرير، سيطبع Chrome 60 ما يلي:
Cost of silent push is: 2
يُرجى العِلم أنّ استخدام الطريقتَين reserve()
وgetCost()
هو
يمكن أن تكون التكلفة الفعلية لأي عملية أقل من التكلفة التي يعرضها getCost()
.
قد يظل بإمكانك حجز عملية إذا كانت ميزانيتك الحالية أقل من ذلك.
من التكلفة المشار إليها. التفاصيل المحددة من المواصفات هي على النحو التالي
يتبَع:
هذه هي واجهة برمجة التطبيقات الحالية في Chrome، ومع استمرار إتاحة واجهة برمجة التطبيقات الجديدة على الويب التي تتطلّب القدرة على تنفيذ أعمال في الخلفية، مثل الجلب في الخلفية، ويمكن استخدام واجهة برمجة تطبيقات الميزانية عدد العمليات التي يمكنك تنفيذها دون إعلام المستخدم.
أثناء استخدامك لواجهة برمجة التطبيقات، يُرجى تقديم ملاحظاتك حول مستودع GitHub. أو الإبلاغ عن أخطاء Chrome على crbug.com.