
ऐसा नहीं है कि बहुत पहले, WP7 के तहत मेल एप्लिकेशन शुरू हुआ था। जब हमने इस बारे में सोचा कि क्या हमें विंडोज फोन के लिए एक स्टैंडअलोन एप्लिकेशन की आवश्यकता है, या केवल IE मोबाइल और इसके एनालॉग्स के लिए Mail.Ru मेल को अनुकूलित करें, तो प्रश्न जल्दी हल हो गया। WP7 पर स्मार्टफ़ोन के मालिकों के पास अपना पूर्ण मेल अनुप्रयोग होना चाहिए, जो पूरी तरह से प्लेटफ़ॉर्म के लिए अनुकूलित हो।
हम इस बारे में बताएंगे कि हमने आवेदन के लिए क्या आवश्यकताएं प्रस्तुत कीं, हमने किन समस्याओं का सामना किया और वे कैसे हल की गईं, कट के तहत।
संकल्पना
हमने तुरंत फैसला किया कि पहली जगह में आवेदन को बड़ी मात्रा में डेटा को संसाधित करना चाहिए और बड़ी सूची लोड करते समय भी उच्च गति सुनिश्चित करना चाहिए (उदाहरण के लिए, आने वाले पत्रों की सूची)। कुछ पहलुओं में, एप्लिकेशन को बिल्ट-इन ईमेल क्लाइंट से मिलता-जुलता होना चाहिए ताकि इसके साथ काम करते समय कोई असुविधा न हो। उसी समय, एप्लिकेशन में उन्नत विशेषताएं होनी चाहिए जो इसे अंतर्निहित क्लाइंट से अलग करती हैं।
विशेष रूप से, यह स्पर्श इंटरफ़ेस की सभी विशेषताओं का उपयोग करके हावभाव नियंत्रण पर केंद्रित है। फ़ोल्डरों के बीच स्विच करना और एक उंगली की एक चंचलता के साथ पत्र से पत्र तक ले जाना सुविधाजनक और मंच की भावना के अनुरूप है। एक अन्य विशेषता वेबमेल के साथ तत्काल सिंक्रनाइज़ेशन है। आवेदन में सभी उपयोगकर्ता क्रियाएं तुरंत वेब इंटरफ़ेस में प्रदर्शित होती हैं; सभी नए पत्र तुरंत आवेदन में दिखाई दे रहे हैं।
WP7 के लिए एप्लिकेशन विकसित करने वाले हर कोई जानता है कि मानक नियंत्रण के ढांचे के भीतर विकास एक या दो बार किया जाता है; उनसे विचलन बाएं या दाएं एक कदम से कार्य को पूरा करने का समय बढ़ जाता है।
इसलिए, हमें किन कठिनाइयों का सामना करना पड़ा।
फ़ोल्डरों के बीच स्विच करें
फ़ोल्डरों के बीच स्विच करने के लिए, पिवट नियंत्रण का उपयोग करने का निर्णय लिया गया था। सब कुछ सरल है - पृष्ठ-दर-पृष्ठ स्विचिंग, प्रत्येक पृष्ठ मांग पर लोड है।
"मानक उपयोगकर्ता" के लिए सब कुछ ठीक काम करता है - मेलबॉक्स में पंजीकरण के बाद केवल 5 फ़ोल्डर हैं, एप्लिकेशन जल्दी से लोड होता है। लेकिन फ़ोल्डर्स के कुछ उपयोगकर्ता कई (और बहुत अधिक) हो सकते हैं।
परीक्षण के लिए, उपयोगकर्ता फ़ोल्डर को लाइव मेलबॉक्स में जोड़ा गया था (कुल 40 थे)। ऐसी स्थिति में, प्रारंभ स्क्रीन पर टाइल पर टैप के क्षण से इनबॉक्स सूची के प्रदर्शन के लिए आवेदन शुरू करने में लगभग 30 सेकंड लगे। यह परिणाम हमें किसी भी तरह से शोभा नहीं देता।
प्रदर्शन की समस्याओं के एक विस्तृत अध्ययन से पता चला है कि ओब्जर्वेबलकोलेक्शन कंटेनर, जिसमें फ़ोल्डरों की सूची संग्रहीत की गई थी, वह अड़चन थी। कंटेनर को फ़ोल्डर्स के बारे में डेटा प्राप्त होने के बाद, सूची को एक फ़ोल्डर से लोड किया गया था। ऑब्जर्वेबल कॉलेक्शन के कई अतिरिक्त समर्थन नहीं करते हैं। और जब आप प्रत्येक नए तत्व को जोड़ते हैं, तो UI फिर से बनाया जाता है। धुरी के लिए, यह अस्वीकार्य हो गया। हां, Microsoft अपनी सिफारिशों में लिखता है: "प्रदर्शन विचार के लिए संभव होने पर धुरी नियंत्रण पृष्ठों की संख्या कम से कम करें", लेकिन स्विचिंग जेस्चर बनाने की इच्छा प्रबल हो गई। एक समाधान के रूप में, SilentObservableCollection विरासत में मिला वर्ग व्युत्पन्न था, जिसमें तीन AddSilently, InsertSilently और RemoveSilently विधियों को जोड़ा गया था, साथ ही अधिसूचना विधि भी। जैसा कि नाम का अर्थ है, पहले तीन तरीके आपको प्रत्येक बदलाव के साथ यूआई के पुनर्निर्माण के बिना सूची को फिर से बनाने की अनुमति देते हैं। अंतिम विधि आपको फ़ोल्डर्स की सूची अपडेट होने के बाद यूआई को बदलने की अनुमति देती है।
अक्षरों के बीच स्विच करें
फिर स्वाइप पर अक्षरों के बीच स्विच करना आवश्यक था। प्रारंभ में, पिवट तत्व का उपयोग इस कार्य के लिए किया गया था, जैसे कि फ़ोल्डर्स की सूची के मामले में। उसके साथ कई समस्याएं थीं।
सबसे पहले, वह तुरंत पत्रों के लिए सभी पृष्ठ बनाता है (हालाँकि पत्र स्वयं लोड होते हैं क्योंकि आप उनके पास जाते हैं), जिसके लिए फिर से पढ़ने के पृष्ठ को खोलने के लिए बहुत समय की आवश्यकता होती है।
पिवट के लिए पत्रों की सूची लोड हेडर की एक सूची है। यदि आप इस सूची को नीचे ले जाते हैं, तो 20 अक्षरों के ब्लॉक मौजूदा सूची में लोड किए जाते हैं। यदि आप बहुत आगे बढ़ते हैं, तो एक पत्र खोलने में कई मिनट लग सकते हैं, जबकि Pivot प्रत्येक अक्षर के लिए पृष्ठ बनाता है।
दूसरे, धुरी लूप है। और, पैनोरमा के विपरीत, जहां पृष्ठभूमि को स्थानांतरित करने से आप मोटे तौर पर समझ सकते हैं कि आप किस पृष्ठ पर हैं, पिछले पृष्ठ से संक्रमण को पिवट में पहले पृष्ठ के लिए संक्रमण से अलग नहीं है। पत्रों की सूची के मामले में यह बहुत भ्रामक था। यह स्पष्ट नहीं था कि पहला अक्षर कहां था, किस दिशा में फ्लिप करना था, अगले एक को देखने के लिए, क्यों कुछ पत्र के बाद आप फिर से पहले वाले से मिले।
इन सभी समस्याओं को दूर करने के लिए, LongListPivot नामक एक नियंत्रण लिखा गया था। यह वर्णित दोनों समस्याओं को हल करता है। यह लूप नहीं है, अर्थात्, पहले अक्षर से अंतिम तक कोई संक्रमण नहीं है। और इसका केवल एक पेज है। स्क्रीन के पीछे होने पर इस पेज का डेटा बदल जाता है। उंगली को हिलाने के बाद, वर्तमान पत्र स्क्रीन को छोड़ देता है, वहां इसे अगले एक से बदल दिया जाता है, जो स्क्रीन के दूसरी तरफ से आता है। साथ ही, जब सूची में अंतिम पत्र आ रहा है, तो फ़ोल्डर में अक्षरों की सूची के मामले में, 20 अक्षरों के अगले ब्लॉक को लोड किया गया है।
ईमेल देखें
अगला कार्य, जिसके समाधान में सबसे अधिक समय लगा, वह html-markup के साथ ईमेल देख रहा था।
सब कुछ सरल प्रतीत होता है: एक WebBrowser तत्व है। हम इसे पृष्ठ पर रखते हैं, पाठ को इसमें लोड करते हैं - और आप कर रहे हैं। लेकिन इस तत्व का उपयोग असंभव होने पर आवेदन का उपयोग करने के लिए परिदृश्य हैं। उदाहरण के लिए, यदि कई प्राप्तकर्ता हैं, और उपयोगकर्ता ने पूरी सूची खोल दी है। या यदि पत्र में कई अटैचमेंट हैं। यह सब इस तथ्य की ओर जाता है कि पत्र का हेडर फैला हुआ है, और सामग्री स्क्रीन के निचले भाग में जाती है। इसके परिणामस्वरूप, साथ ही साथ यह तथ्य भी है कि वेबब्रोज़र की अपनी आंतरिक सामग्री स्क्रॉलिंग है, हमें यह संदेश मिलता है कि संदेश एक छोटे से क्षेत्र के अंदर स्क्रॉल करता है।
हमने इस तरह के एक समाधान पर विचार किया: पत्र की ऊंचाई निर्धारित करने के लिए और इसकी आंतरिक स्क्रॉलिंग को बाहर करने के लिए WebBrowser के लिए ऊंचाई निर्दिष्ट करें, और स्क्रॉलव्यूअर के अंदर तत्वों के सामान्य प्रवाह में इसे फिट करें। लेकिन, सबसे पहले, WP7 में, एक नियंत्रण 2048 पिक्सेल से अधिक चौड़ा या उच्च नहीं हो सकता है (जो केवल 2.5 स्क्रीन ऊँचाई है)। दूसरे, पत्र की सामग्री की ऊंचाई निर्धारित करने का कोई तरीका नहीं है।
WebBrowser इसमें लोड किए गए पृष्ठ के बारे में जानकारी प्रदान नहीं करता है, न ही यह सामग्री (स्क्रॉलिंग, चौड़ाई और स्केल) के प्रदर्शन को नियंत्रित करने के लिए सॉफ़्टवेयर इंटरफेस प्रदान करता है। प्रोग्रामर के लिए केवल एक चीज बची हुई है कि वह इनवोकस्क्रिप्ट का उपयोग करके जावास्क्रिप्ट में कमांड भेजे और ScriptNotify इवेंट के माध्यम से सूचनाएं प्राप्त करें।
पत्र पढ़ने के लिए पृष्ठ का आगे विकास एक नए स्तर पर चला गया है - सीएसएस + जावास्क्रिप्ट। मोबाइल वेब-मेल से हमारे सहयोगियों के लिए धन्यवाद, हम रास्ते में आने वाली सभी समस्याओं को हल करने में कामयाब रहे: पत्र की चौड़ाई, स्केल, स्क्रॉल कैसे सेट करें।
पत्रों में लिंक
अन्य कार्यों की लिंक प्रोसेसिंग थी। लिंक अंतर्निहित वेबब्रोसर तत्व के अंदर नहीं खुलने चाहिए जो संदेश का पाठ प्रदर्शित करता है, लेकिन सिस्टम ब्राउज़र में। ऐसा करने के लिए, एक WebBrowser तत्व पर क्लिक किया। फिर, जावास्क्रिप्ट के माध्यम से, स्पर्श स्थिति पर स्थित HTML लेआउट तत्व निर्धारित किया गया था, यह जांचा गया था कि क्या यह तत्व एक लिंक है, और, यदि हां, तो पता बाहरी ब्राउज़र में खोला गया था।
समस्या छूट सेवाओं के एग्रीगेटरों में से एक के पत्रों के साथ थी। HTML में सूचनाओं का स्रोत पाठ लगभग 300-500 Kb है। जब इस तरह के पत्र को प्रदर्शित करने की कोशिश की जाती है, तो प्रोग्राम मेमोरी आउट के साथ क्रैश हो जाता है। अंत में, html-markup के साथ सभी अक्षरों को प्रदर्शित करने और अनुकूलित पाठ के रूप में 100 Kb से बड़ा प्रदर्शित करने का निर्णय लिया गया।
अनुलग्नकों के साथ काम करें
विंडोज फोन प्लेटफॉर्म की विशेषताओं में से एक इसकी अलग-अलग डेटा स्टोरेज है। अनुलग्नकों के साथ काम करने में समस्याएं हैं। मेल प्रोग्राम पूरी तरह से पत्र से जुड़ी गैलरी से छवियों के साथ-साथ स्मार्टफोन के कैमरे का उपयोग करके लिए गए चित्रों के साथ काम करता है। मेल एप्लिकेशन में, आप आने वाले पत्र से जुड़ी छवियों को देख सकते हैं और, यदि आप चाहें, तो उन्हें गैलरी में सहेजें। कार्यक्रम भेजे गए वीडियो और ऑडियो फ़ाइलों को भी खेल सकते हैं।
स्थिति एमएस ऑफिस और एडोब रीडर दस्तावेजों के साथ निम्नलिखित है: कार्यक्रम इन अटैचमेंट को डाउनलोड करने के लिए एक लिंक बनाता है और इसे एक बाहरी ब्राउज़र में स्थानांतरित करता है। अनुलग्नक को सहेजने के बाद, ब्राउज़र इसे कार्यालय या एडोब रीडर में स्थानांतरित करता है। संलग्न फ़ाइल इन कार्यक्रमों में बनी हुई है। हालांकि, यदि आप इसे मेल एप्लिकेशन से फिर से खोलने का प्रयास करते हैं, तो आपको पथ को दोहराना होगा: एक लिंक उत्पन्न होगा, अटैचमेंट एक बाहरी ब्राउज़र द्वारा डाउनलोड किया जाएगा और संबंधित प्रोग्राम में खुलेगा।
परीक्षण
हमें परीक्षण के बारे में भी बात करनी चाहिए। उपकरणों की सुविधाओं के कारण WP-अनुप्रयोगों का परीक्षण कई कठिनाइयों से जुड़ा हुआ है। उदाहरण के लिए, परीक्षण प्रक्रिया के लॉग को लॉग और प्रदर्शित करना और डिवाइस से सीधे स्क्रीनशॉट लेना अभी तक संभव नहीं है।
इस तथ्य के बावजूद कि हमने एप्लिकेशन के 5 बीटा बिल्ड प्रकाशित किए, उनमें से कोई भी उपयोगकर्ताओं को नहीं दिया गया था। उस क्षण से जब यह डाउनलोड के लिए उपलब्ध हो जाता है, तो विधानसभा को प्रकाशित किया जाता है, इसमें तीन दिन लगते हैं। इस समय के दौरान, हमारे परीक्षक द्वारा अधिकांश असेंबली त्रुटियों का पता लगाया जाता है, फिक्स्ड, और बीटा संस्करण अप्रचलित हो जाता है। परीक्षण को व्यवस्थित करने के लिए, 4 डेवलपर खाते खोले गए, जिनकी मदद से 12 उपकरणों को अनलॉक किया गया। समय-समय पर, विकास के अगले चरण के अंत में, अधिकांश उपकरणों पर नवीनतम, वर्तमान संस्करण स्थापित किया गया था और समीक्षाओं, टिप्पणियों और शिकायतों को एकत्र किया गया था।
अन्यथा, विंडोज फोन चलाने वाले उपकरणों के निर्माताओं के लिए माइक्रोसॉफ्ट की स्पष्ट आवश्यकताओं के लिए धन्यवाद, एप्लिकेशन, दुर्लभ अपवादों के साथ, स्मार्टफोन के विभिन्न मॉडलों पर समान काम करता है (एंड्रॉइड चलाने वाले उपकरणों के बीच ऐसा कोई विखंडन नहीं है)।
निष्कर्ष
हमें उम्मीद है कि आपको यह जानकारी उपयोगी लगी होगी। WP के तहत अन्य डेवलपर्स के अनुभव के बारे में पढ़ना हमारे लिए बहुत दिलचस्प होगा: यदि आप पहले से ही इसी तरह के कार्यों का सामना कर चुके हैं और उन्हें अलग तरीके से हल करते हैं, तो हमें टिप्पणियों में इसके बारे में बताएं।
हम, बदले में, आवेदन में सुधार पर काम करना जारी रखते हैं। आप हमारी टिप्पणियों और सुझावों को
mailapps@corp.mail.ru पर भेज सकते हैं।
Windows Phone स्टोर में Windows Phone 7 के लिए Mail.Ru मेल डाउनलोड करें।
बालाशोव वादिम, मोबाइल एप्लिकेशन डेवलपर
Mail.Ru