हम चाहते हैं कि एक्सटेंशन और ऐप्लिकेशन भी Google Chrome की तरह ही अपने-आप अपडेट हों. ऐसा इसलिए, ताकि गड़बड़ियों और सुरक्षा से जुड़ी समस्याओं को ठीक किया जा सके, नई सुविधाएं जोड़ी जा सकें या परफ़ॉर्मेंस को बेहतर बनाया जा सके. साथ ही, यूज़र इंटरफ़ेस को भी बेहतर बनाया जा सके.
अगर Chrome डेवलपर डैशबोर्ड का इस्तेमाल करके पब्लिश किया जाता है, तो आपको इस पेज को अनदेखा करना चाहिए. Chrome Web Store पर सबमिट किए गए ऐसे एक्सटेंशन जो झलक दिखाने की ज़रूरी शर्तें पूरी करते हैं वे अपने-आप एक्सटेंशन की Chrome Web Store आइटम लिस्टिंग पर उपलब्ध हो जाते हैं. साथ ही, इन्हें असली उपयोगकर्ताओं के लिए डिप्लॉय कर दिया जाता है.
अगर किसी वेब सर्वर पर CRX फ़ाइल होस्ट की जा रही है और उसे मैनेज किए जा रहे डिवाइसों पर पुश करने के लिए, एंटरप्राइज़ नीतियों का इस्तेमाल किया जा रहा है, तो पढ़ना जारी रखें. आपको होस्टिंग और पैकेजिंग के बारे में भी पढ़ना चाहिए.
पहले, जब ऑफ़-स्टोर एक्सटेंशन काम करते थे, तब बाइनरी और एक्सटेंशन को एक साथ अपडेट किया जा सकता था. हालांकि, Chrome वेब स्टोर पर होस्ट किए गए एक्सटेंशन, Chrome के अपडेट करने के तरीके का इस्तेमाल करके अपडेट किए जाते हैं. डेवलपर इस तरीके को कंट्रोल नहीं कर सकते. एक्सटेंशन डेवलपर को उन एक्सटेंशन को अपडेट करते समय सावधानी बरतनी चाहिए जो बाइनरी पर निर्भर हैं. उदाहरण के लिए, NPAPI का इस्तेमाल करने वाले लेगसी एक्सटेंशन.
खास जानकारी
- मेनिफ़ेस्ट में "update_url" फ़ील्ड हो सकता है, जो अपडेट की जांच करने के लिए किसी जगह पर ले जाता है.
- अपडेट की जांच करने पर मिलने वाला कॉन्टेंट, अपडेट मेनिफ़ेस्ट एक्सएमएल दस्तावेज़ होता है. इसमें एक्सटेंशन का नया वर्शन होता है.
ब्राउज़र हर कुछ घंटों में यह जांच करता है कि इंस्टॉल किए गए किसी एक्सटेंशन या ऐप्लिकेशन में अपडेट यूआरएल है या नहीं. हर यूआरएल के लिए, यह उस यूआरएल से अपडेट मेनिफ़ेस्ट एक्सएमएल फ़ाइल का अनुरोध करता है. अगर अपडेट मैनिफ़ेस्ट में, इंस्टॉल किए गए वर्शन से नया वर्शन बताया गया है, तो ब्राउज़र नया वर्शन डाउनलोड करके इंस्टॉल कर देता है. मैन्युअल अपडेट की तरह ही, नई .crx
फ़ाइल को उसी निजी कुंजी से साइन किया जाना चाहिए जिससे इंस्टॉल किए गए वर्शन को साइन किया गया है.
यूआरएल अपडेट करना
अगर आपने अपने एक्सटेंशन या ऐप्लिकेशन को होस्ट किया है, तो आपको अपनी manifest.json
फ़ाइल में "update_url" फ़ील्ड जोड़ना होगा. ऐसा करने के लिए, यह तरीका अपनाएं:
{
"name": "My extension",
...
"update_url": "http://myhost.com/mytestextension/updates.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>
यह एक्सएमएल फ़ॉर्मैट, Google के अपडेट इन्फ़्रास्ट्रक्चर, Omaha में इस्तेमाल किए जाने वाले फ़ॉर्मैट से लिया गया है. ज़्यादा जानकारी के लिए,
http://code.google.com/p/omaha/ पर जाएं. एक्सटेंशन सिस्टम, अपडेट मेनिफ़ेस्ट के <app>
और <updatecheck>
एलिमेंट के लिए, इन एट्रिब्यूट का इस्तेमाल करता है:
- appid
सार्वजनिक कुंजी के हैश के आधार पर जनरेट किया गया एक्सटेंशन या ऐप्लिकेशन आईडी. इस बारे में पैकेजिंग में बताया गया है. एक्सटेंशन या Chrome ऐप्लिकेशन का आईडी देखने के लिए, एक्सटेंशन पेज (chrome://extensions) पर जाएं.
हालांकि, होस्ट किए गए ऐप्लिकेशन, एक्सटेंशन पेज पर नहीं दिखते. किसी भी ऐप्लिकेशन का आईडी ढूंढने के लिए, यह तरीका अपनाएं:
- ऐप्लिकेशन खोलें. ऐसा करने के लिए, 'नया टैब' पेज पर मौजूद उसके आइकॉन पर क्लिक करें.
- JavaScript कंसोल खोलें. ऐसा करने के लिए, रिंच आइकॉन पर क्लिक करें और टूल > JavaScript कंसोल को चुनें.
- JavaScript कंसोल में यह एक्सप्रेशन डालें:
chrome.app.getDetails().id
. Console, ऐप्लिकेशन का आईडी कोट की गई स्ट्रिंग के तौर पर दिखाता है.
- कोड बेस
.crx
फ़ाइल का यूआरएल.- वर्शन
क्लाइंट इसका इस्तेमाल यह तय करने के लिए करता है कि उसे
codebase
की बताई गई.crx
फ़ाइल डाउनलोड करनी चाहिए या नहीं. यह वैल्यू,.crx
फ़ाइल कीmanifest.json
फ़ाइल में मौजूद "version" की वैल्यू से मेल खानी चाहिए.
अपडेट मेनिफ़ेस्ट एक्सएमएल फ़ाइल में, एक से ज़्यादा <app>
एलिमेंट शामिल करके, एक से ज़्यादा एक्सटेंशन की जानकारी हो सकती है.
टेस्ट करना
एक्सटेंशन अपडेट होने की जांच करने की डिफ़ॉल्ट फ़्रीक्वेंसी कई घंटे होती है. हालांकि, एक्सटेंशन पेज पर मौजूद एक्सटेंशन अभी अपडेट करें बटन का इस्तेमाल करके, एक्सटेंशन को तुरंत अपडेट किया जा सकता है.
बेहतर तरीके से इस्तेमाल करना: अनुरोध पैरामीटर
अपने-आप अपडेट होने की बुनियादी सुविधा को इस तरह से डिज़ाइन किया गया है कि सर्वर साइड पर कम से कम काम हो. इसके लिए, आपको Apache जैसे किसी भी वेब सर्वर पर सिर्फ़ एक स्टैटिक एक्सएमएल फ़ाइल जोड़नी होगी. साथ ही, एक्सटेंशन के नए वर्शन रिलीज़ करते समय, उस एक्सएमएल फ़ाइल को अपडेट करना होगा.
ज़्यादा अनुभवी डेवलपर इस बात का फ़ायदा ले सकते हैं कि हम अपडेट मेनिफ़ेस्ट के अनुरोध में पैरामीटर जोड़ते हैं, ताकि एक्सटेंशन आईडी और वर्शन के बारे में पता चल सके. इसके बाद, वे अपने सभी एक्सटेंशन के लिए एक ही अपडेट यूआरएल का इस्तेमाल कर सकते हैं. यह यूआरएल, स्टैटिक एक्सएमएल फ़ाइल के बजाय, डाइनैमिक सर्वर-साइड कोड चलाने वाले यूआरएल पर ले जाता है.
अनुरोध पैरामीटर का फ़ॉर्मैट यह है:
?x=_<extension_data>_
यहां _<extension_data>_
, यूआरएल को कोड में बदलने वाली स्ट्रिंग है, जो इस फ़ॉर्मैट में है:
_id=<id>_&v=_<version>_
उदाहरण के लिए, मान लें कि आपके पास दो एक्सटेंशन हैं, जो दोनों एक ही अपडेट यूआरएल (http://test.com/extension_updates.php
) पर ले जाते हैं:
- पहला एक्सटेंशन
- आईडी: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
- वर्शन: "1.1"
- दूसरा एक्सटेंशन
- आईडी: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
- वर्शन: "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
हर यूनीक अपडेट यूआरएल के लिए, एक अनुरोध में कई एक्सटेंशन शामिल किए जा सकते हैं. उदाहरण के लिए, अगर किसी उपयोगकर्ता के पास दोनों एक्सटेंशन इंस्टॉल हैं, तो दोनों अनुरोधों को एक अनुरोध में मर्ज कर दिया जाता है:
http://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1&x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4
अगर एक ही अपडेट यूआरएल का इस्तेमाल करने वाले इंस्टॉल किए गए एक्सटेंशन की संख्या इतनी ज़्यादा है कि GET अनुरोध का यूआरएल बहुत लंबा (2,000 से ज़्यादा वर्ण) है, तो अपडेट की जांच के लिए ज़रूरत के हिसाब से अतिरिक्त GET अनुरोध भेजे जाते हैं.
बेहतर इस्तेमाल: ब्राउज़र का कम से कम वर्शन
हम एक्सटेंशन सिस्टम में ज़्यादा एपीआई जोड़ रहे हैं. इसलिए, हो सकता है कि आप किसी एक्सटेंशन या ऐप्लिकेशन का अपडेट किया गया वर्शन रिलीज़ करना चाहें. यह वर्शन, सिर्फ़ ब्राउज़र के नए वर्शन के साथ काम करेगा. Google Chrome अपने-आप अपडेट होता है. हालांकि, ज़्यादातर उपयोगकर्ताओं के लिए, किसी नई रिलीज़ को अपडेट होने में कुछ दिन लग सकते हैं. यह पक्का करने के लिए कि कोई अपडेट सिर्फ़ Google Chrome के किसी वर्शन पर या उससे ज़्यादा वर्शन पर लागू हो, अपने अपडेट मेनिफ़ेस्ट में <app>
एलिमेंट में "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 या इसके बाद का वर्शन होगा.