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

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

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" ลงใน องค์ประกอบในไฟล์ 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 ขึ้นไปเท่านั้น