کاربران غیرفعال را با Idle Detection API شناسایی کنید

منتشر شده: ۱۸ مه ۲۰۲۰

Browser Support

  • کروم: ۹۴.
  • لبه: ۱۱۴.
  • فایرفاکس: پشتیبانی نمی‌شود.
  • سافاری: پشتیبانی نمی‌شود.

Source

API تشخیص زمان بیکاری، توسعه‌دهندگان را از زمان بیکاری کاربر مطلع می‌کند و مواردی مانند عدم تعامل با صفحه‌کلید، ماوس، صفحه نمایش، فعال بودن محافظ صفحه نمایش، قفل شدن صفحه نمایش یا رفتن به صفحه نمایش دیگر را نشان می‌دهد. آستانه‌ای که توسط توسعه‌دهنده تعریف می‌شود، اعلان را فعال می‌کند.

موارد استفاده پیشنهادی برای API تشخیص زمان بیکاری

نمونه‌هایی از سایت‌هایی که ممکن است از این API استفاده کنند عبارتند از:

  • برنامه‌های چت یا سایت‌های شبکه‌های اجتماعی آنلاین می‌توانند از این API برای اطلاع‌رسانی به کاربر در مورد قابل دسترس بودن مخاطبینش استفاده کنند.
  • برنامه‌های کیوسک عمومی، برای مثال در موزه‌ها، می‌توانند از این API برای بازگشت به نمای «خانه» در صورتی که دیگر کسی با کیوسک تعامل نداشته باشد، استفاده کنند.
  • برنامه‌هایی که به محاسبات پرهزینه‌ای نیاز دارند، مثلاً برای رسم نمودار، می‌توانند این محاسبات را به لحظاتی محدود کنند که کاربر با دستگاه خود تعامل دارد.

از API استفاده کنید

برای بررسی اینکه آیا API تشخیص حالت آماده به کار پشتیبانی می‌شود، از دستور زیر استفاده کنید:

if ('IdleDetector' in window) {
  // Idle Detector API supported
}

مفاهیم API

API تشخیص زمان بیکاری فرض می‌کند که سطحی از تعامل بین کاربر، عامل کاربر (یعنی مرورگر) و سیستم عامل دستگاه مورد استفاده وجود دارد. این در دو بعد نشان داده شده است:

  • وضعیت غیرفعال کاربر: active یا idle : کاربر برای مدتی با عامل کاربر تعامل داشته یا نداشته است.
  • حالت غیرفعال صفحه نمایش: locked یا unlocked : سیستم دارای یک قفل صفحه نمایش فعال (مانند محافظ صفحه نمایش) است که از تعامل با عامل کاربر جلوگیری می‌کند.

تشخیص active از idle نیاز به روش‌های اکتشافی دارد که ممکن است بسته به کاربر، عامل کاربر و سیستم عامل متفاوت باشد. همچنین باید یک آستانه نسبتاً دقیق باشد (به بخش امنیت و مجوزها مراجعه کنید).

این مدل عمداً به طور رسمی بین تعامل با محتوای خاص (یعنی صفحه وب در یک تب با استفاده از API)، عامل کاربر به طور کلی یا سیستم عامل تمایز قائل نمی‌شود؛ این تعریف به عامل کاربر واگذار شده است.

درخواست مجوز و نمونه‌سازی

اولین قدم هنگام استفاده از API تشخیص حالت آماده به کار، اطمینان از اعطای مجوز 'idle-detection' است. اگر این مجوز اعطا نشد، باید آن را با IdleDetector.requestPermission() درخواست کنید. توجه داشته باشید که فراخوانی این متد نیاز به یک اشاره کاربر دارد.

// Make sure 'idle-detection' permission is granted.
const state = await IdleDetector.requestPermission();
if (state !== 'granted') {
  // Need to request permission first.
  return console.log('Idle detection permission not granted.');
}

مرحله دوم، نمونه‌سازی IdleDetector است. حداقل threshold ۶۰۰۰۰ میلی‌ثانیه (۱ دقیقه) است. در نهایت می‌توانید با فراخوانی متد start() از IdleDetector ، تشخیص حالت سکون را آغاز کنید. این متد یک شیء با threshold حالت سکون بر حسب میلی‌ثانیه و یک signal اختیاری با AbortSignal برای لغو تشخیص حالت سکون به عنوان پارامتر می‌گیرد.

try {
  const controller = new AbortController();
  const signal = controller.signal;

  const idleDetector = new IdleDetector();
  idleDetector.addEventListener('change', () => {
    const userState = idleDetector.userState;
    const screenState = idleDetector.screenState;
    console.log(`Idle change: ${userState}, ${screenState}.`);
  });

  await idleDetector.start({
    threshold: 60000,
    signal,
  });
  console.log('IdleDetector is active.');
} catch (err) {
  // Deal with initialization errors like permission denied,
  // running outside of top-level frame, etc.
  console.error(err.name, err.message);
}

تشخیص حالت سکون را متوقف کنید

شما می‌توانید با فراخوانی متد abort() در AbortController ، تشخیص حالت سکون (idle) را لغو کنید.

controller.abort();
console.log('IdleDetector is stopped.');

پشتیبانی از ابزارهای توسعه (DevTools)

شما می‌توانید رویدادهای غیرفعال را در DevTools شبیه‌سازی کنید ، بدون اینکه واقعاً غیرفعال باشید. در DevTools، تب Sensors را باز کنید و به دنبال Emulate Idle Detector state بگردید. می‌توانید گزینه‌های مختلف را در ویدیو مشاهده کنید.

شبیه‌سازی وضعیت آشکارساز بیکاری در DevTools.

پشتیبانی از عروسک‌گردان

از نسخه ۵.۳.۱ پاپیتر، می‌توانید حالت‌های مختلف بیکاری را شبیه‌سازی کنید تا به صورت برنامه‌نویسی، نحوه تغییر رفتار برنامه وب خود را آزمایش کنید.

نسخه آزمایشی

می‌توانید API تشخیص عدم فعالیت (Idle Detection API) را در نسخه آزمایشی Ephemeral Canvas که پس از ۶۰ ثانیه عدم فعالیت، محتویات خود را پاک می‌کند، مشاهده کنید. می‌توانید تصور کنید که این API در یک فروشگاه بزرگ برای نقاشی کشیدن بچه‌ها استفاده شود.

نسخه آزمایشی بوم زودگذر

پلی‌فیل

برخی از جنبه‌های API تشخیص حالت بی‌کاری، قابلیت چندبار پر کردن (polyfillable) دارند و کتابخانه‌های تشخیص حالت بی‌کاری مانند idle.ts وجود دارند، اما این رویکردها محدود به ناحیه محتوای خود برنامه وب هستند: کتابخانه‌ای که در متن برنامه وب اجرا می‌شود، باید به طور پرهزینه‌ای رویدادهای ورودی را بررسی کند یا به تغییرات دید گوش دهد. با این حال، به طور محدودتر، کتابخانه‌ها امروزه نمی‌توانند تشخیص دهند که چه زمانی کاربر خارج از ناحیه محتوای خود به حالت بی‌کاری می‌رود (مثلاً وقتی کاربر در تب دیگری است یا به طور کلی از رایانه خود خارج شده است).

امنیت و مجوزها

تیم کروم، API تشخیص حالت بی‌کاری را با استفاده از اصول اصلی تعریف‌شده در «کنترل دسترسی به ویژگی‌های قدرتمند پلتفرم وب» ، از جمله کنترل کاربر، شفافیت و ارگونومی، طراحی و پیاده‌سازی کرده است. قابلیت استفاده از این API توسط مجوز 'idle-detection' کنترل می‌شود. برای استفاده از API، یک برنامه همچنین باید در یک زمینه امن سطح بالا اجرا شود.

کنترل کاربر و حریم خصوصی

ما همیشه می‌خواهیم از سوءاستفاده‌ی عوامل مخرب از APIهای جدید جلوگیری کنیم. وب‌سایت‌های ظاهراً مستقل، اما در واقع تحت کنترل یک نهاد واحد، ممکن است اطلاعات مربوط به زمان بیکاری کاربران را به دست آورند و داده‌ها را برای شناسایی کاربران منحصر به فرد در سراسر مبدأ، مرتبط کنند. برای کاهش این نوع حملات، API تشخیص زمان بیکاری، جزئیات رویدادهای گزارش‌شده‌ی زمان بیکاری را محدود می‌کند.

بازخورد

آیا چیزی در مورد API وجود دارد که آنطور که انتظار داشتید کار نمی‌کند؟ یا متدها یا ویژگی‌هایی وجود ندارند که برای پیاده‌سازی ایده خود به آنها نیاز دارید؟ در مورد مدل امنیتی سؤال یا نظری دارید؟ یک مشکل مربوط به مشخصات را در مخزن مربوطه GitHub ثبت کنید، یا نظرات خود را به یک مشکل موجود اضافه کنید.

گزارش مشکل در پیاده‌سازی

آیا در پیاده‌سازی کروم اشکالی پیدا کردید؟ یا پیاده‌سازی با مشخصات متفاوت است؟ یک اشکال را در new.crbug.com ثبت کنید. حتماً تا حد امکان جزئیات، دستورالعمل‌های ساده برای بازتولید را ذکر کنید و در کادر Components Blink>Input را وارد کنید.

نمایش پشتیبانی از API

آیا قصد دارید از API تشخیص زمان بیکاری استفاده کنید؟ حمایت عمومی شما به تیم کروم کمک می‌کند تا ویژگی‌ها را اولویت‌بندی کنند و به سایر فروشندگان مرورگر نشان می‌دهد که پشتیبانی از آنها چقدر حیاتی است.

  • نحوه‌ی استفاده از آن را در تاپیک گفتمان WICG به اشتراک بگذارید.
  • با استفاده از هشتگ #IdleDetection یک توییت به @ChromiumDev ارسال کنید و به ما اطلاع دهید که کجا و چگونه از آن استفاده می‌کنید.

لینک‌های مفید

تقدیرنامه‌ها

رابط برنامه‌نویسی کاربردی تشخیص زمان بیکاری (Idle Detection API) توسط سم گوتو (Sam Goto) پیاده‌سازی شده است. پشتیبانی از DevTools توسط ماکسیم سادیم (Maksim Sadym) اضافه شده است. با تشکر از جو مدلی (Joe Medley) ، کیس باسک (Kayce Basques ) و ریلی گرنت (Reilly Grant) برای بررسی‌هایشان.