web-dev-qa-db-ja.com

iPhoneユーザーの国を特定する

IPhoneアプリケーションの場合、起動時にユーザーがどの国にいるかを確認する必要があります。おそらく、位置情報サービスをオンにして、ある種の逆ジオコーディングを行う必要があります。可能であれば、サードパーティのWebサービスを使用したくないのですが、どの位置情報サービスが提供するかから国を決定するための他の提案はありますか?

最初は、ユーザーが米国内にいるかどうかを確認するだけで済みますが、将来、国を追加するために変更される可能性があります。位置情報が常に特定できるとは限らないこと、またはユーザーが位置情報サービスをオフにしている可能性があることを理解しています。基本的に、特定の機能をオフにするには、ユーザーが米国内にいることが検出されたかどうかを知る必要があります。

編集:さらに読むと、アプリに地図を表示したくない場合を除いて、MKReverseGeocoderが道のりのようです。つまり、これを使用することは許可されていません。

26
Ben Williams

MKReverseGeocoderの制限を考えると、私が求めていることを達成するための唯一の実行可能な方法は、サードパーティのサービスを使用して逆ジオコードを実行することです。私は GeoNames を選択しました。これは、標準的な選択のようです。

4
Ben Williams

あなたが試すことができるもう一つのトリックは、キャリアの [〜#〜] mcc [〜#〜] をチェックすることです:

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

CTTelephonyNetworkInfo *netInfo = [[CTTelephonyNetworkInfo alloc] init];
CTCarrier *carrier = [netInfo subscriberCellularProvider];
NSString *mcc = [carrier mobileCountryCode];
34
zoul
NSLocale *locale = [NSLocale currentLocale];
NSString *countryCode = [locale objectForKey: NSLocaleCountryCode];

NSString *countryName = [locale displayNameForKey: NSLocaleCountryCode
                         value: countryCode];
23
vladzz

[NSLocale systemLocale], and [NSLocale autoupdatingCurrentLocale] `によって返されるようなNSLocaleオブジェクトには、値NSLocaleCountryCodeが含まれます。 Appleドキュメントで確認してください。

2
Drew C

IPhone SDKが提供するGoogleサービスを利用したくない場合は、米国のA国境の座標を保存して、その中にいるかどうかを確認してみませんか?

その場合の関連する質問は次のとおりです 2Dポイントがポリゴン内にあるかどうかを確認するにはどうすればよいですか?

制限の目的がユーザーエクスペリエンス以外のものである場合(たとえば、特定の米国法への準拠を強制するため)、つまりユーザーが侵入できない場合は、より厳密なチェックが必要だと思います(結局のところ、それ以外の場合、ユーザーは位置情報サービスの使用を単に禁止しますね。

そのようなアプローチの1つは、IPルックアップを実行することです。 http://www.maxmind.com/app/geoip_country

1
Krumelur