Update otomatis

Kami ingin ekstensi dan aplikasi diupdate secara otomatis karena alasan yang sama seperti Google Chrome: untuk menggabungkan perbaikan bug dan keamanan, menambahkan fitur baru atau peningkatan performa, dan meningkatkan antarmuka pengguna.

Jika Anda memublikasikan menggunakan Dasbor Developer Chrome, Anda harus mengabaikan halaman ini. Pengiriman Chrome Web Store yang lulus pratinjau akan otomatis tersedia di listingan item Chrome Web Store ekstensi dan di-deploy ke pengguna akhir.

Baca terus artikel ini jika Anda menghosting file CRX di server web dan menggunakan kebijakan perusahaan untuk mengirimnya ke perangkat terkelola. Anda juga harus membaca Hosting dan Pengemasan.

Sebelumnya, jika ekstensi di luar Play Store didukung, biner native dan ekstensi dapat diupdate secara bertahap. Namun, ekstensi yang dihosting di Chrome Web Store diupdate melalui mekanisme update Chrome yang tidak dikontrol oleh developer. Developer ekstensi harus berhati-hati dalam mengupdate ekstensi yang memiliki dependensi pada biner native (misalnya, ekstensi lama yang menggunakan PKCS).

Ringkasan

  • Manifes dapat berisi kolom "update_url", yang mengarah ke lokasi untuk melakukan pemeriksaan update.
  • Konten yang ditampilkan oleh pemeriksaan update adalah dokumen XML manifes update yang mencantumkan versi terbaru suatu ekstensi.

Setiap beberapa jam, browser memeriksa apakah ada ekstensi atau aplikasi yang diinstal yang memiliki URL update. Untuk masing-masing, instance membuat permintaan ke URL tersebut untuk mencari file XML manifes update. Jika manifes update menyebutkan versi yang lebih baru daripada yang diinstal, browser akan mendownload dan menginstal versi baru. Seperti update manual, file .crx baru harus ditandatangani dengan kunci pribadi yang sama dengan versi yang terinstal saat ini.

URL pembaruan

Jika menghosting ekstensi atau aplikasi sendiri, Anda harus menambahkan kolom "update_url" ke file manifest.json, seperti ini:

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

Mengupdate manifes

Manifes update yang ditampilkan oleh server harus berupa dokumen XML yang terlihat seperti ini (highlight menunjukkan bagian yang harus diubah):

<?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>

Format XML ini dipinjam dari yang digunakan oleh Omaha, yaitu infrastruktur pembaruan Google. Lihat http://code.google.com/p/omaha/ untuk detail selengkapnya. Sistem ekstensi menggunakan atribut berikut untuk elemen dan di manifes update:

appid

ID ekstensi atau aplikasi, yang dibuat berdasarkan hash kunci publik, seperti yang dijelaskan dalam Paket. Anda dapat menemukan ID ekstensi atau Aplikasi Chrome dengan membuka halaman Ekstensi (chrome://extensions).

Namun, aplikasi yang di-host tidak tercantum di halaman Ekstensi. Anda dapat menemukan ID aplikasi apa pun menggunakan langkah-langkah berikut:

  • Buka aplikasi. Anda dapat melakukannya dengan mengklik ikon aplikasi pada halaman Tab Baru.
  • Buka konsol JavaScript. Anda dapat melakukannya dengan mengklik ikon kunci pas dan memilih Tools > JavaScript Console.
  • Masukkan ekspresi berikut ke dalam konsol JavaScript: chrome.app.getDetails().id. Konsol menampilkan ID aplikasi sebagai string yang dikutip.
codebase

URL ke file .crx.

versi

Digunakan oleh klien untuk menentukan apakah harus mendownload file .crx yang ditentukan oleh codebase. Nilai ini harus cocok dengan nilai "version" di file manifest.json file .crx.

File XML manifes update dapat berisi informasi tentang beberapa ekstensi dengan menyertakan beberapa elemen.

Pengujian

Frekuensi pemeriksaan update default adalah beberapa jam, tetapi Anda dapat memaksa update menggunakan tombol Update ekstensi sekarang di halaman Ekstensi.

Penggunaan lanjutan: parameter permintaan

Mekanisme dasar update otomatis dirancang untuk membuat sisi server berfungsi semudah melepas file XML statis ke server web biasa seperti Apache, dan memperbarui file XML tersebut saat Anda merilis versi baru ekstensi.

Developer yang lebih mahir mungkin ingin memanfaatkan fakta bahwa kami menambahkan parameter ke permintaan manifes update untuk menunjukkan ID dan versi ekstensi. Kemudian, mereka dapat menggunakan URL update yang sama untuk semua ekstensinya, dengan mengarah ke URL yang menjalankan kode sisi server dinamis, bukan file XML statis.

Format parameter permintaan adalah:

?x=_<extension_data>_

Dengan _<extension_data>_ adalah string format yang dienkode URL:

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

Misalnya, Anda memiliki dua ekstensi, yang keduanya mengarah ke URL update yang sama (http://test.com/extension_updates.php):

  • Ekstensi 1
    • ID: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
    • Versi: "1.1"
  • Ekstensi 2
    • ID: "bbbbbbbbbbbbbbbbbbbbbbbbbbbb"
    • Versi: "0.4"

Permintaan untuk memperbarui setiap ekstensi individual adalah:

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

Beberapa ekstensi dapat dicantumkan dalam satu permintaan untuk setiap URL update yang unik. Untuk contoh di atas, jika pengguna menginstal kedua ekstensi, kedua permintaan tersebut akan digabungkan menjadi satu permintaan:

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

Jika jumlah ekstensi terinstal yang menggunakan URL update yang sama cukup besar sehingga URL permintaan GET terlalu panjang (lebih dari 2.000 karakter), pemeriksaan update akan mengeluarkan permintaan GET tambahan sesuai kebutuhan.

Penggunaan lanjutan: versi browser minimum

Seiring penambahan lebih banyak API ke sistem ekstensi, Anda mungkin ingin merilis versi terbaru dari ekstensi atau aplikasi yang hanya akan berfungsi dengan versi browser yang lebih baru. Meskipun Google Chrome sendiri telah diupdate secara otomatis, diperlukan waktu beberapa hari sebelum sebagian besar basis pengguna melakukan update ke rilis baru tertentu. Untuk memastikan update yang diberikan hanya akan berlaku untuk versi Google Chrome atau lebih tinggi dari versi tertentu, tambahkan atribut "prodversionmin" ke elemen dalam manifes update. Contoh:

<?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>

Hal ini akan memastikan bahwa pengguna akan mengupdate otomatis ke versi 2 hanya jika mereka menjalankan Google Chrome 3.0.193.0 atau yang lebih baru.