การอัปเดตอัตโนมัติ

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

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

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

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

ภาพรวม

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

โดยทุก 2-3 ชั่วโมง เบราว์เซอร์จะตรวจสอบว่าส่วนขยายหรือแอปที่ติดตั้งไว้มี 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/ ระบบส่วนขยายใช้สิ่งต่อไปนี้ สำหรับองค์ประกอบ และ ของไฟล์ Manifest สำหรับการอัปเดต

appid

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

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

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

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

เวอร์ชัน

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

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

การทดสอบ

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

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

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

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

รูปแบบของพารามิเตอร์คำขอคือ

?x=_<extension_data>_

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

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

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

  • ส่วนขยาย 1
    • ID: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
    • รุ่น: "1.1"
  • ส่วนขยาย 2
    • รหัส: "bbbbbbbbbbbbbbbbbbbbbbbbbbbb ซึ่ง
    • รุ่น: "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 สิ่งนี้ ตัวอย่างเช่น หากผู้ใช้ติดตั้งส่วนขยายทั้งสอง คำขอทั้งสองจะรวมเข้าด้วยกัน คำขอเดียว:

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

หากจำนวนส่วนขยายที่ติดตั้งโดยใช้ URL อัปเดตเดียวกันมีจำนวนมากเท่ากับคำขอ GET URL ยาวเกินไป (มากกว่า 2,000 อักขระ) การตรวจสอบการอัปเดตจะออกคำขอ GET เพิ่มเติมเป็น ตามความจำเป็น

การใช้งานขั้นสูง: เวอร์ชันเบราว์เซอร์ขั้นต่ำ

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