26

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

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

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

4

5 に答える 5

35

あなたが試すことができる別のトリックは、携帯通信会社のMCCをチェックすることです:

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

CTTelephonyNetworkInfo *netInfo = [[CTTelephonyNetworkInfo alloc] init];
CTCarrier *carrier = [netInfo subscriberCellularProvider];
NSString *mcc = [carrier mobileCountryCode];
于 2010-06-15T11:30:28.700 に答える
23
NSLocale *locale = [NSLocale currentLocale];
NSString *countryCode = [locale objectForKey: NSLocaleCountryCode];

NSString *countryName = [locale displayNameForKey: NSLocaleCountryCode
                         value: countryCode];
于 2010-06-21T09:54:43.230 に答える
4

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

于 2010-06-21T07:17:57.843 に答える
2

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

于 2010-06-16T02:44:03.963 に答える
1

iPhone SDK が提供する Google サービスを使いたくない場合は、米国の A 国境の座標を保存して、その中にいるかどうかを確認するだけでよいでしょうか。

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

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

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

于 2010-06-15T09:41:04.003 に答える