עדכון אוטומטי

אנחנו רוצים לעדכן באופן אוטומטי תוספים ואפליקציות בהתאם לאותן סיבות כמו Google Chrome עצמו: כדי לשלב תיקוני באגים ואבטחה, להוסיף תכונות חדשות או שיפורי ביצועים ולשפר את ממשקי המשתמש.

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

אם אתם מארחים קובץ CRX בשרת אינטרנט ומשתמשים במדיניות ארגונית כדי לדחוף אותו למכשירים מנוהלים, המשיכו לקרוא. כדאי לקרוא גם על אירוח ואריזה.

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

סקירה כללית

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

כל כמה שעות, הדפדפן בודק אם יש אפליקציות או תוספים מותקנים שיש להם כתובת URL לעדכון. לכל אחת מכתובות ה-URL, נשלחת בקשה לאותה כתובת URL ומחפשת קובץ XML של מניפסט לעדכון. אם במניפסט העדכון מצוינת גרסה עדכנית יותר מהגרסאות שכבר מותקנות, הדפדפן יוריד ויתקין את הגרסה החדשה. כמו בעדכונים ידניים, צריך לחתום על קובץ .crx החדש באמצעות אותו מפתח פרטי כמו בגרסה הנוכחית שכבר מותקנת.

עדכון כתובת URL

אם אתם מארחים תוסף או אפליקציה משלכם, עליכם להוסיף את השדה update_url לקובץ manifest.json, באופן הבא:

{
  "name": "My extension",
  ...
  "update_url": "http://myhost.com/mytestextension/updates.xml",
  ...
}

עדכון המניפסט

מניפסט העדכון שהוחזר על ידי השרת צריך להיות מסמך XML שנראה כך (הדגשות מציינות חלקים שעליך לשנות):

<?xml version='1.0' encoding='UTF-8'?>
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
  <app appid='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'>
    <updatecheck codebase='http://myhost.com/mytestextension/mte_v2.crx' version='2.0' />
  </app>
</gupdate>

פורמט ה-XML הזה לקוח מתוך השימוש ב-Omaha, תשתית העדכונים של Google. פרטים נוספים זמינים בכתובת http://code.google.com/p/omaha/. מערכת התוספים משתמשת במאפיינים הבאים עבור רכיבי ו- של מניפסט העדכון:

appid

המזהה של התוסף או האפליקציה שנוצר על סמך גיבוב (hash) של המפתח הציבורי, כפי שמתואר במאמר אריזה. כדי למצוא את המזהה של התוסף או של אפליקציית Chrome, אפשר להיכנס לדף 'תוספים' (chrome://extensions).

עם זאת, האפליקציות המתארחות לא מופיעות בדף 'תוספים'. כדי למצוא את המזהה של כל אפליקציה, פועלים לפי השלבים הבאים:

  • פותחים את האפליקציה. אפשר לעשות זאת על ידי לחיצה על הסמל שלה בדף 'כרטיסייה חדשה'.
  • פותחים את לוח JavaScript. כדי לעשות זאת, לוחצים על סמל מפתח הברגים ובוחרים כלים > JavaScript Console.
  • יש להזין את הביטוי הבא בלוח JavaScript: chrome.app.getDetails().id. מזהה האפליקציה יוצג במסוף כמחרוזת מצוטטת.
codebase

כתובת URL לקובץ .crx.

גרסה

הלקוח משמש את הלקוח כדי לקבוע אם להוריד את הקובץ .crx שצוין על ידי codebase. היא צריכה להתאים לערך של 'גרסה' בקובץ manifest.json של הקובץ .crx.

קובץ ה-XML של המניפסט לעדכון עשוי לכלול מידע על מספר תוספים על ידי הכללת רכיבי מרובים.

בדיקה

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

שימוש מתקדם: פרמטרים של בקשה

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

ייתכן שמפתחים מתקדמים יותר ירצו לנצל את העובדה שאנחנו מוסיפים פרמטרים לבקשה של מניפסט העדכון, כדי לציין את מזהה התוסף והגרסה שלו. לאחר מכן הם יכולים להשתמש באותה כתובת URL לעדכון בכל התוספים, ולהפנות לכתובת URL עם קוד דינמי בצד השרת במקום לקובץ XML סטטי.

הפורמט של הפרמטרים של הבקשה הוא:

?x=_<extension_data>_

כאשר _<extension_data>_ הוא מחרוזת מקודדת של הפורמט:

_id=<id>_&v=_<version>_

לדוגמה, נניח שיש לכם שני תוספים, ששניהם מפנים לאותה כתובת URL לעדכון (http://test.com/extension_updates.php):

  • תוסף 1
    • מזהה: "aaaaaaaaaaaaaaaaaaaaaaaaaaaa"
    • גרסה: "1.1"
  • תוסף 2
    • מזהה: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbb שניתן באתר '
    • גרסה: "0.4"

הבקשה לעדכן כל תוסף בנפרד תהיה:

  • http://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1
  • http://test.com/extension_updates.php?x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4

ניתן לציין תוספים מרובים בבקשה אחת לכל כתובת URL ייחודית לעדכון. בדוגמה שלמעלה, אם שני התוספים מותקנים אצל המשתמש, שתי הבקשות ממוזגות לבקשה אחת:

http://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1&x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4

אם מספר התוספים המותקנים המשתמשים באותה כתובת URL לעדכון גדול מספיק, כך שכתובת ה-URL של בקשת GET ארוכה מדי (יותר מ-2,000 תווים בערך), בדיקת העדכון תנפיק בקשות GET נוספות לפי הצורך.

שימוש מתקדם: גרסת דפדפן מינימלית

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

<?xml version='1.0' encoding='UTF-8'?>
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
  <app appid='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'>
    <updatecheck codebase='http://myhost.com/mytestextension/mte_v2.crx' version='2.0' prodversionmin='3.0.193.0'/>
  </app>
</gupdate>

כך אפשר להבטיח שהמשתמשים יתעדכנו באופן אוטומטי לגרסה 2 רק אם מותקנת במכשיר שלהם Google Chrome מגרסה 3.0.193.0 ואילך.