זיהוי משתמשים לא פעילים באמצעות Idle Detection API

אפשר להשתמש ב-Idle Detection API כדי לגלות מתי המשתמש לא משתמש במכשיר שלו באופן פעיל.

מה ה-Idle Detection Detection API?

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

תרחישים לדוגמה מומלצים ל-Idle Detection Detection API

דוגמאות לאתרים שעשויים להשתמש בממשק API זה:

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

הסטטוס הנוכחי

שלב סטטוס
1. יצירת הסבר הושלם
2. יצירת טיוטה ראשונית של מפרט הושלם
3. אוספים משוב וחוזרים על העיצוב בתהליך
4. גרסת מקור לניסיון הושלם
5. הפעלה Chromium 94

איך משתמשים ב-Idle Detection Detection API

זיהוי תכונות

כדי לבדוק אם יש תמיכה ב-Idle Detection API, משתמשים ב:

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

מושגים ב-Idle Detection Detection API

ה-Idle Detection API מניח שיש רמה מסוימת של מעורבות בין המשתמש, סוכן המשתמש (כלומר, הדפדפן) לבין מערכת ההפעלה של המכשיר שבו נעשה שימוש. הדבר מיוצג בשני מאפיינים:

  • המצב של משתמש לא פעיל: active או idle: למשתמש הייתה או לא הייתה אינטראקציה איתו במשך תקופה מסוימת.
  • המצב של חוסר פעילות במסך: locked או unlocked: למערכת יש נעילת מסך פעילה (כמו שומר מסך) שמונעת אינטראקציה עם סוכן המשתמש.

כדי להבחין בין active לבין idle צריך היוריסטיקה שעשויים להשתנות בהתאם למשתמש, לסוכן המשתמש ולמערכת ההפעלה. גם הסף צריך להיות משוער באופן סביר (מידע נוסף מפורט במאמר אבטחה והרשאות).

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

שימוש ב-Idle Detection API

השלב הראשון כשמשתמשים ב-Idle Detection Detection 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 הוא 60,000 אלפיות השנייה (דקה אחת). סוף סוף אפשר להתחיל את זיהוי חוסר הפעילות על ידי קריאה ל-method 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.

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

תמיכה בכלי הפיתוח

החל מ-Chromium 94, אפשר ליצור אמולציה של אירועים ללא פעילות בכלי הפיתוח בלי שיהיה פעיל בפועל. בכלי הפיתוח, פותחים את הכרטיסייה חיישנים ומחפשים את האפשרות אמולציה של מצב גלאי לא פעיל. בסרטון שבהמשך אפשר לראות את האפשרויות השונות.

אמולציה של מצב 'זיהוי לא פעיל' בכלי הפיתוח.

תמיכה ב-Puppeteer

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

הדגמה (דמו)

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

הדגמה של לוח הציור הזמני

מילוי פולימר

יש היבטים מסוימים ב-Idle Detection Detection API שניתן למלא או לא פעילים, כמו idle.ts, אבל הגישות האלה מוגבלות לאזור התוכן של אפליקציית האינטרנט: הספרייה שפועלת בהקשר של אפליקציית האינטרנט צריכה לבצע סקרים יקרים כדי לזהות אירועי קלט או להאזין לשינויים בחשיפה. אבל באופן מגביל יותר, ספריות לא יכולות לדעת כיום מתי משתמש עובר למצב לא פעיל מחוץ לאזור התוכן שלו (למשל, כשמשתמש נמצא בכרטיסייה אחרת או כשהוא מנותק מהמחשב).

אבטחה והרשאות

צוות Chrome תכנן והטמיע את ה-Idle Detection API באמצעות עקרונות הליבה שהוגדרו במאמר שליטה בגישה לתכונות מתקדמות של פלטפורמת אינטרנט, כולל בקרת משתמשים, שקיפות וארגונומיה. היכולת להשתמש ב-API הזה נשלטת באמצעות ההרשאה 'idle-detection'. כדי להשתמש ב-API, האפליקציה חייבת לפעול גם בהקשר מאובטח ברמה העליונה.

אמצעי בקרה על פרטיות משתמשים

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

משוב

צוות Chrome רוצה לשמוע על חוויית השימוש שלך ב-Idle Detection API.

לספר לנו על עיצוב ה-API

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

דיווח על בעיה בהטמעה

האם מצאת באג בהטמעה של Chrome? או שההטמעה שונה מהמפרט? דווחו על באג בכתובת new.crbug.com. הקפידו לכלול כמה שיותר פרטים, הוראות פשוטות לשחזור, והזינו Blink>Input בתיבה רכיבים. גליץ' הוא כלי מעולה לשיתוף גיבויים מהירים וקלים.

הבעת תמיכה ב-API

האם בכוונתך להשתמש ב-Idle Detection Detection API? התמיכה הציבורית שלכם עוזרת לצוות של Chrome לתעדף תכונות, ומראה לספקי דפדפנים אחרים עד כמה חשוב לתמוך בהן.

קישורים שימושיים

אישורים

ממשק API לזיהוי ללא פעילות הוטמע על ידי Sam Goto. נוספה תמיכה בכלי הפיתוח על ידי Maksim Sadym. תודה ל-Joe Medley, Kayce Basques ו-Reilly Grant על הביקורות על המאמר הזה. התמונה הראשית היא של פרננדו הרננדז בתוכנית UnFlood.