5

के माध्यम से पृष्ठभूमि से डेटा नहीं भेजा गया है मेरे पास एक ऐसा एप्लिकेशन है जो पृष्ठभूमि में ऐप होने पर सर्वर को डेटा भेजता है।3 जी

-(bool) sendStats: (MCStatsSender*) val{ 

    if(![self checkInternet]){ //Using Reachability here 

     return false; 
    } 

    NSDictionary *inputData = [NSDictionary dictionaryWithObjectsAndKeys: 
           self.propertyA.value, "key1", 
           val.data, "key2", 
           nil]; 


    [myNetworkManager doRequest:[myRequestManager createWithStringAndDictionary:MY_URL Data:inputData handler:myHandler user:val]]; 
    return true; 
} 

तो inputData तार के साथ एक सरल शब्दकोश है: यहाँ कोड भेजकर डेटा के लिए जिम्मेदार है।

एक विधि doRequest एक NSURLSession पर आधारित है और मूल रूप से इस तरह दिखता है:

-(void) doRequest: (MCRequest*) request{ 

    [tasks addObject:request]; 

    if(m_session == nil){ 
     NSURLSessionConfiguration* config = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:[NSString stringWithFormat:@"key-%lu",reqid]]; 
     m_session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:nil]; 
    } 

    NSURLSessionDataTask* task = [m_session dataTaskWithRequest:request.generatedRequest]; 
    request.reqId = task.taskIdentifier; 
    [task resume]; 
} 

जैसा कि मैंने कहा, सब कुछ वाई-फाई के माध्यम से काम करता है, एप्लिकेशन को पृष्ठभूमि में चला जाता है, और कुछ ही मिनटों के बाद, एक कस्टम ब्लूटूथ डिवाइस कुछ डेटा भेजता है और निलंबित मोड से एप्लिकेशन को जगाता है। आईओएस एप्लिकेशन द्वारा डेटा प्राप्त करने के बाद, यह किसी सर्वर को 3 जी से कनेक्ट होने पर सर्वर पर भेजने में विफल रहता है। मैं सकारात्मक हूं कि ब्लूटूथ के माध्यम से भेजा गया डेटा प्राप्त होता है क्योंकि यह स्थानीय डेटाबेस में संग्रहीत होता है।

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

पता नहीं क्या अंतर है और मैक से केबल से जुड़ा हुआ ऐप अलग-अलग क्यों कार्य करता है, और क्यों 3 जी (या 2 जी) के माध्यम से डेटा नहीं भेजा जाता है?

अतिरिक्त जानकारी:

मैं एक फ़ाइल अपलोड की कोशिश नहीं कर रहा हूँ, बल्कि सिर्फ एक सर्वर के लिए एक JSON भेजें।

+0

आपके डिवाइस में ब्लूटूथ डेटा कितना समय मिला ?? – CodeChanger

+0

@CodeChanger एक ऐप हर पांच मिनट या उससे कम समय में ब्लूटूथ से डेटा प्राप्त कर रहा है। मुझे यकीन है कि ब्लूटूथ से डेटा प्राप्त होता है क्योंकि मैं इसे स्थानीय स्क्लाइट डेटाबेस में संग्रहीत करता हूं। – Whirlwind

+0

ठीक है तो 3.0 मिनट ऐप निलंबित होने के बाद मेरे ज्ञान के अनुसार और आपको उस मोड को संभालना होगा और अपनी सेवा को 'bgTask' के साथ कॉल करना होगा। – CodeChanger

उत्तर

4

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

डेटा भेजे जाने पर जो चीजें प्रभावित होती हैं उनमें गीलेर डिवाइस से जुड़ा होता है, डेटा कनेक्शन की गुणवत्ता (कितनी देर तक और डेटा भेजने के लिए कितनी शक्ति लेती है), डिवाइस और क्या कर रहा है (क्या यह एकाधिक अपलोड जोड़ सकता है) ...

तो, आप पृष्ठभूमि में रहते हुए किसी विशेष समय पर किसी भी कार्य पर कार्रवाई या भरोसा नहीं कर सकते हैं।

इस प्रकार का परीक्षण वास्तव में केवल डिवाइस पर किया जाना चाहिए, और एक्सकोड से कनेक्ट नहीं होना चाहिए क्योंकि यह परीक्षण को प्रभावित करता है। इसके बजाय, नेटवर्क अनुरोधों को लॉग करने के लिए चार्ल्स प्रॉक्सी जैसे कुछ का उपयोग करें और डिवाइस का उपयोग करें, इसे समय की अवधि के लिए छोड़ दें और शायद कुछ अन्य ऐप खोलना और उपयोग करना। आपको अंततः भेजा जाने वाला डेटा देखना चाहिए, लेकिन आपको प्रतीक्षा करनी होगी।

+0

हाँ, मैंने इसके बारे में कुछ और शोध और खुदाई की है, और यह बिजली और वाई-फाई के बारे में है जो ज्यादातर मुख्य कारक हैं जब आईओएस निर्धारित करता है कि ऐप विवेकपूर्ण कार्यों को निष्पादित करने के लिए एक अच्छी स्थिति में है या नहीं। बेशक, कुछ अन्य कारक भी हैं, जैसा कि आपने कहा था ... – Whirlwind

+0

फिर भी, समस्या यह है कि यदि ऐप पृष्ठभूमि में है, तो 1 मिनट के बाद नहीं, 1 घंटे के बाद नहीं, कोई डेटा कभी नहीं भेजा जाता है। बात यह है कि मैं वह नहीं हूं जिसने एक वर्ग लिखा है जो अनुरोधों को संभालता है, इसलिए मैं इस समय 100% निश्चित नहीं हो सकता कि सबकुछ ठीक से कॉन्फ़िगर किया गया है (उम्मीद है कि कक्षा स्वयं समस्याग्रस्त है)।मैं कुछ परीक्षण करूँगा और आपको परिणामों के बारे में बता दूंगा। मैं कंप्यूटर से जुड़े डिवाइस पर परीक्षण कर रहा था यह देखने के लिए कि बैटरी के साथ कुछ है या नहीं। बेशक, मैं बाद में एक डिवाइस डिस्कनेक्ट कर दूंगा। – Whirlwind

+0

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

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