7

ユーザーの居場所を尋ねずに、ユーザーが米国にいるかどうかを検出する方法はありますか? たとえば、コンピューターで Fandango にアクセスすると、WiFi に基づいて現在の郡と州が認識されます。

GPS のないデバイス (おそらく iPod Touch) を持っていて、それが米国にあり、それらがWiFiに接続されていることを確認したかった場合 ... または iPhone を持っていて、それが接続されていた場合3Gと私は、ユーザーが米国にいることを確認したかったのですが、" __は現在の場所を使用したい" という小さなアラート ビューなしでその情報を確認する方法はありますか? 正確な座標は必要ありません。これらのユーザーが米国 (ハワイとアラスカを含む) にいることを確認する必要があるだけです...ロケール?

4

9 に答える 9

7

Ok, how do you do that with the IP.

So, geoplugin.net has it's amazing JSON api, it defaults the IP to the currently conection, so what you have to do is make a request to this address:

http://www.geoplugin.net/json.gp

Astunishing! It returns, for me, this data:

geoPlugin({
  "geoplugin_request":"201.6.226.233",
  "geoplugin_status":200,
  "geoplugin_city":null,
  "geoplugin_region":"São Paulo",
  "geoplugin_areaCode":0,
  "geoplugin_dmaCode":0,
  "geoplugin_countryCode":"BR",
  "geoplugin_countryName":"Brazil",
  "geoplugin_continentCode":"SA",
  "geoplugin_latitude":-23.473301,
  "geoplugin_longitude":-46.665798,
  "geoplugin_regionCode":27,
  "geoplugin_regionName":"São Paulo",
  "geoplugin_currencyCode":"BRL",
  "geoplugin_currencySymbol":"R$",
  "geoplugin_currencyConverter":2.0198
})

Well, now what you have to do is just parse this "JSON". It's not actually a JSON as it has this geoplugin( {data} ) wrapper. So you could lazily execute some filtering, removing those parts of a NSSTring, maybe.

I See you are in a hurry, so I took my spare time to write some code for you. It's very non-standard as I don't know if you are using any REST framework that would help, but here goes:

NSString *url = [NSString stringWithFormat:@"http://www.geoplugin.net/json.gp"];


    NSString *locationData = [[NSString alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:url]]
                                                encoding:NSUTF8StringEncoding]];

    locationData = [locationData stringByReplacingOccurrencesOfString:@"geoPlugin(" withString:@""];
    locationData = [locationData stringByReplacingOccurrencesOfString:@")" withString:@""];

    //user some json parser here.
    if([[[locationData JSONValue] valueForkey:@"geoplugin_countryCode"] isEqualToString:@"US"]){

        //proceed.
    }
于 2012-09-13T02:50:44.080 に答える
5

まず、携帯通信会社の携帯電話国番号を確認してみます。ユーザーのセルラー サービス プロバイダーの数値のモバイル国コードが表示され、別の国のサービス プロバイダーに切り替えない限り、ユーザーが変更することはできません。

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

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

もちろん、これはモバイル キャリアに接続されていないデバイス (iPod Touch、一部の iPad など) では機能しません。したがって、フォールバックとして、独自のIP ジオロケーションAPI を使用または作成します。国レベルで 99.5% 正確な無料のデータベースを入手できます。これは、モバイル プロバイダーを持たないデバイスの国を検出するのに最適です。

于 2012-09-11T22:59:18.823 に答える
3

ネットワーク化された環境では、ユーザーの場所は通常、IP アドレスによって「識別」されます。

米国内外の判断の目的は何ですか? どのくらい正確/フェイルセーフである必要がありますか? ユーザーが米国内にいると誤って識別された場合、どのような結果になりますか? 偽陰性を生成すると、どのような結果になりますか? 誤検知がある場合、契約またはライセンスに違反していますか? それとも犯罪を犯していますか?それとも、単に外国人が嫌いで、あなた (またはあなたの雇用主) の尊厳が損なわれるのでしょうか?

本当の問題は、IP アドレスをローカライズすることによって得られる情報の信頼性はどの程度か、またこの信頼性は目的に十分かどうかということです。

特定の IP アドレスの国コードを取得する方法があるため、それを特定の許可されたコードのセットと比較するだけで完了です。つまり、そのコードのソースの品質が要件を満たしている場合。

于 2012-09-06T06:36:59.460 に答える
1

geoPluginを見てみると、IP とその無料に基づいてユーザーの場所を取得するために使用できる Web サービスがいくつかあります。

于 2012-09-12T17:55:48.463 に答える
1

最も簡単な解決策は、hostip.info などの既存の Web サービスを照会することです。

これは単なるサンプルであることに注意してください (Web サービスに対して別の方法でクエリを実行する必要があります) が、簡単にするために:

NSError* error = nil;
NSString* country = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://api.hostip.info/country.php"] encoding:NSUTF8StringEncoding error:&error];
//will show US if user is in the United States
NSLog(@"%@", country);

また、 http://www.maxmind.com/app/installationから (無料の) データベースを自分で取得し、Web サービスを作成するか、アプリケーションに含める必要があります (推奨されません)。

于 2012-09-12T11:46:19.797 に答える
0

ユーザーの位置を尋ねることが許可されていない場合は、IP ベースのリバース ジオロケーション サービスを使用するしかありません。残念ながら、私は公共サービスを利用したことがないので、それらの品質についてコメントすることはできません. これは、米国内の地域に関しては不正確である可能性があります (3G 接続からの IP がかなりずれているのを見てきました)。これはおそらく、カジュアルなユーザーを打ち負かすでしょう.

もちろん、洗練された「攻撃者」は、プロキシを使用してこれを簡単に回避します。リクエストがプロキシからのものかどうかを検出する方法があるようですが、これらも 100% ではないようです。

ユーザーの場所を使用することがオプションになる場合は、 を使用するかCLGeocoder、Core Location によって収集された緯度と経度の値から逆ジオコーディングを行う Web サービスを使用できます。セキュリティのレベルをさらに高めるには、緯度と経度の値に署名して、整合性を確保します。国際ユーザーの参加から可能な限り最高の保護が本当に必要な場合は、おそらくこれが最良の選択肢だと思います.

うまくいけば、これがあなたを正しい軌道に乗せるのに役立ちます. 選択肢はたくさんありますので、お客様のニーズに応じて適切なソリューションを見つけることができると確信しています。

于 2012-09-11T23:32:13.333 に答える
0

現在の都市に関する情報に到達したい場合-国など、現在の位置情報(緯度、経度)でこれを使用できます

希望はあなたのために働きます。幸運を。

編集:

申し訳ありませんが、GPS に関する情報が表示されませんでした。

于 2012-09-12T11:56:02.800 に答える
0

IPに基づいてユーザーの国を通知するデータベースをWeb上で簡単に見つけることができ、ユーザーIPを検出して米国のフラグを返すWebサービスを作成します.

于 2012-09-12T14:02:15.280 に答える
0

ユーザーに場所を尋ねることはできないと言いました。位置情報サービスに CoreLocation を使用できますか? もしそうなら、位置情報サービスを使用するだけで、尋ねなくても彼らの位置を取得できる可能性が非常に高くなります. Wi-Fi が有効になっている限り、GPS は必要ありません。このスレッドには、これに関するいくつかの良い点があります。

場所を取得したら、ジオコーダーを使用して、その場所が米国内にあるかどうかを判断できます。

詳細が必要な場合はお尋ねください。ただし、この方法は非常に簡単です。

于 2012-09-13T00:41:29.933 に答える