अपने-आप अपडेट हो रहा है

हम चाहते हैं कि एक्सटेंशन और ऐप्लिकेशन भी Google Chrome की तरह ही अपने-आप अपडेट हों. जैसे, बग और सुरक्षा से जुड़े समाधानों को शामिल करना, नई सुविधाएँ जोड़ना या परफ़ॉर्मेंस को बेहतर बनाना, और यूज़र इंटरफ़ेस को बेहतर बनाना.

अगर आपने Chrome डेवलपर डैशबोर्ड का इस्तेमाल करके पब्लिश किया है, तो आपको इस पेज को अनदेखा करना चाहिए. 'Chrome वेब स्टोर' से मिले सबमिशन, जो झलक को पास करते हैं वे एक्सटेंशन के 'Chrome वेब स्टोर' के आइटम की लिस्टिंग पर अपने-आप उपलब्ध हो जाते हैं और असली उपयोगकर्ताओं को डिप्लॉय कर दिए जाते हैं.

अगर किसी CRX फ़ाइल को वेब सर्वर पर होस्ट किया जा रहा है और उसे मैनेज किए जा रहे डिवाइसों पर पुश करने के लिए एंटरप्राइज़ नीतियों का इस्तेमाल किया जा रहा है, तो पढ़ना जारी रखें. आपको होस्टिंग और पैकेजिंग भी पढ़नी चाहिए.

पहले जब स्टोर से बाहर के एक्सटेंशन काम करते थे, तब नेटिव बाइनरी का इस्तेमाल किया जा सकता था. साथ ही, लॉक चरण में एक्सटेंशन को अपडेट किया जा सकता था. हालांकि, 'Chrome वेब स्टोर' पर होस्ट किए गए एक्सटेंशन, Chrome अपडेट करने के उस तरीके से अपडेट होते हैं जिसे डेवलपर कंट्रोल नहीं करते. एक्सटेंशन डेवलपर को ऐसे एक्सटेंशन को अपडेट करते समय सावधानी बरतनी चाहिए जो नेटिव बाइनरी पर निर्भर होते हैं. उदाहरण के लिए, एपीपीआई का इस्तेमाल करने वाले लेगसी एक्सटेंशन.

खास जानकारी

  • मेनिफ़ेस्ट में एक "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/ पर जाएं. एक्सटेंशन सिस्टम, अपडेट मेनिफ़ेस्ट के और एलिमेंट के लिए, इन एट्रिब्यूट का इस्तेमाल करता है:

appid

सार्वजनिक कुंजी के हैश के आधार पर जनरेट किया गया एक्सटेंशन या ऐप्लिकेशन आईडी, जैसा कि पैकेजिंग में बताया गया है. एक्सटेंशन पेज (chrome://extensions) पर जाकर, किसी एक्सटेंशन या Chrome ऐप्लिकेशन का आईडी देखा जा सकता है.

हालांकि, होस्ट किए गए ऐप्लिकेशन, एक्सटेंशन पेज पर मौजूद नहीं होते हैं. इन तरीकों का इस्तेमाल करके, किसी भी ऐप्लिकेशन का आईडी देखा जा सकता है:

  • ऐप्लिकेशन खोलें. ऐसा करने के लिए, नया टैब पेज पर मौजूद आइकॉन पर क्लिक करें.
  • JavaScript कंसोल खोलें. पाना आइकॉन पर क्लिक करके और टूल > JavaScript कंसोल चुनकर ऐसा किया जा सकता है.
  • JavaScript कंसोल में यह एक्सप्रेशन डालें: chrome.app.getDetails().id. कंसोल, ऐप्लिकेशन के आईडी को कोट की गई स्ट्रिंग के तौर पर दिखाता है.
कोड बेस

.crx फ़ाइल का यूआरएल.

वर्शन

इसका इस्तेमाल करके, क्लाइंट यह तय करता है कि उसे codebase की बताई गई .crx फ़ाइल डाउनलोड करनी चाहिए या नहीं. यह .crx फ़ाइल की manifest.json फ़ाइल में मौजूद "वर्शन" की वैल्यू से मेल खानी चाहिए.

अपडेट मेनिफ़ेस्ट एक्सएमएल फ़ाइल में एक से ज़्यादा एलिमेंट को शामिल करके, कई एक्सटेंशन के बारे में जानकारी हो सकती है.

टेस्ट करना

डिफ़ॉल्ट रूप से, अपडेट की जांच करने की फ़्रीक्वेंसी कई घंटों की होती है, लेकिन एक्सटेंशन पेज के अभी एक्सटेंशन अपडेट करें बटन का इस्तेमाल करके, अपडेट लागू किया जा सकता है.

बेहतर इस्तेमाल: अनुरोध के पैरामीटर

अपने-आप अपडेट होने की बुनियादी तकनीक को इस तरह से डिज़ाइन किया गया है कि सर्वर साइड का काम आसान हो जाए. जैसे, Apache जैसे किसी भी सादे वेब सर्वर पर स्टैटिक एक्सएमएल फ़ाइल को छोड़ना और एक्सटेंशन के नए वर्शन रिलीज़ करते समय उस एक्सएमएल फ़ाइल को अपडेट करना.

हो सकता है कि ज़्यादा बेहतर डेवलपर इस बात का फ़ायदा लेना चाहें कि हम एक्सटेंशन आईडी और वर्शन को बताने के लिए, अपडेट मेनिफ़ेस्ट के अनुरोध में पैरामीटर जोड़ते हैं. इसके बाद, वह अपने सभी एक्सटेंशन के लिए एक ही अपडेट यूआरएल का इस्तेमाल कर सकता है. साथ ही, वह स्टैटिक एक्सएमएल फ़ाइल के बजाय, डाइनैमिक सर्वर-साइड कोड चलाने वाले यूआरएल पर ले जाता है.

अनुरोध पैरामीटर का फ़ॉर्मैट यह है:

?x=_<extension_data>_

जहां _<extension_data>_, इस फ़ॉर्मैट की यूआरएल-कोड में बदली गई स्ट्रिंग है:

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

उदाहरण के लिए, मान लें कि आपके पास दो एक्सटेंशन हैं. ये दोनों एक्सटेंशन एक ही अपडेट यूआरएल (http://test.com/extension_updates.php) पर ले जाते हैं:

  • पहला एक्सटेंशन
    • आईडी: "आआआआआआ
    • वर्शन: "1.1"
  • दूसरा एक्सटेंशन
    • आईडी: "bbbbbbbbbbbbbbbbbbbbbbbbb"
    • वर्शन: "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 के वर्शन पर लागू हो, आपको अपने अपडेट मेनिफ़ेस्ट के एलिमेंट में "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 या इसके बाद वाले वर्शन का इस्तेमाल कर रहे हों.