पहले ऑफ़लाइन

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

खास जानकारी

Chrome ऐप्स को ये सुविधाएं मुफ़्त मिलती हैं:

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

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

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

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

Chrome ऐप्स सीमित जगहों पर ही उपलब्ध होते हैं:

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

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

सैंडबॉक्स किया गया iframe देने के लिए, <webview> टैग बनाया जा सकता है. इसका कॉन्टेंट रिमोट हो सकता है, लेकिन उसके पास Chrome ऐप्लिकेशन 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:;

ऑफ़लाइन_enable को तय किया जा रहा है

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

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

डेटा को डिवाइस पर सेव करें

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

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

किसी भी जगह से डेटा सेव करना

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

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

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

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

अगर आपका ऐप्लिकेशन किसी कस्टम सर्वर से कनेक्ट करता है, तो सर्वर आपको डेटा देगा, न कि एचटीएमएल के कई हिस्से. इसमें सोचें RESTful API की शर्तों से सहमत हैं.

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

टेस्ट करना

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

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

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