Update otomatis

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

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

Jika Anda menghosting file CRX di server web dan menggunakan kebijakan perusahaan untuk mendorongnya ke perangkat terkelola, lanjutkan membaca. Anda juga harus membaca Hosting dan Pengepakan.

Sebelumnya, saat ekstensi di luar toko didukung, biner dan ekstensi dapat diupdate secara bersamaan. Namun, ekstensi yang dihosting di Chrome Web Store diupdate menggunakan mekanisme update Chrome yang tidak dikontrol developer. Developer ekstensi harus berhati-hati saat mengupdate ekstensi yang memiliki dependensi pada biner (misalnya, ekstensi lama yang menggunakan NPAPI).

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 ekstensi.

Setiap beberapa jam, browser akan memeriksa apakah ekstensi atau aplikasi yang diinstal memiliki URL update. Untuk setiap URL, aplikasi akan membuat permintaan ke URL tersebut untuk mencari file XML manifes update. Jika manifes update menyebutkan versi yang lebih baru dari 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 diinstal.

Memperbarui URL

Jika menghosting ekstensi atau aplikasi Anda sendiri, Anda perlu 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 (sorotan menunjukkan bagian yang harus Anda ubah):

<?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 diambil dari format yang digunakan oleh Omaha, infrastruktur update Google. Lihat http://code.google.com/p/omaha/ untuk mengetahui detail selengkapnya. Sistem ekstensi menggunakan atribut berikut untuk elemen <app> dan <updatecheck> dari manifes update:

appid

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

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

  • Buka aplikasi. Anda dapat melakukannya dengan mengklik ikonnya di halaman Tab Baru.
  • Buka konsol JavaScript. Anda dapat melakukannya dengan mengklik ikon kunci pas dan memilih Alat > Konsol JavaScript.
  • Masukkan ekspresi berikut ke konsol JavaScript: chrome.app.getDetails().id. Konsol menampilkan ID aplikasi sebagai string yang diapit tanda petik.
codebase

URL ke file .crx.

versi

Digunakan oleh klien untuk menentukan apakah file .crx yang ditentukan oleh codebase harus didownload. 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 <app>.

Pengujian

Frekuensi pemeriksaan update default adalah beberapa jam, tetapi Anda dapat memaksa update menggunakan tombol Update extensions now di halaman Extensions.

Penggunaan lanjutan: parameter permintaan

Mekanisme update otomatis dasar dirancang untuk meminimalkan pekerjaan sisi server. Anda hanya perlu menambahkan file XML statis ke server web apa pun seperti Apache, dan memperbarui file XML tersebut saat merilis versi baru ekstensi.

Developer yang lebih mahir dapat memanfaatkan fakta bahwa kita menambahkan parameter ke permintaan manifes update untuk menunjukkan ID dan versi ekstensi. Kemudian, mereka dapat menggunakan URL update yang sama untuk semua ekstensi, yang 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 yang dienkode URL dengan format:

_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: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
    • Versi: "1.1"
  • Ekstensi 2
    • ID: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
    • Versi: "0.4"

Permintaan untuk mengupdate setiap ekstensi 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. Misalnya, 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 yang diinstal menggunakan URL update yang sama cukup besar sehingga URL permintaan GET terlalu panjang (lebih dari 2.000 karakter atau lebih), pemeriksaan update akan mengeluarkan permintaan GET tambahan sesuai kebutuhan.

Penggunaan lanjutan: versi browser minimum

Seiring kami menambahkan lebih banyak API ke sistem ekstensi, Anda mungkin ingin merilis versi ekstensi atau aplikasi yang telah diupdate dan hanya akan berfungsi dengan browser versi yang lebih baru. Meskipun Google Chrome sendiri diupdate secara otomatis, perlu waktu beberapa hari sebelum sebagian besar basis pengguna mengupdate ke rilis baru tertentu. Untuk memastikan bahwa update tertentu hanya akan berlaku untuk versi Google Chrome yang sama dengan atau lebih tinggi dari versi tertentu, Anda menambahkan atribut "prodversionmin" ke elemen <app> 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>

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