อัปเดตอัตโนมัติ

เราต้องการให้ส่วนขยายและแอปอัปเดตโดยอัตโนมัติด้วยเหตุผลเดียวกับ Google Chrome เอง ซึ่งก็คือเพื่อรวมการแก้ไขข้อบกพร่องและความปลอดภัย เพิ่มฟีเจอร์ใหม่หรือการปรับปรุงประสิทธิภาพ และปรับปรุงอินเทอร์เฟซผู้ใช้

หากคุณเผยแพร่โดยใช้แดชบอร์ดสำหรับนักพัฒนาซอฟต์แวร์ Chrome คุณควรละเว้นหน้านี้ ข้อมูลที่ส่งไปยัง Chrome เว็บสโตร์ที่ผ่านการแสดงตัวอย่างจะพร้อมใช้งานโดยอัตโนมัติในข้อมูลรายการ Chrome เว็บสโตร์ของส่วนขยายและนำไปใช้งานกับผู้ใช้ปลายทาง

หากคุณฝากไฟล์ CRX ไว้ในเว็บเซิร์ฟเวอร์และใช้นโยบายขององค์กรเพื่อพุชไปยังอุปกรณ์ที่มีการจัดการ โปรดอ่านต่อ นอกจากนี้ คุณควรอ่านโฮสติ้งและการบรรจุด้วย

ก่อนหน้านี้เมื่อระบบรองรับส่วนขยายนอกร้านค้า คุณสามารถอัปเดตไบนารีและส่วนขยายพร้อมกันได้ อย่างไรก็ตาม ส่วนขยายที่โฮสต์ใน Chrome เว็บสโตร์จะอัปเดตโดยใช้กลไกการอัปเดตของ Chrome ซึ่งนักพัฒนาแอปไม่สามารถควบคุมได้ นักพัฒนาส่วนขยายควรระมัดระวังเกี่ยวกับการอัปเดตส่วนขยายที่ต้องอาศัยไบนารี (เช่น ส่วนขยายเดิมที่ใช้ NPAPI)

ภาพรวม

  • ไฟล์ Manifest อาจมีช่อง "update_url" ซึ่งชี้ไปยังตำแหน่งที่จะทำการตรวจสอบการอัปเดต
  • เนื้อหาที่การตรวจสอบการอัปเดตแสดงคือเอกสาร XML ไฟล์ Manifest ของการอัปเดตที่แสดงรายการส่วนขยายเวอร์ชันล่าสุด

ทุกๆ 2-3 ชั่วโมง เบราว์เซอร์จะตรวจสอบว่าส่วนขยายหรือแอปที่ติดตั้งไว้มี URL การอัปเดตหรือไม่ สำหรับ URL แต่ละรายการ ระบบจะส่งคำขอไปยัง URL นั้นเพื่อค้นหาไฟล์ XML ไฟล์ Manifest ของการอัปเดต หากไฟล์ Manifest อัปเดตพูดถึงเวอร์ชันที่ใหม่กว่าเวอร์ชันที่ติดตั้งไว้ เบราว์เซอร์จะดาวน์โหลดและติดตั้งเวอร์ชันใหม่ เช่นเดียวกับการอัปเดตด้วยตนเอง ไฟล์ .crx ใหม่ต้องลงนามด้วยคีย์ส่วนตัวเดียวกันกับเวอร์ชันที่ติดตั้ง

อัปเดต URL

หากคุณโฮสต์ส่วนขยายหรือแอปของคุณเอง คุณต้องเพิ่มช่อง "update_url" ลงในไฟล์ manifest.json ดังนี้

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

อัปเดตไฟล์ Manifest

ไฟล์ Manifest ของการอัปเดตที่เซิร์ฟเวอร์แสดงผลควรเป็นเอกสาร 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/ ระบบส่วนขยายใช้แอตทริบิวต์ต่อไปนี้สำหรับองค์ประกอบ <app> และ <updatecheck> ของไฟล์ Manifest การอัปเดต

appid

รหัสส่วนขยายหรือรหัสแอปที่สร้างขึ้นตามแฮชของคีย์สาธารณะ ตามที่อธิบายไว้ในการแพ็กเกจ คุณดูรหัสของส่วนขยายหรือแอป Chrome ได้โดยไปที่หน้าส่วนขยาย (chrome://extensions)

แต่แอปที่ฝากโฮสต์ไว้จะไม่แสดงในหน้าส่วนขยาย คุณดูรหัสของแอปใดก็ได้โดยทำตามขั้นตอนต่อไปนี้

  • เปิดแอป โดยคลิกไอคอนแอปในหน้าแท็บใหม่
  • เปิดคอนโซล JavaScript ซึ่งทำได้โดยคลิกไอคอนประแจ แล้วเลือกเครื่องมือ > คอนโซล JavaScript
  • ป้อนนิพจน์ต่อไปนี้ในคอนโซล JavaScript: chrome.app.getDetails().id คอนโซลจะแสดงรหัสของแอปเป็นสตริงที่มีเครื่องหมายคำพูด
ฐานของโค้ด

URL ไปยังไฟล์ .crx

เวอร์ชัน

ไคลเอ็นต์ใช้เพื่อระบุว่าควรดาวน์โหลดไฟล์ .crx ที่ระบุโดย codebase หรือไม่ ค่านี้ควรตรงกับค่า "version" ในไฟล์ manifest.json ของไฟล์ .crx

ไฟล์ XML ของไฟล์ Manifest การอัปเดตอาจมีข้อมูลเกี่ยวกับส่วนขยายหลายรายการโดยรวมองค์ประกอบ <app> หลายรายการ

การทดสอบ

ความถี่ในการตรวจสอบการอัปเดตเริ่มต้นคือ 2-3 ชั่วโมง แต่คุณสามารถบังคับให้อัปเดตได้โดยใช้ปุ่มอัปเดตชิ้นงานเลยในหน้าชิ้นงาน

การใช้งานขั้นสูง: พารามิเตอร์คำขอ

กลไกการอัปเดตอัตโนมัติพื้นฐานออกแบบมาเพื่อลดการทำงานฝั่งเซิร์ฟเวอร์ คุณเพียงแค่เพิ่มไฟล์ XML แบบคงที่ลงในเว็บเซิร์ฟเวอร์ เช่น Apache และอัปเดตไฟล์ XML นั้นเมื่อคุณเผยแพร่ส่วนขยายเวอร์ชันใหม่

นักพัฒนาแอปขั้นสูงอาจใช้ประโยชน์จากการที่เราเพิ่มพารามิเตอร์ลงในคําขอไฟล์ Manifest อัปเดตเพื่อระบุรหัสและเวอร์ชันของส่วนขยาย จากนั้นจะใช้ URL การอัปเดตเดียวกันสำหรับส่วนขยายทั้งหมดได้ โดย URL จะชี้ไปยัง URL ที่เรียกใช้โค้ดฝั่งเซิร์ฟเวอร์แบบไดนามิกแทนไฟล์ XML แบบคงที่

รูปแบบของพารามิเตอร์คําขอมีดังนี้

?x=_<extension_data>_

โดยที่ _<extension_data>_ คือสตริงที่เข้ารหัส URL ในรูปแบบต่อไปนี้

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

ตัวอย่างเช่น สมมติว่าคุณมีส่วนขยาย 2 รายการที่ชี้ไปยัง URL การอัปเดตเดียวกัน (http://test.com/extension_updates.php)

  • ส่วนขยาย 1
    • รหัส: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
    • เวอร์ชัน: "1.1"
  • ส่วนขยาย 2
    • รหัส: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
    • เวอร์ชัน: "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 การอัปเดตที่ไม่ซ้ำกันแต่ละรายการ ในตัวอย่างนี้ หากผู้ใช้ติดตั้งทั้ง 2 ส่วนขยายไว้ ระบบจะรวมคําขอทั้ง 2 รายการเป็นคําขอเดียว

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 จะอัปเดตโดยอัตโนมัติ แต่อาจใช้เวลา 2-3 วันก่อนที่ฐานผู้ใช้ส่วนใหญ่จะอัปเดตเป็นรุ่นใหม่ หากต้องการให้การอัปเดตหนึ่งๆ มีผลกับ Google Chrome เวอร์ชันที่เท่ากับหรือสูงกว่าเวอร์ชันที่ระบุเท่านั้น ให้เพิ่มแอตทริบิวต์ "prodversionmin" ลงในองค์ประกอบ <app> ในไฟล์ Manifest อัปเดต เช่น

<?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 ขึ้นไป