Places SDK for iOS を使用すると、デバイスの現在地を検出できます。つまり、デバイスで現在報告されている位置にある場所です。場所の例としては、地域のお店やサービス、スポット、地理的位置などがあります。
位置情報の利用許可をリクエストする
アプリで
GMSPlacesClient findPlaceLikelihoodsFromCurrentLocationWithPlaceFields: を使用する場合は、位置情報サービスを使用する権限をリクエストする必要があります。NSLocationWhenInUseUsageDescription キーを Info.plist ファイルに追加して、位置情報サービスが必要な理由をユーザーに通知する文字列を定義します。次に例を示します。
<key>NSLocationWhenInUseUsageDescription</key> <string>Show your location on the map</string>
アプリがバックグラウンドにあるときに、確認ダイアログをトリガーせずに
findPlaceLikelihoodsFromCurrentLocationWithPlaceFields: を呼び出す場合は、呼び出しを行う前に次の手順を行います。
NSLocationAlwaysUsageDescriptionキーをInfo.plistファイルに追加します。- メソッドを呼び出す前に、
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 値について:
- この尤度は、1 つのリクエストに対して返された場所のリスト内で、その場所が最も一致する可能性の相対的な確率を示します。異なるリクエスト間で可能性を比較することはできません。
- Likelihood の値は、0~1.0 です。
- 返された
GMSPlaceLikelihoodオブジェクトの配列内の尤度の合計は、常に 1.0 以下になります。合計が 1.0 になるとは限りません。
たとえば、正しい場所が場所 A である可能性が 55%、場所 B である可能性が 35% である場合、尤度配列には、尤度が 0.55 の場所 A と尤度が 0.35 の場所 B の 2 つのメンバーが含まれます。
アプリに帰属情報を表示する
GMSPlacesClient
findPlaceLikelihoodsFromCurrentLocationWithPlaceFields: から取得した情報を表示する場合、アプリは帰属情報も表示する必要があります。詳しくは、アトリビューションをご覧ください。