เราต้องการให้ส่วนขยายและแอปอัปเดตโดยอัตโนมัติด้วยเหตุผลเดียวกับ 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 ขึ้นไป