เราต้องการให้ส่วนขยายและแอปได้รับการอัปเดตอัตโนมัติด้วยเหตุผลบางประการเหมือนกับ Google Chrome เอง ได้แก่ เพื่อรวมการแก้ไขข้อบกพร่องและความปลอดภัย เพิ่มฟีเจอร์ใหม่หรือการปรับปรุงประสิทธิภาพ และปรับปรุงอินเทอร์เฟซผู้ใช้
หากคุณเผยแพร่โดยใช้หน้าแดชบอร์ดสำหรับนักพัฒนาซอฟต์แวร์ Chrome คุณควรละเว้นหน้านี้ การส่งใน Chrome เว็บสโตร์ที่ผ่านการแสดงตัวอย่างจะพร้อมใช้งานโดยอัตโนมัติในรายการรายการใน 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/ ระบบส่วนขยายใช้แอตทริบิวต์ต่อไปนี้สำหรับองค์ประกอบ
- appid
ส่วนขยายหรือรหัสแอปซึ่งสร้างขึ้นตามแฮชของคีย์สาธารณะตามที่อธิบายไว้ในแพ็กเกจ คุณดูรหัสของส่วนขยายหรือแอป Chrome ได้โดยไปที่หน้าส่วนขยาย (chrome://extensions)
แต่แอปที่โฮสต์จะไม่แสดงอยู่ในหน้าส่วนขยาย คุณค้นหารหัสของแอปใดก็ได้โดยทำตามขั้นตอนต่อไปนี้
- เปิดแอป ซึ่งทำได้โดยการคลิกที่ไอคอนของแอปบนหน้าแท็บใหม่
- เปิดคอนโซล JavaScript ซึ่งทำได้โดยคลิกไอคอนเครื่องมือและเลือกเครื่องมือ > คอนโซล JavaScript
- ป้อนนิพจน์ต่อไปนี้ในคอนโซล JavaScript:
chrome.app.getDetails().id
คอนโซลจะแสดงรหัสของแอปเป็นสตริงในเครื่องหมายคำพูด
- ฐานของโค้ด
URL ไปยังไฟล์
.crx
- เวอร์ชัน
ไคลเอ็นต์จะใช้เพื่อพิจารณาว่าควรดาวน์โหลดไฟล์
.crx
ที่ระบุโดยcodebase
หรือไม่ ซึ่งควรตรงกับค่าของ "version" ในไฟล์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
- รหัส: "aaaaaaaaaaaaaaaaaaaaaaaaaaa"
- เวอร์ชัน: "1.1"
- ส่วนขยาย 2
- รหัส: "bbbbbbbbbbbbbbbbbbbbbbbb"
- เวอร์ชัน: "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" ลงใน
<?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 ขึ้นไปเท่านั้น