2010-06-15 40 views
25

Tôi cần xác định khi khởi động người dùng ở quốc gia nào, đối với ứng dụng iPhone. Có lẽ tôi sẽ phải bật dịch vụ định vị và thực hiện một số loại mã hóa địa lý đảo ngược. Tôi thực sự không muốn sử dụng dịch vụ web của bên thứ ba nếu có thể, có đề xuất nào khác để xác định quốc gia từ dịch vụ vị trí nào cung cấp không?Xác định quốc gia của người dùng iPhone

Ban đầu, tôi chỉ cần kiểm tra xem người dùng có ở trong Hoa Kỳ hay không, nhưng điều này có thể thay đổi trong tương lai để thêm nhiều quốc gia hơn. Tôi hiểu rằng vị trí không phải lúc nào cũng được xác định hoặc người dùng có thể tắt dịch vụ vị trí. Về cơ bản, tôi chỉ cần biết nếu người dùng được phát hiện là bên trong Hoa Kỳ, để tắt một tính năng cụ thể.

EDIT: Khi đọc thêm, có vẻ như MKReverseGeocoder sẽ là cách để đi, ngoại trừ tôi không muốn hiển thị bất kỳ bản đồ nào trong ứng dụng của mình, có nghĩa là tôi không được phép sử dụng.

Trả lời

4

Với những hạn chế của MKReverseGeocoder, có vẻ như cách khả thi duy nhất để tôi đạt được những gì tôi đang sử dụng là sử dụng dịch vụ của bên thứ ba để thực hiện mã địa lý ngược. Tôi đã chọn để đi với GeoNames vì chúng dường như là sự lựa chọn tiêu chuẩn.

1

Nếu bạn không muốn sử dụng các dịch vụ của Google được cung cấp bởi SDK iPhone, bạn có thể lưu trữ tọa độ của biên giới Hoa Kỳ và kiểm tra xem bạn có ở trong đó không?

Dưới đây là một câu hỏi có liên quan trong trường hợp đó How can I determine whether a 2D Point is within a Polygon?

Nếu mục đích của giới hạn là một cái gì đó khác hơn là kinh nghiệm người dùng (ví dụ, để thực thi complicance với một số luật cụ thể Mỹ), tức là khi người dùng có thể không được sử dụng, tôi sẽ nói rằng bạn cần một số kiểm tra nghiêm ngặt hơn (sau khi tất cả, người dùng sẽ đơn giản không cho phép sử dụng các dịch vụ vị trí nếu không, sẽ không anh ta/cô ấy?).

Một cách tiếp cận như vậy là thực hiện tra cứu IP, ví dụ: http://www.maxmind.com/app/geoip_country

+0

Mục đích là hạn chế chức năng nếu người dùng được tìm thấy ở trong Hoa Kỳ. Nếu người dùng đã tắt dịch vụ vị trí hoặc chúng được tìm thấy ở bên ngoài Hoa Kỳ, chức năng không bị hạn chế. Tôi biết thật dễ dàng để có được xung quanh, nhưng đây là những yêu cầu tôi có - đó là một ưu tiên hơn mà chức năng bị hạn chế chứ không phải là một yêu cầu 100% mỗi lần. –

+0

Tôi chắc chắn sẽ rất vui khi sử dụng các dịch vụ của Google được cung cấp bởi SDK iPhone. Có cái gì đó sẽ cho tôi những gì tôi sau? –

33

Một lừa bạn có thể thử là kiểm tra của MCC hãng:

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

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

Sẽ không hoạt động với iPod Touch, thiếu điện thoại – JOM

+3

Tất nhiên, đó chỉ là một nguồn thông tin bổ sung. – zoul

+6

Tài liệu của Apple cho biết 'CTTelephonyNetworkInfo' chỉ cung cấp thông tin về nhà cung cấp dịch vụ đã cung cấp thẻ SIM. Vì vậy, đoạn mã này cho kết quả tương tự cho dù bạn đang chuyển vùng hay không? – phoenies

2

Đối tượng NSLocale, chẳng hạn như trả về bởi [NSLocale systemLocale], and [NSLocale autoupdatingCurrentLocale] `) chứa NSLocaleCountryCode giá trị. Kiểm tra nó trong tài liệu của Apple.

+0

Chắc chắn người dùng chỉ có thể thay đổi ngôn ngữ của họ? –

+0

Ngôn ngữ chỉ là cấu hình.Nó không liên quan gì đến vị trí thực tế. –

+0

Đây là một thiết lập người dùng, có, nhưng trong nhiều trường hợp đó là những gì các lập trình viên mong muốn. Ví dụ: người dùng muốn định dạng ngày tháng, thời gian và tiền tệ của mình để duy trì vị trí ưa thích của mình bất kể quốc gia của cô ấy là gì. Nó phụ thuộc vào trường hợp sử dụng. –

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

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

Người dùng có thể tự thay đổi miền địa phương, khiến điều này không đáng tin cậy không? Ngoài ra, là ngôn ngữ giống hoặc khác với cài đặt 'ngôn ngữ' của điện thoại? –

+1

Điều này có thể được thay đổi bởi người dùng trong Cài đặt> Chung> Quốc tế> Định dạng khu vực. Có định dạng vùng và cài đặt ngôn ngữ. – MonsieurDart

+0

Không phải tất cả người dùng đều sử dụng ngôn ngữ cư trú thực. Nên được sử dụng với việc chăm sóc đó. – AlexeyVMP

Các vấn đề liên quan