2012-10-09 13 views
5

मेरे ऐप में एक सुविधा उपयोगकर्ता को लॉग इन-आउट करने पर दूरस्थ पुशोटेशन से उपयोगकर्ता को अनधिकृत करना है। डिवाइस के हवाई जहाज (ऑफलाइन) मोड में होने पर उपयोगकर्ता लॉग आउट करते समय पुश अधिसूचना से ऐप को अनधिकृत कर सकता हूं?आईओएस unregisterForRemoteNotifications हवाई जहाज मोड में काम नहीं करता

मैंने इस कोड को आजमाया, लेकिन जब भी मैं ऑनलाइन वापस आ जाता हूं, तब भी मुझे अधिसूचनाएं मिलती हैं, [[यूआईपीप्लिकेशन साझा अनुप्रयोग] unregisterForRemoteNotifications];

क्या कोई व्यक्ति एयरलाइन मोड में होने पर अधिसूचना केंद्र से ऐप को हटाने में मदद कर सकता है?

+1

क्या आपको पंजीकरण करने के लिए इंटरनेट से कनेक्ट होने की आवश्यकता नहीं है? – DGund

+0

@DGund मैं एक ही गलत धारणा के तहत था लेकिन हकीकत में आपको सफलतापूर्वक अधिसूचना के लिए पंजीकरण रद्द करने के लिए ऑनलाइन होना चाहिए। यदि आपके पास कनेक्टिविटी नहीं है तो आपको अभी भी अधिसूचनाएं मिलती हैं। – user1732255

उत्तर

0

एक झंडा या कुछ इसी तरह जोड़ें (इसे कहते जो चाहो, ShouldRecallUnregister की तरह), जब आप कॉल

[[UIApplication sharedApplication] unregisterForRemoteNotifications];

है कि आप हाँ करने के लिए सेट अगर कोई इंटरनेट कनेक्शन है, और यह छोड़ अगर अनियंत्रित काम करता है तो नहीं।

स्टोर यह UserDefaults ([[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"ShouldRecallUnregister"];) में, और applicationDidBecomeActive: में अपने मूल्य की जाँच उदाहरण के लिए (या जहाँ भी यह आपके ऐप का श्रेष्ठ सूट)।

यदि यह हाँ है, तो [[UIApplication sharedApplication] unregisterForRemoteNotifications]; पर दोबारा कॉल करें।

+0

इस तरह, आपको एयरप्लेनोड स्विच स्विच और एप्लिकेशन सक्रियण से समय सीमा में और अधिसूचनाएं मिलेंगी। – ilmiacs

+0

समाधान के लिए धन्यवाद। unregisterForRemoteNotifications के पास एक ईवेंट कॉल वापस ट्रैक करने के लिए नहीं है अगर अनियंत्रण सफलतापूर्वक चला गया या नहीं? क्या इसे ट्रैक करने का कोई तरीका है? – user1732255

+0

@rdurand यह समाधान मेरी आवश्यकता को पूरा नहीं कर सकता है क्योंकि उपयोगकर्ता ने ऐप से लॉग आउट होने के बाद नोटिफिकेशन नहीं प्राप्त करना चाहिए।इस समाधान में अनियंत्रक केवल तब पूरा होता है जब उपयोगकर्ता फिर से लॉन्च करता है या ऐप को अग्रभूमि में लाता है। तब तक हमें अभी भी सूचनाएं मिलती हैं। क्या कोई बेहतर घास है? – user1732255

2

ऐप्पल रिमोट पुश अधिसूचनाओं को नियंत्रित करता है। यदि आप ऑफ़लाइन हैं तो आप तर्कसंगत रूप से इसे अक्षम नहीं कर सकते हैं। जब ऐप्पल आपको पहले ऑनलाइन देखता है और धक्का अक्षम नहीं होता है, तो यह आपको धक्का भेज देगा। IDevice को उस पुश को दिखाने से रोकने का कोई तरीका नहीं है जिसे सेब उपयोगकर्ता को भेजता है, क्योंकि यह ऐप के हाथों में नहीं है।

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

तो आपके पास एकमात्र मौका है यदि आपका ऐप पृष्ठभूमि में है, जबकि उपयोगकर्ता ऑनलाइन जाता है। सिस्टम नोटिफिकेशन का जवाब देने में सक्षम होने के लिए आपको अपने ऐप को निलंबित होने से रोकने की आवश्यकता होगी (here's इसे कैसे प्राप्त करें)। आपको जिस अधिसूचना की आवश्यकता है वह ऑनलाइन स्थिति में बदलाव की है, मुझे केवल पता है कि यह अस्तित्व में है। This resource सहायक हो सकता है। जब डिवाइस ऑनलाइन हो जाता है तो यह आपके ऐप को सूचित करेगा जो पृष्ठभूमि में प्रतीक्षा करता है (निलंबित नहीं)। फिर आप एफआरएम रिमोट को अनियंत्रित करके तुरंत प्रतिक्रिया दे सकते हैं।

यह संभव है कि आप उस दिशा में संभवतः सर्वश्रेष्ठ प्राप्त कर सकें। उम्मीद है की यह मदद करेगा।

+0

उपरोक्त, आपका समाधान कानूनी लगता है। – rdurand

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