2016-03-16 11 views
5

पर चलते रहें मैं MQTT-Client-Framework के माध्यम से हमारे पुश सर्वर से कनेक्ट करने का प्रयास कर रहा हूं।एमक्यूटीटी-क्लाइंट-फ्रेमवर्क पृष्ठभूमि

सर्वर से कनेक्ट करने के लिए कोई जटिलता नहीं है और कोड की कुछ पंक्ति के साथ मैं सर्वर से कनेक्ट कर सकता हूं और विषय की सदस्यता ले सकता हूं।

लेकिन मेरे पास कुछ सवाल है कि मुझे उनके लिए कोई सीधा जवाब नहीं मिला।

1) मैं अपने क्लाइंट को पृष्ठभूमि में कैसे चला सकता हूं?

2) डिवाइस पुनरारंभ करने के बाद क्या होता है? डिवाइस पुनरारंभ करने के बाद मैं स्वचालित रूप से सर्वर से कैसे कनेक्ट कर सकता हूं?

3) मान लीजिए मुझे सर्वर से कनेक्ट करने में त्रुटि मिली है। क्या यह लाइब्रेरी लूप में कनेक्ट करने की कोशिश कर रही है? कितनी बार कोशिश करें? या मुझे इसे स्वयं प्रबंधित करने की ज़रूरत है?

4) विषय के लिए सदस्यता लेने के लिए एक ही 3 परिदृश्य?

उत्तर

2

एमक्यूटीटी-क्लाइंट फ्रेमवर्क पर मेरे अनुभव के आधार पर आपके प्रश्न/प्रश्नों के उत्तर हैं। मुझे आशा है कि यह आपकी चिंताओं को स्पष्ट करे और आगे बढ़ने में आपकी सहायता करे।

1) मैं अपने क्लाइंट को पृष्ठभूमि में कैसे चला सकता हूं?

  • आप अपने एमक्यूटीटी क्लाइंट को पृष्ठभूमि में नहीं रख सकते हैं, क्योंकि ऐप्पल किसी भी एप्लिकेशन को पृष्ठभूमि में लंबे समय तक चलने की अनुमति नहीं देता है। यद्यपि यदि आप इसकी गारंटी नहीं देते हैं तो आपका आवेदन पृष्ठभूमि में चल रहा है। apple documentation.
  • में पृष्ठभूमि निष्पादन समर्थन के बारे में आप और अधिक पढ़ सकते हैं, दिए गए ढांचे के लिए गिथब पर पोस्ट किए गए issue भी देखें।

2) डिवाइस पुनरारंभ करने के बाद क्या होता है? डिवाइस पुनरारंभ करने के बाद मैं स्वचालित रूप से सर्वर से कैसे कनेक्ट कर सकता हूं?

  • हर बार अपने अनुप्रयोग निष्पादन आप अपने सर्वर MQTT ग्राहक ढांचे का उपयोग कर से कनेक्ट करने की जरूरत है कोई ऑटो तंत्र MQTT-ग्राहक ढांचे में उपलब्ध कनेक्ट है शुरू करते हैं। मैं जो सिवाय एक ही रूप में AppDelegate

3) मान लीजिए मैं सर्वर से कनेक्ट करते समय कोई त्रुटि मिला अपने एप्लिकेशन लॉन्च के तुरंत बाद कार्यान्वित विशिष्ट नियंत्रक में अपने कनेक्शन init लिखने के लिए सुझाव देते हैं। क्या यह लाइब्रेरी लूप में कनेक्ट करने की कोशिश कर रही है? कितनी बार कोशिश करें? या मुझे इसे स्वयं प्रबंधित करने की ज़रूरत है?

  • अपने MQTT-ग्राहक अपने सर्वर से कनेक्ट करने में विफल रहता है, तो आप यह अपने आप को संभालने के लिए की जरूरत है, पुस्तकालय ऑटो करने की कोशिश नहीं करता है कनेक्ट के रूप में पिछले जवाब में बताया गया। मैंने नीचे नमूना कोड लिखा है। सर्वर से ऑटो कनेक्ट करने के लिए NSTimer का उपयोग करें।

    [self.mqttSession connectToHost:MQTT_HOST port:MQTT_PORT usingSSL:NO connectHandler:^(NSError *error) 
    { 
        if(error) 
        { 
         // Application fail to connect to server, write your code to auto connect here 
        } 
    }]; 
    

4) विषय की सदस्यता के लिए एक ही 3 परिदृश्य?

  • यदि आपके ब्रोकर सर्वर में व्यक्तिगत उपयोगकर्ताओं/क्लाइंट के लिए आपकी मौजूदा सदस्यता को ट्रैक करने के लिए कॉन्फ़िगरेशन है तो आपको प्रत्येक बार सदस्यता लेने की आवश्यकता नहीं है।
  • अन्यथा हर बार आपको सफल कनेक्शन पर एक ही विषय की सदस्यता लेने की आवश्यकता होती है। सब्सक्राइब करने के लिए निम्नलिखित MQTTSessionDelegate विधि का उपयोग करें।

    - (void)connected:(MQTTSession *)session 
    

मुबारक कोडिंग :)

+0

यह लगभग सभी जवाब है, और इसके आधार पर मैं पृष्ठभूमि में अपने सर्वर से जुड़े नहीं रह सकता, लेकिन टेलीग्राम जैसे बड़े पैमाने पर, वे अपने सर्वर से जुड़े रहने के लिए क्या करते हैं? – mehdok

+2

वे पृष्ठभूमि में कनेक्ट नहीं रहते हैं, वे प्रत्येक नए संदेश के लिए 'एपीएनएस' पुश अधिसूचना भेजते हैं, जो उपयोगकर्ता को नए संदेश के बारे में सूचित करता है। दोनों चीजें समानांतर काम करती हैं, वे एमक्यूटीटी के साथ ही अधिसूचना सेवा के माध्यम से संदेश भेजते हैं। –

+0

tnx बहुत, यह सब मुझे चाहिए। लेकिन पृष्ठभूमि में जुड़े रहने के लिए कोई हैक है? नोट: मुझे कोई फर्क नहीं पड़ता कि सेब स्टोर के लिए ऐप को स्वीकृति नहीं देगा, ऐप में इंटर संगठन का उपयोग है। – mehdok

0

अपने पहले प्रश्न के लिए: कैसे iOS पर पृष्ठभूमि में चलाने के लिए पर

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

सूची यह भी दिखाती है कि कौन सा UIBackgroundModes आपके Info.plist में स्थानांतरित करने के लिए है ताकि आपके ऐप को पृष्ठभूमि पहुंच की आवश्यकता हो।

अन्य 3 मैं

+0

मुझे लगता है कि आप इस लिंक :) – mehdok

+0

लिंक होना चाहिए अब – hardillb

+0

ठीक है, कड़ी में वे पृष्ठभूमि मोड में पुश अधिसूचना को सक्षम करने के लिए पर्याप्त है कहा लगाना भूल गए , और 'आवेदन: didReceiveRemoteNotification: fetchCompletionHandler: 'प्राप्त अधिसूचना पर कॉल किया जाएगा। मुझे विश्वास है कि यह एपीएन के लिए है, क्या यह कस्टम लाइब्रेरी के साथ काम करता है? – mehdok

1

1) परियोजना> Capabilities-> पृष्ठभूमि मोड के साथ मदद नहीं कर सकता। पृष्ठभूमि में आपके ऐप को चलाने की अनुमति देने के लिए कुछ विकल्प हैं।

2) आम तौर पर, यदि आपके ऐप को पृष्ठभूमि में चलाने की अनुमति है तो एमक्यूटीटी सर्वर से डिस्कनेक्ट नहीं होगा, लेकिन मुझे लगता है कि आप बेहतर कनेक्शन जांच लेंगे और ऐप बनने पर एमक्यूटीटी को अपने सर्वर से फिर से कनेक्ट कर सकते हैं फिर से सक्रिय

AppDelegate->- (void)applicationDidBecomeActive:(UIApplication *)application;

3) दुर्भाग्य से, हाँ, यह होगा। और आपको खुद को प्रबंधित करना होगा।

4) मैं मदद नहीं कर सकता।

+0

पृष्ठभूमि मोड सीमित समय (3 से 10 मिनट) के लिए काम करता है, मुझे जितनी देर तक सर्वर से कनेक्ट रहने की आवश्यकता है। – mehdok

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