2015-12-07 19 views
5

से इंटरनेट कनेक्टिविटी की जांच करें मेरे पास एकता परियोजना है जिसे मैं एंड्रॉइड और आईओएस प्लेटफॉर्म के लिए बनाता हूं। मैं डेस्कटॉप, एंड्रॉइड और आईओएस उपकरणों पर इंटरनेट कनेक्टिविटी की जांच करना चाहता हूं। मैं के बारे में तीन अलग-अलग समाधान पढ़ा है:यूनिटी

  1. पिंग कुछ (उदाहरण के लिए गूगल) - मैं पूरी तरह इस तरह के निर्णय नापसंद करते हैं, और मैं एंड्रॉयड पर गलतियों के बारे में पढ़ा है।

  2. Application.internetReachability - एकता के दस्तावेज़ के अनुसार, इस समारोह केवल तय करेंगे कि मैं (यह एक वास्तविक कनेक्शन की गारंटी नहीं है) इंटरनेट से कनेक्ट होने की संभावना है।

  3. Network.TestConnection() - यदि मेरे पास कोई इंटरनेट कनेक्शन नहीं है, तो मेरा आवेदन विफल हो जाता है। तो यह भी सही नहीं है।

मैं कैसे निर्धारित कर सकता हूं कि मेरे पास एकता के भीतर से इंटरनेट कनेक्टिविटी है या नहीं?

+4

क्यों 'Network.TestConnection()' विफल आपके आवेदन का कारण होता है? ऐसा लगता है कि थोड़ा त्रुटि प्रबंधन आसानी से पकड़ लेगा। –

+1

कृपया पिंगिंग दृष्टिकोण के साथ उल्लिखित "गलतियों" से लिंक करें? – SimpleVar

+0

@RonBeyer, अगर मैं नेटवर्क का उपयोग करता हूं।TestConnection(), और कोई इंटरनेट कनेक्शन नहीं है, मेरा एप्लिकेशन निम्नलिखित अपवाद के साथ विफल रहता है: 'कनेक्शन परीक्षक पता हल नहीं कर सकता है, आपको इसे करने से पहले इंटरनेट से कनेक्ट होना चाहिए या पते को आपके लिए सुलभ कुछ सेट करना होगा।' मैंने http://docs.unity3d.com/ScriptReference/Network.TestConnection.html –

उत्तर

4

मुझे वास्तव में विश्वास नहीं है कि Network.TestConnection() इस नौकरी के लिए सही उपकरण है। the documentation के अनुसार, ऐसा लगता है कि यह एनएटी काम कर रहा है और आपका ग्राहक सार्वजनिक रूप से आईपी द्वारा पहुंचने योग्य है, लेकिन आप जो जांचना चाहते हैं वह यह है कि क्या आपके पास सामान्य इंटरनेट कनेक्टिविटी है या नहीं।

उपयोगकर्ता pixel_fiend द्वारा solution that I found on Unity Answers है, जो उपयोगकर्ता को कनेक्टिविटी देखने के लिए बस एक वेबसाइट का परीक्षण करता है।

IEnumerator checkInternetConnection(Action<bool> action){ 
    WWW www = new WWW("http://google.com"); 
    yield return www; 
    if (www.error != null) { 
     action (false); 
    } else { 
     action (true); 
    } 
} 
void Start(){ 
    StartCoroutine(checkInternetConnection((isConnected)=>{ 
     // handle connection status here 
    })); 
} 

आप वेबसाइट जो कुछ भी करने के लिए आप चाहते हैं बदल सकते हैं, या यहां तक ​​कि संशोधित: इस कोड का एक लाभ यह है कि यह अतुल्यकालिक ऑपरेशन के लिए IEnumerator का उपयोग करता है, तो कनेक्टिविटी परीक्षण आपके आवेदन के बाकी धारण नहीं करेगा सफलता प्राप्त करने के लिए कोड अगर कई साइटों में से कोई भी पहुंच योग्य है। AFAIK इंटरनेट पर किसी विशिष्ट साइट से कनेक्ट करने की कोशिश किए बिना वास्तविक इंटरनेट कनेक्टिविटी की जांच करने का कोई तरीका नहीं है, इसलिए कनेक्टिविटी को निर्धारित करने के लिए इस तरह की एक या अधिक वेबसाइटों को "पिंग" करना आपकी सबसे अच्छी शर्त है।

+0

एक्शन कार्रवाई कैसे कॉल करें? क्या उपयोग कर रहे हैं? –

+0

@HahaTTpro 'StartCoroutine का उपयोग करके (चेकइंटरनेट कनेक्शन ((कनेक्ट किया गया है) => {/ * यहां कनेक्शन की स्थिति संभाल लें * /}); ' –

+0

उत्तर @Maximillian के लिए धन्यवाद। हालांकि, यह मैं नहीं चाहता। मेरा मतलब है "एक्शन का नामस्थान क्या है"। यह सिस्टम है। एक्शन । –

1

"गारंटीकृत" इंटरनेट कनेक्टिविटी के लिए परीक्षण करने का सही तरीका ज्ञात सामग्री वाले किसी स्थान पर http (ओं) अनुरोध का उपयोग करके कैप्टिव पोर्टल पहचान करना है। ऑपरेटिंग सिस्टम स्वयं परीक्षण करते हैं कि अगर उन्हें उपयोगकर्ता को वाईफाई लॉगिन स्क्रीन पेश करनी चाहिए।

सरल अनुरोध या www अनुरोध की त्रुटि/सफलता की स्थिति की जांच पर्याप्त नहीं है, उदाहरण के लिए होटल/हवाई अड्डे वाईफाई लॉगिन पेज को कोई त्रुटि कोड (आपके इच्छित पृष्ठ के बजाय) के साथ वापस किया जा सकता है।

इसके अतिरिक्त उदा। आईओएस पर नई अतिरिक्त सीमाएं हैं (ऐप ट्रांसपोर्ट सुरक्षा केवल स्पष्ट रूप से श्वेतसूची के दौरान http को अनुमति देती है)।

मेरे संपत्ति एक आसान समाधान है, हालांकि मुक्त नहीं है: संपत्ति स्टोर में Internet Reachability Verifier

0

आप इसे आज़मा सकते:

if(Application.internetReachability == NetworkReachability.NotReachable) 
    { 
     // There is no internet connection 
     Debug.Log("Error. Check internet connection!"); 
    } 
    else {// there is internet connection , do stuff here}