Uzantıların ve uygulamaların otomatik olarak güncellenmesini istememizin bazı nedenleri Google Chrome ile aynıdır: Hata ve güvenlik düzeltmelerini dahil etmek, yeni özellikler veya performans geliştirmeleri eklemek ve kullanıcı arayüzlerini iyileştirmek.
Chrome Geliştirici Kontrol Paneli'ni kullanarak yayınlıyorsanız bu sayfayı yoksaymanız gerekir. Önizlemeyi geçen Chrome Web Mağazası gönderimleri, uzantının Chrome Web Mağazası öğe listesinde otomatik olarak kullanıma sunulur ve son kullanıcılara dağıtılır.
Bir CRX dosyasını web sunucusunda barındırıyor ve yönetilen cihazlara göndermek için kurumsal politikaları kullanıyorsanız okumaya devam edin. Barındırma ve Paketleme konularını da okumanız gerekir.
Daha önce, mağaza dışı uzantılar desteklenirken ikili dosyalar ve uzantının aynı anda güncellenmesi mümkündü. Ancak Chrome Web Mağazası'nda barındırılan uzantılar, geliştiricilerin kontrol etmediği Chrome güncelleme mekanizması kullanılarak güncellenir. Uzantı geliştiricileri, ikili dosyaya bağımlı olan uzantıları (ör. NPAPI kullanan eski uzantılar) güncellerken dikkatli olmalıdır.
Genel Bakış
- Manifest, güncelleme kontrollerinin yapılacağı bir konumu işaret eden bir "update_url" alanı içerebilir.
- Güncelleme kontrolü tarafından döndürülen içerik, bir uzantının en son sürümünü listeleyen bir güncelleme manifesti XML dokümanı olur.
Tarayıcı, birkaç saatte bir yüklü uzantıların veya uygulamaların güncelleme URL'si olup olmadığını kontrol eder. Her biri için, güncelleme manifest XML dosyası arayan ilgili URL'ye istek gönderir. Güncelleme manifest'inde yüklü olandan daha yeni bir sürümden bahsediyorsa tarayıcı yeni sürümü indirip yükler. Manuel güncellemelerde olduğu gibi, yeni .crx
dosyası da yüklü sürümle aynı özel anahtarla imzalanmalıdır.
Güncelleme URL'si
Kendi uzantınızı veya uygulamanızı barındırıyorsanız manifest.json
dosyanıza "update_url" alanını şu şekilde eklemeniz gerekir:
{
"name": "My extension",
...
"update_url": "http://myhost.com/mytestextension/updates.xml",
...
}
Manifesti güncelleme
Sunucu tarafından döndürülen güncelleme manifesti, aşağıdaki gibi görünen bir XML dokümanı olmalıdır (vurgulanan kısımlar, değiştirmeniz gereken bölümleri gösterir):
<?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>
Bu XML biçimi, Google'ın güncelleme altyapısı olan Omaha tarafından kullanılan biçimden alınmıştır. Daha fazla bilgi için http://code.google.com/p/omaha/ adresini ziyaret edin. Uzantıların sistemi, güncelleme manifestinin <app>
ve <updatecheck>
öğeleri için aşağıdaki özellikleri kullanır:
- appid
Paketleme bölümünde açıklandığı gibi, genel anahtarın karmasına göre oluşturulan uzantı veya uygulama kimliği. Uzantıları sayfasına (chrome://extensions) giderek bir uzantının veya Chrome uygulamasının kimliğini bulabilirsiniz.
Ancak barındırılan uygulamalar Uzantılar sayfasında listelenmez. Aşağıdaki adımları uygulayarak herhangi bir uygulamanın kimliğini bulabilirsiniz:
- Uygulamayı açın. Bunu Yeni Sekme sayfasındaki simgesini tıklayarak yapabilirsiniz.
- JavaScript konsolunu açın. Bunun için anahtar simgesini tıklayıp Araçlar > JavaScript Konsolu'nu seçebilirsiniz.
- JavaScript konsoluna aşağıdaki ifadeyi girin:
chrome.app.getDetails().id
. Console, uygulamanın kimliğini tırnak içine alınmış bir dize olarak gösterir.
- kod tabanı
.crx
dosyasının URL'si.- sürüm
codebase
tarafından belirtilen.crx
dosyasını indirip indirmeyeceğini belirlemek için istemci tarafından kullanılır. Bu değer,.crx
dosyasınınmanifest.json
dosyasında bulunan "version" değerine uymalıdır.
Güncelleme manifesti XML dosyası, birden fazla <app>
öğesi ekleyerek birden fazla uzantı hakkında bilgi içerebilir.
Test
Varsayılan güncelleme kontrol sıklığı birkaç saattir ancak Uzantıları sayfasının Uzantıları şimdi güncelle düğmesini kullanarak güncellemeyi zorlayabilirsiniz.
Gelişmiş kullanım: istek parametreleri
Temel otomatik güncelleme mekanizması, sunucu tarafındaki çalışmaları en aza indirmek için tasarlanmıştır. Bunun için Apache gibi bir web sunucusuna statik bir XML dosyası eklemeniz ve uzantılarınızın yeni sürümlerini yayınladıkça bu XML dosyasını güncellemeniz yeterlidir.
Daha ileri düzey geliştiriciler, uzantı kimliğini ve sürümünü belirtmek için güncelleme manifesti isteğine parametre eklememizden yararlanabilir. Ardından, tüm uzantılarında aynı güncelleme URL'sini kullanabilirler. Bu URL, statik XML dosyası yerine dinamik sunucu tarafı kodu çalıştıran bir URL'ye işaret eder.
İstek parametrelerinin biçimi şu şekildedir:
?x=_<extension_data>_
Burada _<extension_data>_
, aşağıdaki biçimde URL olarak kodlanmış bir dizedir:
_id=<id>_&v=_<version>_
Örneğin, her ikisi de aynı güncelleme URL'sini (http://test.com/extension_updates.php
) işaret eden iki uzantınız olduğunu varsayalım:
- 1. Uzantı
- Kimlik: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
- Sürüm: "1.1"
- 2. Uzantı
- Kimlik: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
- Sürüm: "0.4"
Her uzantıyı ayrı ayrı güncelleme isteği şu şekilde olur:
http://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1
http://test.com/extension_updates.php?x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4
Her benzersiz güncelleme URL'si için tek bir istekte birden fazla uzantı listelenebilir. Örneğin, bir kullanıcının her iki uzantıyı da yüklüyse iki istek tek bir istek halinde birleştirilir:
http://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1&x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4
Aynı güncelleme URL'sini kullanan yüklü uzantıların sayısı, GET istek URL'sinin çok uzun (yaklaşık 2.000 karakter) olması için yeterince büyükse güncelleme kontrolü gerektiğinde ek GET istekleri gönderir.
İleri seviye kullanım: minimum tarayıcı sürümü
Uzantı sistemine daha fazla API ekledikçe, bir uzantının veya uygulamanın yalnızca tarayıcının daha yeni sürümleriyle çalışacak güncellenmiş bir sürümünü yayınlamak isteyebilirsiniz. Google Chrome otomatik olarak güncellense de kullanıcı tabanının çoğunluğunun belirli bir yeni sürüme güncellenmesi birkaç gün sürebilir. Belirli bir güncellemenin yalnızca belirli bir sürüm veya daha yeni Google Chrome sürümleri için geçerli olmasını sağlamak amacıyla güncelleme manifest'inizdeki <app>
öğesine "prodversionmin" özelliğini eklersiniz. Örneğin:
<?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>
Bu sayede, kullanıcılar yalnızca Google Chrome 3.0.193.0 veya daha yeni bir sürümü kullanıyorlarsa 2. sürüme otomatik olarak güncellenir.