2012-08-29 6 views
5

एप्लिकेशन चालू नहीं होने पर पुश नोटिफिकेशन प्राप्त करने के संबंध में SO पर कई प्रश्न यहां पढ़े हैं (पृष्ठभूमि में से अधिक, जिसका अर्थ है कि यह पूरी तरह से बंद हो गया है) । This question in particular यह पता लगाने में सबसे सहायक है कि यह निर्धारित करने के लिए कि क्या कोई लॉन्चऑप्शन डिक्शनरी का उपयोग कर रहा है या नहीं।ऐप चालू नहीं होने पर अधिसूचना पुश करें - लॉन्चऑप्शन डिक्शनरी खाली है

हालांकि, मैं बहुत उलझन में हूँ, और मैं पूरी तरह से स्वीकार करते हैं कि यह मेरा ओर से एक बड़े पैमाने पर निरीक्षण किया जा सकता है: जब मेरे डिवाइस एप्लिकेशन को बंद कर दिया जाता है इस आवेदन के लिए एक पुश सूचना प्राप्त करता है, और मैं बाद में अपने आवेदन को खोलते हैं, लॉन्चऑप्शन डिक्शनरी एक शून्य पॉइंटर है। पहले उल्लिखित लिंक, और अन्य स्थानों में स्वीकृत उत्तर के विवरण से, मैं इकट्ठा करता हूं कि मुझे अधिसूचना पेलोड देखने में सक्षम होना चाहिए; हालांकि कुछ भी नहीं है। मैं आईओएस 5.1.1 के लिए विकास कर रहा हूँ।

मेरा एकमात्र अन्य विचार स्टार्ट अप (शून्य से अधिक, कुछ करें ...) पर बैज की संख्या की जांच करना है, लेकिन यह बहुत अविश्वसनीय लगता है।

क्या कोई मुझे बता सकता है कि मुझे क्या याद आ रही है? आपकी मदद के लिए अग्रिम धन्यवाद!

+0

के लिए मान्य है पेलोड के अंदर क्या है? – msk

+0

@MSK मुझे खेद है कि मैं काफी समझ में नहीं आता - क्या आप पूछ रहे हैं कि मूल धक्का (मेरे सर्वर से) में इसके पेलोड के रूप में क्या है? यदि ऐसा है, तो पेलोड मूलभूत है, इसमें सामान्य बैज, अलर्ट और ध्वनि से परे कुछ भी कस्टम नहीं है। –

+0

नीचे दिए गए मेरे उत्तर को देखें – msk

उत्तर

7

application:didFinishLaunchingWithOptions: केवल अधिसूचना के कारण ऐप लॉन्च होने पर ही पेलोड जानकारी के साथ बुलाया जाएगा। जैसे यह तब हो सकता है जब उपयोगकर्ता अधिसूचना चेतावनी (अधिसूचना केंद्र में जोड़ा गया) या content-avialble = 1 के साथ पेलोड (न्यूजस्टैंड अधिसूचना) & में प्राप्त अधिसूचना पर टैप हो, बशर्ते आपका ऐप पृष्ठभूमि में भी अग्रभूमि में न हो।

यदि ऐप पृष्ठभूमि में है तो आपके ऐप को अधिसूचना प्राप्त होती है। यदि यह न्यूज़स्टैंड अधिसूचना है या उपयोगकर्ता विधि नीचे चेतावनी की कार्रवाई बटन पर टैप करता है, तो UIApplicationStateActive के बराबर नहीं

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 

कहा जाता है [[UIApplication sharedApplication] applicationState] साथ।

उपरोक्त मामले में यदि उपयोगकर्ता अधिसूचना चेतावनी के कार्रवाई बटन पर टैप नहीं करता है और इसे टैप करके ऐप लॉन्च नहीं करता है, न तो didFinishLaunchingWithOptions या didReceiveRemoteNotification कहा जाता है।

यदि आपके ऐप को अग्रभूमि didReceiveRemoteNotification में अधिसूचना प्राप्त होती है तो [[UIApplication sharedApplication] applicationState]UIApplicationStateActive के बराबर होगा।

बिल्ला के लिए notification में, यदि आपके ऐप कोई कोड नहीं चल रहा है निष्पादित किया जाता है और बैज ऐप्लिकेशन आइकन में 1 से वृद्धि की जाती है। जब आप ऐप लॉन्च करते हैं (ऐप आइकन पर टैप करें) didFinishLaunchingWithOptions सामान्य रूप से कॉल किया जाता है। (यदि ऐप अधिसूचना प्राप्त होने पर पृष्ठभूमि या अग्रभूमि में है, तो ऊपर जैसा ही है)

तो मुझे लगता है कि यह हर संभव मामले को कवर करता है। यह भी ध्यान रखें कि पृष्ठभूमि केस iOS SDK >= 4.0

+0

आह हे, आपके उत्तर के लिए धन्यवाद। मेरा मुख्य लक्ष्य एक पुश प्राप्त होने पर सर्वर से कुछ डेटा लाने के लिए था; हमारे पास यह पृष्ठभूमि और अग्रभूमि में काम कर रहा है, और मुझे आशा थी कि मैं लोड पर, पता लगा सकता हूं, अगर ऐप ऑफ़लाइन होने पर पुश प्राप्त हुआ था; यह आपके उत्तर के आधार पर प्रकट होता है, यह तब तक असंभव है जब तक कि उपयोगकर्ता अधिसूचना बार को छूता न हो। आपकी राय में, क्या बैज गिनती ऑन-लोड की जांच करना विश्वसनीय है? –

+0

आपको अपने सर्वर में बैज गिनती को बनाए रखना है [यह SO सवाल] (http: // stackoverflow।कॉम/प्रश्न/1 9 42605/पुश-अधिसूचना-बैज-ऑटो-वृद्धि) – msk

+0

आह हाँ शांत, मैं पहले से ही उस बारे में जानता था। यह वही नहीं है जो मैं पूछ रहा था हालांकि: मुझे पता है कि मैं ऐप के भीतर, बैज गिनती [एप्लिकेशन एप्लिकेशन IconBadgeNumber] का उपयोग करके जांच सकता हूं। मैं क्या सोच रहा था कि क्या यह जांचने के लिए भरोसेमंद है कि बैज गिनती शून्य से अधिक है ('[आवेदन आवेदन IconBadgeNumber]> 0')। क्या कोई कारण है कि मुझे ** ** ऐसा नहीं करना चाहिए? –

संबंधित मुद्दे