2012-08-30 5 views
7

क्या यह पता लगाने के लिए कोई तरीका है कि उपयोगकर्ता अमेरिका में अपने स्थान के बिना पूछे बिना है या नहीं? उदाहरण के लिए, जब मैं अपने कंप्यूटर पर फ़ंडैंगो में जाता हूं तो यह जानता है कि मैं कौन सी काउंटी और राज्य हूं जो मैं अपने वाईफाई पर आधारित हूं।आईओएस - संयुक्त राज्य अमेरिका में एक उपयोगकर्ता है?

मैं एक डिवाइस है, तो शायद एक आइपॉड टच, जीपीएस है कि नहीं है, और मैं इसे संयुक्त राज्य अमेरिका में है सत्यापित करने के लिए करना चाहता था, और वे वाईफाई से जुड़े हैं ... या एक अगर मैं था आईफोन और यह 3 जी से जुड़ा हुआ था और मैं यह सुनिश्चित करना चाहता था कि उपयोगकर्ता अमेरिका में हों, क्या कोई तरीका है कि मैं उस जानकारी को छोटे अलर्ट व्यू के बिना देख सकता हूं "__ आपके वर्तमान स्थान का उपयोग करना चाहेंगे"? मुझे सटीक निर्देशांक की आवश्यकता नहीं है, मुझे बस यह पुष्टि करने की आवश्यकता है कि ये उपयोगकर्ता संयुक्त राज्य अमेरिका (हवाई और अलास्का समेत) हैं ... लोकेल?

+0

अभी मैं लोकेल के साथ "en_US" का पता लगा सकता हूं ...क्या यह हमेशा संयुक्त राज्य अमेरिका में होगा? –

+2

लोकेल उपयोगकर्ता कॉन्फ़िगर करने योग्य है। उदाहरण के लिए, संयुक्त राज्य अमेरिका में रहने वाले किसी व्यक्ति जो चीनी बोलता है, उसके पास फोन की भाषा और लोकेल चीन हो सकता है। आपको यह निर्धारित करने के लिए उपयोगकर्ता के लोकेल का उपयोग नहीं करना चाहिए कि वे कहां स्थित हैं; इसका उपयोग यह निर्धारित करने के लिए किया जाना चाहिए कि उनकी सामग्री को कैसे स्थानांतरित किया जाए। –

उत्तर

5

मैं पहले वाहक के Mobile Country Code की जांच करने का प्रयास करता हूं। यह आपको उपयोगकर्ता के सेलुलर सेवा प्रदाता के लिए संख्यात्मक मोबाइल देश कोड बताएगा और उपयोगकर्ता द्वारा तब तक नहीं बदला जा सकता जब तक वे किसी दूसरे देश में सेवा प्रदाता पर स्विच न करें।

#import <CoreTelephony/CTTelephonyNetworkInfo.h> 
#import <CoreTelephony/CTCarrier.h> 

CTTelephonyNetworkInfo *netInfo = [[CTTelephonyNetworkInfo alloc] init]; 
CTCarrier *carrier = [netInfo subscriberCellularProvider]; 
NSString *mcc = [carrier mobileCountryCode]; 
पाठ्यक्रम उपकरणों है कि एक मोबाइल सेवा प्रदाता (आइपॉड टच, कुछ iPads, ect) से जुड़े नहीं हैं साथ काम नहीं करेंगे की

यह। इसके लिए, गिरावट के रूप में, मैं अपना खुद का IP geolocation एपीआई का उपयोग या निर्माण करूंगा। आप free database प्राप्त कर सकते हैं जो कि देश स्तर पर 99.5% सटीक है। यह उस डिवाइस के देश का पता लगाने के लिए बहुत अच्छा काम करेगा जिसमें मोबाइल प्रदाता नहीं है।

+0

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

+1

एमसीसी के बारे में एक सवाल: जब देश से बाहर रोमिंग, एमसीसी है जो आधार वाहक, या रोमिंग वाहक के एमसीसी प्रदान की जाती है? –

+4

@ सेबॉट लेमन [सेब के दस्तावेज] से (http://developer.apple.com/library/ios/DOCUMENTATION/NetworkingInternet/Reference/CTCarrier/Reference/Reference.html#//apple_ref/doc/uid/TP40009596-CH1-SW1) - "यदि उपयोगकर्ता रोमिंग कर रहा है तो मान बदलता नहीं है; यह हमेशा उस प्रदाता का प्रतिनिधित्व करता है जिसके साथ उपयोगकर्ता का खाता होता है।" –

3

नेटवर्क किए गए वातावरण में उपयोगकर्ता के location is usually "identified" आईपी पते के माध्यम से।

अंदर/बाहर अमेरिकी निर्धारण का उद्देश्य क्या है? यह कितना सटीक/असफल सुरक्षित है? परिणाम क्या हैं, जब उपयोगकर्ता को गलत तरीके से अमेरिका के अंदर होने के रूप में पहचाना जाता है? परिणाम क्या हैं, जब आप झूठी नकारात्मक उत्पन्न करते हैं? क्या आप झूठे सकारात्मक होने पर अनुबंध या लाइसेंस का उल्लंघन कर रहे हैं? या यहां तक ​​कि एक अपराध भी कर रहे हैं? या आप सिर्फ विदेशियों से नापसंद करते हैं और यह आपकी (या आपके नियोक्ता की) गरिमा है जो घायल हो गई है?

असली सवाल यह है कि: आईपी पते को स्थानीयकरण करके आपको कितनी जानकारी मिलती है और यह आपके उद्देश्य के लिए पर्याप्त विश्वसनीयता है?

जैसा कि आपके पास किसी दिए गए आईपी पते के लिए देश कोड प्राप्त करने का कोई तरीका है, आपको बस इसकी अनुमति कोड के दिए गए सेट पर तुलना करना होगा और आप कर चुके हैं। यदि, है, तो कहा गया कोड के स्रोत की गुणवत्ता आपकी आवश्यकताओं को पूरा करती है।

+0

इसे बहुत सटीक होना चाहिए और मैं इसके उद्देश्य के लिए एनडीए के तहत हूं। अगर मेरे पास वाईफाई के माध्यम से आईपी पता है तो मैं उपयोगकर्ताओं को शहर और देश का पता लगा सकता हूं, अगर मेरे पास अभी 3 जी के माध्यम से आईपी पता है तो मुझे अभी भी उपयोगकर्ता देश की जांच करने में सक्षम होना चाहिए? मैंने शोध करने की कोशिश की और स्पष्ट रूप से आईपी पते के देश की जांच करने के तरीके हैं, लेकिन उनमें आईपी पता ढूंढना, इसे किसी पते से आईपी नंबर में परिवर्तित करना, फिर एक आखिरी चीज की जांच करना जो मुझे नहीं मिल रहा है .. –

+0

ठीक है, मैं एक सेवा (api.ipinfodb.com) ढूंढने में सक्षम था जो आईपी जानकारी का JSON उत्पन्न करता है .. इसलिए यदि मेरा JSON एक स्ट्रिंग देता है जिसमें यह सब सामान है: { \t "statusCode": "ठीक है ", \t" statusMessage ":" ", \t" IPADDRESS ":" ************ ", \t" देश कोड ":" अमेरिका ", \t" देश का नाम ":" संयुक्त स्टेटस " } और मैं सिर्फ यह देखना चाहता हूं कि देश कोड यूएस, यूएम या छठी कहता है कि मैं यह कैसे कर सकता हूं? –

+0

मेरी देर से प्रतिक्रिया के लिए खेद है, सप्ताहांत ने मुझे बहुत जल्दी मारा। तो आपके पास दिए गए आईपी पते के लिए देश कोड (मुझे दो अक्षर आईएसओ 3166-1 अल्फा -2 कोड के रूप में माना जाता है) है। आपको इसे अनुमत कोड के दिए गए सेट पर तुलना करना होगा और यदि आप अपनी आवश्यकताओं को सही ढंग से समझते हैं, तो आप कर चुके हैं ?! –

0

यदि आपको उपयोगकर्ता के स्थान के बारे में पूछने की अनुमति नहीं है, तो आईपी आधारित रिवर्स जिओलोकेशन सेवा का उपयोग करने का एकमात्र तरीका है। मैंने कभी भी सार्वजनिक सेवाओं का उपयोग नहीं किया है, इसलिए दुर्भाग्य से, उनमें से किसी की गुणवत्ता पर मैं टिप्पणी नहीं कर सकता। यह संयुक्त राज्य अमेरिका के क्षेत्रों के रूप में गलत हो सकता है (मैंने 3 जी कनेक्शन से आईपी देखा है)। यह शायद आरामदायक उपयोगकर्ता को हरा देगा।

बेशक, परिष्कृत 'हमलावर' आसानी से प्रॉक्सी के साथ मिलेंगे। ways of detecting if requests come from proxies प्रतीत होता है लेकिन ये 100% या तो प्रतीत नहीं होते हैं।

यदि उपयोगकर्ता का स्थान उपयोग करना एक विकल्प बन जाता है, तो आप या तो CLGeocoder का उपयोग कर सकते हैं, या एक वेब सेवा का उपयोग कर सकते हैं जो कोर स्थान के माध्यम से एकत्र अक्षांश और देशांतर मानों से रिवर्स जियोकोडिंग करता है। सुरक्षा के एक और स्तर के लिए, अक्षांश और देशांतर मूल्यों पर हस्ताक्षर करें ताकि उनकी ईमानदारी सुनिश्चित हो सके। मुझे लगता है कि यदि संभवतः आपको अंतरराष्ट्रीय उपयोगकर्ताओं से भाग लेने की सर्वोत्तम संभव सुरक्षा की आवश्यकता है तो शायद यह सबसे अच्छा विकल्प है।

उम्मीद है कि यह आपको सही रास्ते पर रखने में मदद करता है। वहां बहुत सारे विकल्प हैं इसलिए मुझे आपकी ज़रूरतों के आधार पर विश्वास है कि आप एक अच्छा समाधान ढूंढ पाएंगे।

1

सबसे आसान समाधान मौजूदा वेब सेवा जैसे hostip.info से पूछताछ करना है।

कृपया ध्यान दें कि यह केवल एक नमूना है (यदि आप वेब सेवा को अलग ढंग से क्वेरी चाहिए), लेकिन सादगी की खातिर:

NSError* error = nil; 
NSString* country = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://api.hostip.info/country.php"] encoding:NSUTF8StringEncoding error:&error]; 
//will show US if user is in the United States 
NSLog(@"%@", country); 

तुम भी एक (मुक्त) डेटाबेस खुद http://www.maxmind.com/app/installation से प्राप्त होता है और या तो एक वेब सेवा बना सकते हैं या अपने आवेदन में शामिल

0

यदि आप अपने वर्तमान शहर के बारे में जानकारी तक पहुँचना चाहते हैं (अनुशंसित नहीं।) - अपने वर्तमान स्थान की जानकारी (अक्षांश, देशांतर) के साथ देश आदि का उपयोग कर सकते this

आशा आपके लिए काम करता है। सौभाग्य।

संपादित करें:

ओह माफ करना, मैं did not जीपीएस के बारे में जानकारी देखें।

0

आपको आसानी से वेब पर डेटाबेस मिलेगा जो आपको अपने आईपी के आधार पर उपयोगकर्ता देश के बारे में बताएगा और फिर एक वेब-सेवा करेगा जो उपयोगकर्ता आईपी का पता लगाएगा और अमेरिका के लिए ध्वज वापस करेगा।

1

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

0

आपने कहा कि आप उपयोगकर्ता को स्थान के लिए नहीं पूछ सकते हैं। क्या आप स्थान सेवाओं के लिए कोरलोकेशन का उपयोग करने में सक्षम हैं? यदि आप हैं, तो आप बस स्थान सेवाओं का उपयोग करके, बिना पूछे अपने स्थान प्राप्त करने में सक्षम होने जा रहे हैं। जीपीएस की आवश्यकता नहीं है, जब तक वाईफाई सक्षम है। this thread में किए गए इस बारे में कई अच्छे मुद्दे हैं।

एक बार जब आप स्थान प्राप्त कर लेते हैं, तो आप यह निर्धारित करने के लिए एक जियोकोडर का उपयोग कर सकते हैं कि यह यूएस में स्थित है या नहीं।

यदि आपको अधिक जानकारी चाहिए, तो बस पूछें, लेकिन यह विधि वास्तव में बहुत सरल है।

6

ठीक है, आप आईपी के साथ ऐसा कैसे करते हैं।

http://www.geoplugin.net/json.gp 

Astunishing:

तो, geoplugin.net यह आश्चर्यजनक JSON एपीआई है, यह चूक वर्तमान के टूटने के लिए आईपी, तो क्या आप क्या करना है यह पता करने के लिए एक अनुरोध करना है! यह मेरे लिए देता है,, इस डेटा:

geoPlugin({ 
    "geoplugin_request":"201.6.226.233", 
    "geoplugin_status":200, 
    "geoplugin_city":null, 
    "geoplugin_region":"S&atilde;o Paulo", 
    "geoplugin_areaCode":0, 
    "geoplugin_dmaCode":0, 
    "geoplugin_countryCode":"BR", 
    "geoplugin_countryName":"Brazil", 
    "geoplugin_continentCode":"SA", 
    "geoplugin_latitude":-23.473301, 
    "geoplugin_longitude":-46.665798, 
    "geoplugin_regionCode":27, 
    "geoplugin_regionName":"S&atilde;o Paulo", 
    "geoplugin_currencyCode":"BRL", 
    "geoplugin_currencySymbol":"&#82;&#36;", 
    "geoplugin_currencyConverter":2.0198 
}) 

खैर, अब आप क्या करने के लिए सिर्फ पार्स है इस "JSON" है क्या। यह वास्तव में एक JSON नहीं है क्योंकि इसमें geoplugin({data}) रैपर है। तो आप शायद कुछ फ़िल्टरिंग निष्पादित कर सकते हैं, एनएसएसटीआरिंग के उन हिस्सों को हटा सकते हैं।

मुझे लगता है कि आप जल्दी में हैं, इसलिए मैंने आपके लिए कुछ कोड लिखने के लिए अपना खाली समय लिया। यह बहुत गैर-मानक है क्योंकि मुझे नहीं पता कि आप किसी भी आरईएसटी फ्रेमवर्क का उपयोग कर रहे हैं जो मदद करेगा, लेकिन यहां जाता है:

NSString *url = [NSString stringWithFormat:@"http://www.geoplugin.net/json.gp"]; 


    NSString *locationData = [[NSString alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:url]] 
               encoding:NSUTF8StringEncoding]]; 

    locationData = [locationData stringByReplacingOccurrencesOfString:@"geoPlugin(" withString:@""]; 
    locationData = [locationData stringByReplacingOccurrencesOfString:@")" withString:@""]; 

    //user some json parser here. 
    if([[[locationData JSONValue] valueForkey:@"geoplugin_countryCode"] isEqualToString:@"US"]){ 

     //proceed. 
    } 
संबंधित मुद्दे