2010-06-15 11 views
25

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

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

संपादित करें: आगे पढ़ने पर, ऐसा लगता है कि एमकेआरवीर्स जीकोकोडर जाने का रास्ता होगा, सिवाय इसके कि मैं अपने ऐप में किसी भी मानचित्र को प्रदर्शित नहीं करना चाहता, जिसका मतलब है कि मुझे इसका उपयोग करने की अनुमति नहीं है।

उत्तर

4

एमकेआरवीर्स जीकोकोडर के प्रतिबंधों को देखते हुए, यह मेरे लिए एकमात्र व्यवहार्य तरीका है जो मुझे बाद में प्राप्त करने के लिए एक रिवर्स जियोकोड करने के लिए किसी तृतीय पक्ष सेवा का उपयोग करना है। मैंने GeoNames के साथ जाने का विकल्प चुना है क्योंकि वे मानक विकल्प प्रतीत होते हैं।

1

यदि आप आईफोन एसडीके द्वारा प्रदान की गई Google सेवाओं का उपयोग नहीं करना चाहते हैं, तो क्या आप केवल एक सीमा के यूएस के निर्देशांक स्टोर नहीं कर सकते हैं और जांच सकते हैं कि आप उसके अंदर हैं या नहीं?

यहाँ उस मामले How can I determine whether a 2D Point is within a Polygon?

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

ऐसा एक दृष्टिकोण आईपी लुकअप करना होगा, उदा। http://www.maxmind.com/app/geoip_country

+0

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

+0

मुझे निश्चित रूप से आईफोन एसडीके द्वारा प्रदान की गई Google सेवाओं का उपयोग करने में खुशी होगी। क्या ऐसा कुछ है जो मुझे दे देगा जो मैं कर रहा हूं? –

33

एक और चाल तुम कोशिश कर सकते जाँच कर रहा है वाहक के MCC:

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

CTTelephonyNetworkInfo *netInfo = [[CTTelephonyNetworkInfo alloc] init]; 
CTCarrier *carrier = [netInfo subscriberCellularProvider]; 
NSString *mcc = [carrier mobileCountryCode]; 
+1

आईपॉड टच के साथ काम नहीं करेगा, लापता टेलीफ़ोनी – JOM

+3

बेशक, यह जानकारी का एक अतिरिक्त स्रोत है। – zoul

+6

ऐप्पल के प्रलेखन का कहना है कि 'सीटीटेलेफोनीनेटवर्कइन्फो' केवल उस वाहक के बारे में जानकारी देता है जिसने सिम कार्ड की पेशकश की है। तो कोड का यह टुकड़ा एक ही परिणाम देता है चाहे आप रोमिंग कर रहे हों या नहीं? – phoenies

2

NSLocale वस्तु, जैसे [NSLocale systemLocale], and [NSLocale autoupdatingCurrentLocale] द्वारा लौटाए `) मूल्य NSLocaleCountryCode शामिल हैं। ऐप्पल दस्तावेज में इसे देखें।

+0

निश्चित रूप से उपयोगकर्ता बस अपना लोकेल बदल सकता है? –

+0

लोकेल बस विन्यास है।इसका वास्तविक स्थान से कोई लेना देना नहीं है। –

+0

यह एक उपयोगकर्ता सेटिंग है, हां, लेकिन कई मामलों में प्रोग्रामर की इच्छा है। उदाहरण के लिए, कोई उपयोगकर्ता अपनी पसंदीदा लोकेल के लिए सेट रहने के लिए उसकी तिथि, समय और मुद्रा स्वरूपण चाहता है चाहे वह भौतिक रूप से किस देश में है। यह उपयोग के मामले पर निर्भर करता है। –

23
NSLocale *locale = [NSLocale currentLocale]; 
NSString *countryCode = [locale objectForKey: NSLocaleCountryCode]; 

NSString *countryName = [locale displayNameForKey: NSLocaleCountryCode 
         value: countryCode]; 
+0

क्या उपयोगकर्ता इसे अविश्वसनीय बनाकर लोकेल बदल सकते हैं? साथ ही, लोकेल फोन की 'भाषा' सेटिंग के समान या अलग है? –

+1

इसे सेटिंग> सामान्य> अंतर्राष्ट्रीय> क्षेत्र प्रारूप में उपयोगकर्ता द्वारा बदला जा सकता है। एक क्षेत्र प्रारूप और एक भाषा सेटिंग है। – MonsieurDart

+0

सभी उपयोगकर्ता असली निवास लोकेल का उपयोग नहीं करते हैं। इसकी देखभाल के साथ इस्तेमाल किया जाना चाहिए। – AlexeyVMP

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