Current Place

プラットフォームを選択: Android iOS

Places SDK for iOS を使用すると、デバイスの現在地を見つけることができます。これは、現時点で検出される端末の場所です。検出される場所には、企業や商店、有名スポット、地理的位置などが含まれます。

  1. 位置情報の利用許可をリクエストする
  2. 使用量の上限
  3. 現在地を取得する
  4. アプリに属性を表示する

位置情報使用許可のリクエスト

アプリが GMSPlacesClient findPlaceLikelihoodsFromCurrentLocationWithPlaceFields: を使用する場合は、位置情報サービスを使用する権限をリクエストする必要があります。NSLocationWhenInUseUsageDescription キーを Info.plist ファイルに追加して、位置情報サービスが必要な理由をユーザーに伝える文字列を定義します。例:

<key>NSLocationWhenInUseUsageDescription</key>
<string>Show your location on the map</string>

アプリがバックグラウンドで実行されているときに、確認ダイアログをトリガーせずに findPlaceLikelihoodsFromCurrentLocationWithPlaceFields: を呼び出す場合は、呼び出しを行う前に次の手順を行います。

  1. NSLocationAlwaysUsageDescription キーを Info.plist ファイルに追加します。
  2. メソッドを呼び出す前に、CLLocationManager の任意のインスタンスで requestAlwaysAuthorization を呼び出します。

次のように CLLocationManager から承認をリクエストします。

Swift

    locationManager.requestAlwaysAuthorization()
    

Objective-C

    [self.locationManager requestAlwaysAuthorization];
    

現在地を取得する

デバイスが現在設置されているローカル ビジネスやその他の場所を確認するには、GMSPlacesClient findPlaceLikelihoodsFromCurrentLocationWithPlaceFields: を呼び出します。次のパラメータを含めます。

  • 返すデータ型を指定する 1 つ以上の GMSPlaceField。このパラメータを省略すると、指定可能なフィールドがすべて返され、それに応じて課金されます。これは Place Details リクエストにのみ適用されます。
  • 結果を処理するためのコールバック メソッド。

フィールドは Place Search の結果に対応しており、Basic(基本)、Contact(連絡先)、Atmosphere(雰囲気)の 3 つの請求カテゴリに分けられます。Basic フィールドは基本レートで課金され、追加料金はかかりません。Contact フィールドと Atmosphere フィールドはより高いレートで課金されます。プレイスデータ リクエストの課金方法の詳細については、使用量と課金をご覧ください。

API は指定されたコールバック メソッドを呼び出し、GMSPlaceLikelihood オブジェクトの配列を返します。

GMSPlaceLikelihood オブジェクトは場所を表します。各プレイスで、それが正しい場所である可能性を示す指標が結果に表示されます。値が大きいほど、その場所が最もよくマッチする確率が高くなります。端末の位置と一致する既知のプレイスがない場合は、バッファが空白になることがあります。

次のコードサンプルでは、デバイスが存在する可能性が高い場所のリストを取得し、各場所の名前と可能性をログに記録しています。

Swift

// Specify the place data types to return.
let fields: GMSPlaceField = GMSPlaceField(rawValue: UInt(GMSPlaceField.name.rawValue) |
                                          UInt(GMSPlaceField.placeID.rawValue))!
placesClient?.findPlaceLikelihoodsFromCurrentLocation(withPlaceFields: fields, callback: {
  (placeLikelihoodList: Array<GMSPlaceLikelihood>?, error: Error?) in
  if let error = error {
    print("An error occurred: \(error.localizedDescription)")
    return
  }

  if let placeLikelihoodList = placeLikelihoodList {
    for likelihood in placeLikelihoodList {
      let place = likelihood.place
      print("Current Place name \(String(describing: place.name)) at likelihood \(likelihood.likelihood)")
      print("Current PlaceID \(String(describing: place.placeID))")
    }
  }
})

Objective-C

// Specify the place data types to return.
GMSPlaceField fields = (GMSPlaceFieldName | GMSPlaceFieldPlaceID);
[_placesClient findPlaceLikelihoodsFromCurrentLocationWithPlaceFields:fields callback:^(NSArray<GMSPlaceLikelihood *> * _Nullable likelihoods, NSError * _Nullable error) {
  if (error != nil) {
    NSLog(@"An error occurred %@", [error localizedDescription]);
    return;
  }
  if (likelihoods != nil) {
    for (GMSPlaceLikelihood *likelihood in likelihoods) {
      GMSPlace *place = likelihood.place;
      NSLog(@"Current place name: %@", place.name);
      NSLog(@"Place ID: %@", place.placeID);
    }
  }
}];

Likelihood 値について:

  • Likelihood では、1 つの要求に返されたプレイスの一覧の中で最も一致する場所の相対的確率を提供します。異なる要求間での Likelihood を比較することはできません。
  • Likelihood の値は、0~1.0 です。
  • 返された GMSPlaceLikelihood オブジェクト配列内の Likelihood の合計は、常に 1.0 以下になります。合計は必ずしも 1.0 になる必要はありません。

たとえば、正しい場所が場所 A である可能性が 55% で、場所 B である可能性が 35% であることを表すため、Likelihood 配列には場所 A(0.55)と場所 B(0.35)の 2 つが含まれることになります。

アプリに属性を表示する

アプリに GMSPlacesClient findPlaceLikelihoodsFromCurrentLocationWithPlaceFields: から取得した情報を表示する場合、アプリは属性も表示する必要があります。詳しくは、アトリビューションをご覧ください。