2014-10-14 5 views
8

हालांकि मेरा ऐप किसी भी इंटरनेट कनेक्शन के बिना प्रयोग योग्य है, लेकिन यह वेब सर्वर के साथ डेटा का आदान-प्रदान कर सकता है (कुछ उपयोगकर्ता आंकड़े दिखाने के लिए)। इसलिए मैं ऐप को "इंटरनेट कनेक्शन की आवश्यकता नहीं है" के रूप में विज्ञापित करता हूं। बाद में कुछ उपयोगकर्ताओं ने मेरे ऐप के लिए सेलुलर डेटा बंद कर दिया है, जो पूरी तरह से ठीक होना चाहिए। लेकिन जब मेरा ऐप डेटा का आदान-प्रदान करने का प्रयास करता है, तो इन उपयोगकर्ताओं को "ऐप नाम] के लिए सेलुलर डेटा बंद कर दिया जाता है।" संवाद।यह कैसे बताना है कि उपयोगकर्ता ने मेरे ऐप के लिए सेलुलर डेटा बंद कर दिया है या नहीं?

यह उनके लिए एक परेशानी है और मैं इन संवादों को रोकना चाहता हूं और बस संपूर्ण डेटा एक्सचेंज चीज़ को छोड़ना चाहता हूं।

Apple's Reachability Sample Code है।

लेकिन हालांकि मैंने ऐप के लिए पूरे डिवाइस और सेलुलर डेटा के लिए वाईफाई बंद कर दिया, रीचबिलिटी एक सकारात्मक इंटरनेट कनेक्शन की पुष्टि करता है। अधिक विशिष्ट होने के लिए, यह

Reachability Flag Status: WR t------ networkStatusForFlags 

कोई फर्क नहीं पड़ता कि मैंने सेलुलर डेटा सक्रिय किया है या नहीं। बेशक, जब सेलुलर डेटा बंद हो जाता है, तो कोई इंटरनेट कनेक्शन वास्तव में उपलब्ध नहीं होता है, इसलिए डेटा एक्सचेंज विफल रहता है। लेकिन उपयोगकर्ता को सेलुलर डेटा संवाद के साथ प्रस्तुत किया जाता है।

क्या यह पता लगाने का कोई तरीका है कि आईओएस 7 और आईओएस 8 पर इंटरनेट कनेक्शन उपलब्ध है या नहीं, एक विशिष्ट ऐप के लिए सेलुलर डेटा सेटिंग को ध्यान में रखते हुए - सभी सेलुलर डेटा संवाद के साथ हर बार उपयोगकर्ता को बिना बगैर किए?

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

उत्तर

2

मुझे लगता है कि आईओएस 8 में एकमात्र समर्थित तरीका एक ज्ञात सर्वर पर पिंग भेजना है और उपयोगकर्ता को अलर्ट पैनल के साथ कुछ बार बग करना है। आईओएस 8 पर, ऐप्पल पैनल को केवल दो बार प्रदर्शित करता है, फिर ऐप को पुनरारंभ होने पर भी इसे छोड़ देता है, शायद यह एक दिन बाद फिर से दिखाई देगा। (यह वास्तव में विज्ञापन समर्थित क्षुधा के लिए बुरी खबर है।)

एप्पल का कहना है (https://devforums.apple.com/message/1059332#1059332):

एक और डेवलपर डीटीएस करने के लिए लिखा था और इस तरह मैं का मौका गहराई में इसकी जांच की थी। हां, खबरों की अपेक्षा बहुत अधिक है: यह पता लगाने का कोई समर्थित तरीका नहीं है कि आपका ऐप इस स्थिति में है। न ही "कोई उपयोगकर्ता इंटरैक्शन" नेटवर्क कनेक्शन बनाने के लिए कोई तरीका नहीं है, है, अनुरोध है कि कनेक्शन वर्तमान यूआई की बजाय की तरह विफल हो।

निम्न लेख तरीके पिंग का उपयोग करने का सुझाव देते हैं:

http://www.splinter.com.au/how-to-ping-a-server-in-objective-c-iphone/

http://elbsolutions.com/projects/reachability-with-simpleping-wrapper/

0

उपयोग करने का प्रयास इस git project.

स्थापित करने के लिए आप git पर रीडमी अंदर देख सकते हैं। मैंने यह सुनिश्चित करने के लिए dispatch_once का भी उपयोग किया है कि पहुंच योग्यता केवल एक बार शुरू की जाएगी। यह dispatch प्रकार कभी-कभी बहुत उपयोगी होता है!

वर्ग

BOOL _online = NO; 

में चर को परिभाषित करें प्रारंभ चर

static dispatch_once_t predicate; 
    dispatch_once(&predicate, ^{ 
     Reachability *reach = 
      [Reachability reachabilityWithHostname:gameApiHost]; 
     reach.reachableBlock = ^(Reachability*reach) { 
      NSLog(@"REACHABLE!"); _online = YES; 
     }; 
     reach.unreachableBlock = ^(Reachability*reach) { 
      NSLog(@"UNREACHABLE!"); _online = NO; 
     }; 
     [reach startNotifier]; 
    }); 
+2

गम्यता काम नहीं करता है, यह रिपोर्ट गलत तरीके से "से पहुंचा जा सकता"। – cat

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

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