पहले ऑफ़लाइन

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

खास जानकारी

Chrome ऐप्लिकेशन में नीचे दी गई सुविधाएं मुफ़्त में मिलती हैं:

  • आपके ऐप्लिकेशन की फ़ाइलें—सभी JavaScript, CSS, और फ़ॉन्ट के साथ-साथ इसकी ज़रूरत के मुताबिक अन्य संसाधन (जैसे, इमेज) पहले से डाउनलोड हैं.
  • आपका ऐप्लिकेशन Chrome Storage API का इस्तेमाल करके कुछ डेटा को सेव कर सकता है और वैकल्पिक तौर पर सिंक कर सकता है.
  • आपका ऐप्लिकेशन ऑनलाइन और ऑफ़लाइन इवेंट सुनकर, कनेक्टिविटी में होने वाले बदलावों का पता लगा सकता है.

हालांकि, ये सुविधाएं इस बात की गारंटी नहीं देतीं कि आपका ऐप्लिकेशन ऑफ़लाइन काम करेगा. आपके ऑफ़लाइन-सुविधा वाले ऐप्लिकेशन को इन नियमों का पालन करना चाहिए:

जहां भी हो सके, लोकल डेटा का इस्तेमाल करें.
इंटरनेट से मिले संसाधनों का इस्तेमाल करने पर, इसे पाने के लिए XMLHttpRequest का इस्तेमाल करें. इसके बाद, डेटा को अपने डिवाइस पर सेव करें. डेटा को अपने डिवाइस पर सेव करने के लिए, Chrome Storage API, IndexedDB या Filesystem API का इस्तेमाल करें.
अपने ऐप्लिकेशन के यूज़र इंटरफ़ेस (यूआई) को उसके डेटा से अलग करें.
यूज़र इंटरफ़ेस (यूआई) और डेटा को अलग-अलग करने से, ऐप्लिकेशन का डिज़ाइन बेहतर होता है. साथ ही, ऑफ़लाइन इस्तेमाल की सुविधा चालू करने में आसानी होती है. साथ ही, उपयोगकर्ता के डेटा को अन्य तरीकों से भी देखा जा सकता है. एमवीसी फ़्रेमवर्क की मदद से, यूआई और डेटा को अलग-अलग रखा जा सकता है.
मान लो कि आपका ऐप्लिकेशन किसी भी समय बंद किया जा सकता है.
ऐप्लिकेशन की स्थिति सेव करें (जब भी मुमकिन हो, ताकि जहां भी मुमकिन हो, ऐप्लिकेशन की स्थिति सेव करें), ताकि लोग जहां भी चाहें, वहीं से ऐप्लिकेशन को शुरू कर सकें.
अपने ऐप्लिकेशन की अच्छी तरह से जांच करें.
यह पक्का करें कि आपका ऐप्लिकेशन सामान्य और मुश्किल, दोनों ही स्थितियों में सही तरीके से काम करता हो.

सुरक्षा से जुड़ी पाबंदियां

Chrome ऐप्स बहुत सीमित हैं जहां वे अपने संसाधनों को रख सकते हैं:

  • स्थानीय डेटा उपयोगकर्ता की मशीन पर दिखता है और उसे सुरक्षित रूप से एन्क्रिप्ट नहीं किया जा सकता. इसलिए, संवेदनशील डेटा सर्वर पर रहना चाहिए. उदाहरण के लिए, पासवर्ड या क्रेडिट कार्ड नंबर को डिवाइस पर सेव न करें.
  • ऐप्लिकेशन पर काम करने वाली सभी JavaScript ऐप्लिकेशन के पैकेज में होनी चाहिए. यह इनलाइन नहीं हो सकता.
  • सभी सीएसएस स्टाइल, इमेज, और फ़ॉन्ट शुरुआत में ऐप्लिकेशन के पैकेज या किसी रिमोट यूआरएल पर रखे जा सकते हैं. अगर रिसॉर्स रिमोट है, तो उसके बारे में एचटीएमएल में नहीं बताया जा सकता. इसके बजाय, XMLHttpRequest का इस्तेमाल करके डेटा पाएं (बाहरी संसाधनों का रेफ़रंस देना देखें). इसके बाद, या तो blob यूआरएल वाले डेटा को देखें या (बेहतर हो) को सेव करके Filesystem API का इस्तेमाल करके डेटा लोड करें.

हालांकि, बाहरी साइटों से वीडियो और साउंड जैसे बड़े मीडिया रिसॉर्स लोड किए जा सकते हैं. नियम को इस अपवाद में शामिल करने की एक वजह यह है कि ऐप्लिकेशन में सीमित कनेक्टिविटी या कनेक्टिविटी न होने पर, <video> और <audio> एलिमेंट का फ़ॉलबैक अच्छा होता है. एक और वजह यह है कि XMLHttpRequest और blob यूआरएल के साथ मीडिया फ़ेच करने और दिखाने की सुविधा, फ़िलहाल स्ट्रीमिंग या आंशिक बफ़रिंग की अनुमति नहीं देती.

सैंडबॉक्स किया गया iframe उपलब्ध कराने के लिए, <webview> टैग बनाया जा सकता है. इसका कॉन्टेंट कहीं से भी ऐक्सेस किया जा सकता है, लेकिन इसे सीधे Chrome app API का ऐक्सेस नहीं मिलता. ज़्यादा जानकारी के लिए, बाहरी वेब पेज एम्बेड करना लेख पढ़ें.

'Chrome ऐप्लिकेशन' पर कुछ पाबंदियां कॉन्टेंट की सुरक्षा के बारे में नीति (सीएसपी) लागू होती है. ये पाबंदियां हमेशा नीचे दी गई होती हैं और इन्हें Chrome ऐप्लिकेशन के लिए बदला नहीं जा सकता:

default-src 'self';
connect-src * data: blob: filesystem:;
style-src 'self' blob: data: filesystem: 'unsafe-inline';
img-src 'self' blob: data: filesystem:;
frame-src 'self' blob: data: filesystem:;
font-src 'self' blob: data: filesystem:;
media-src * data: blob: filesystem:;

ऑफ़लाइन_चालू किया गया है, यह तय किया जा रहा है

यह माना जाता है कि आपका ऐप्लिकेशन ऑफ़लाइन काम करता है. अगर ऐसा नहीं है, तो आपको इस तथ्य का विज्ञापन देना चाहिए, ताकि उपयोगकर्ता के ऑफ़लाइन रहने पर इसके लॉन्च आइकॉन की रोशनी कम हो. ऐसा करने के लिए, ऐप्लिकेशन मेनिफ़ेस्ट फ़ाइल में offline_enabled को false पर सेट करें:

{
  "name": "My app",
  ...
  "offline_enabled": false,
  ...
}

डेटा को स्थानीय तौर पर सेव किया जा रहा है

नीचे दी गई टेबल में, डेटा को डिवाइस पर सेव करने के विकल्प दिए गए हैं. इसके लिए, डेटा मैनेज करें भी देखें.

APIसबसे अच्छा इस्तेमालज़रूरी जानकारी
Chrome स्टोरेज एपीआईकम स्ट्रिंग डेटासेटिंग और स्थिति के लिए बेहतरीन. रिमोट तरीके से भी सिंक करना आसान है, लेकिन आपको ऐसा करने की ज़रूरत नहीं पड़ती. कोटा कम होने की वजह से, ज़्यादा डेटा इस्तेमाल नहीं किया जा सकता.
IndexedDB एपीआईस्ट्रक्चर्ड डेटाडेटा पर तेज़ी से खोजने की सुविधा चालू करता है. unlimitedStorage की अनुमति के साथ इस्तेमाल करें.
फ़ाइल सिस्टम एपीआईअन्य सेवाओं के लिए पेमेंटसैंडबॉक्स की गई जगह उपलब्ध कराता है, जहां फ़ाइलें सेव की जा सकती हैं. unlimitedStorage की अनुमति के साथ इस्तेमाल करें.

कहीं से भी डेटा सेव करना

आम तौर पर, किसी दूसरे डिवाइस से डेटा सेव करने का तरीका आप पर निर्भर करता है. हालांकि, कुछ फ़्रेमवर्क और एपीआई आपकी मदद कर सकते हैं (एमवीसी आर्किटेक्चर देखें). अगर Chrome Storage API का इस्तेमाल किया जाता है, तो ऐप्लिकेशन के ऑनलाइन होने और उपयोगकर्ता के Chrome में साइन इन होने पर, सिंक किया जा सकने वाला सारा डेटा अपने-आप सिंक हो जाता है. अगर उपयोगकर्ता ने साइन इन नहीं किया है, तो उसे साइन इन करने के लिए कहा जाएगा. हालांकि, ध्यान रखें कि अगर उपयोगकर्ता आपके ऐप्लिकेशन को अनइंस्टॉल करता है, तो उसका सिंक किया गया डेटा मिट जाता है. {QUESTION: true?}

ऐप्लिकेशन अनइंस्टॉल करने के बाद, उपयोगकर्ताओं का डेटा कम से कम 30 दिनों तक सेव रखें. इससे, आपका ऐप्लिकेशन फिर से इंस्टॉल करने वाले उपयोगकर्ताओं को अच्छा अनुभव मिलेगा.

यूज़र इंटरफ़ेस (यूआई) को डेटा से अलग किया जा रहा है

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

अगर आपका ऐप्लिकेशन किसी कस्टम सर्वर से कनेक्ट करता है, तो सर्वर को आपको डेटा देना चाहिए, न कि एचटीएमएल के हिस्सों का. RESTफ़ुल एपीआई के बारे में सोचें.

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

टेस्ट करना

पक्का करें कि आपका ऐप्लिकेशन इन स्थितियों में ठीक से काम करता हो:

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

यह भी पक्का करें कि ऐप्लिकेशन उपयोगकर्ता की मशीन पर उपयोगकर्ता का कोई संवेदनशील डेटा (जैसे कि पासवर्ड) सेव न करे.