2010-06-15 38 views
25

我需要在啓動時確定用戶所在的國家/地區,以用於iPhone應用程序。據推測,我將不得不打開位置服務並進行某種反向地理編碼。如果可能,我真的不想使用第三方網絡服務,還有其他建議可以從服務提供的位置來確定國家嗎?確定iPhone用戶的國家

最初,我只需要檢查用戶是否在美國境內,但這可能會在未來增加更多的國家。我瞭解,該位置不能總是確定,或者用戶可能已關閉位置服務。基本上,我只需要知道用戶是否被檢測到在美國境內,以便關閉特定功能。

編輯:在進一步閱讀,它看起來像MKReverseGeocoder將要走的路,除非我不希望在我的應用程序中顯示任何地圖,這意味着我不允許使用它。

回答

4

鑑於MKReverseGeocoder的限制,對我來說,實現我所追求的唯一可行的方式是使用第三方服務來執行反向地理編碼。我選擇使用GeoNames,因爲它們似乎是標準選擇。

1

如果你不想使用iPhone SDK提供的Google服務,難道你不能只存儲美國的A邊界座標,並檢查你是否在裏面?

這裏是在這種情況下 How can I determine whether a 2D Point is within a Polygon?

一個相關的問題。如果限制的目的是比用戶體驗等(例如,執行一些特定的美國法律complicance)的東西,即當用戶無法我想說你需要一些更嚴格的檢查(畢竟,用戶會拒絕使用位置服務,否則他/她不會)?

一種這樣的方法是進行IP查找,例如, http://www.maxmind.com/app/geoip_country

+0

目的是限制功能,如果用戶被發現在美國境內。如果用戶關閉了位置服務,或者他們被發現在美國境外,則功能不受限制。我知道這很容易解決,但這些都是我的要求 - 更偏向於功能受到限制,而不是每次都要求100%。 – 2010-06-15 11:15:16

+0

我當然很樂意使用iPhone SDK提供的Google服務。有什麼能夠給我以後的東西嗎? – 2010-06-15 11:15:42

33

你可以嘗試另一個竅門是檢查運營商的MCC

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

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

不適用於iPod Touch,缺少電話 – JOM 2010-06-15 19:09:51

+3

當然,它只是一個額外的信息來源。 – zoul 2010-06-16 04:39:06

+6

Apple的文檔說'CTTelephonyNetworkInfo'只提供有關提供SIM卡的運營商的信息。因此,無論您是否漫遊,這段代碼都會得到相同的結果? – phoenies 2011-08-05 14:25:32

2

的NSLocale對象,如[NSLocale systemLocale], and [NSLocale autoupdatingCurrentLocale]返回`)的值爲NSLocaleCountryCode。在Apple文檔中查看它。

+0

用戶當然可以改變他們的語言環境? – 2010-06-16 05:00:57

+0

區域設置只是配置。它與實際位置無關。 – 2015-01-20 11:24:32

+0

這是用戶設置,是的,但在很多情況下,這是程序員所期望的。例如,用戶想要她的日期,時間和貨幣格式留她的首選區域設置,無論她是哪個國家在物理上,這取決於使用情況。 – 2015-03-31 17:08:40

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

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

用戶是否可以自己更改語言環境,使其變得不可靠?此外,區域設置與手機的「語言」設置相同還是不同? – 2012-07-19 08:40:22

+1

這可以由用戶設置中>常規>國際>地區格式進行更改。有一個區域格式和一個語言設置。 – MonsieurDart 2013-04-10 22:55:16

+0

並不是所有用戶都使用真實的居住區域。應該謹慎使用。 – AlexeyVMP 2015-01-19 17:34:49