当前地点

借助 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 请求授权,如下所示:

SwiftObjective-C
    locationManager.requestAlwaysAuthorization()
    
    [self.locationManager requestAlwaysAuthorization];
    

获取当前位置信息

如需查找设备当前所在的本地商家或其他地点,请调用 GMSPlacesClient findPlaceLikelihoodsFromCurrentLocationWithPlaceFields:。添加以下参数:

  • 一个或多个 GMSPlaceField,用于指定要返回的数据类型。如果您忽略此参数,系统将返回所有可能的字段,并根据情况计费。这仅适用于“地点详情”请求。
  • 用于处理结果的回调方法。

这些字段与地点搜索结果相对应,而且分为三个结算类别:基本、联系人和氛围。“基本”字段按基本费率结算,且不会产生额外费用。“联系人”和“氛围”字段按更高的费率结算。如需详细了解地点数据请求的结算方式,请参阅用量和结算

该 API 会调用指定的回调方法,返回 GMSPlaceLikelihood 对象的数组。

每个 GMSPlaceLikelihood 对象都代表一个地点。对于每个地点,结果中都会包含一个指示该地点是正确地点的概率。值越高,相应地点是最佳匹配的可能性就越大。如果没有与设备位置对应的已知地点,缓冲区可能会为空。

以下代码示例会检索设备最有可能位于的地点列表,并记录每个地点的名称和可能性。

SwiftObjective-C
// 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))")
    }
  }
})
// 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);
    }
  }
}];

关于可能性值的说明:

  • 该概率表示相应地点在单个请求的返回地点列表中是最佳匹配项的相对概率。您无法比较不同请求的可能性。
  • 可能性的值将在 0 和 1.0 之间。
  • 返回的 GMSPlaceLikelihood 对象数组中的概率总和始终小于或等于 1.0。请注意,此值的总和不一定为 1.0。

例如,若要表示正确地点是地点 A 的概率为 55%,是地点 B 的概率为 35%,则概率数组有两个成员:地点 A 的概率为 0.55,地点 B 的概率为 0.35。

在应用中显示提供方信息

当应用显示从 GMSPlacesClient findPlaceLikelihoodsFromCurrentLocationWithPlaceFields: 获取的信息时,还必须显示提供方信息。详细了解归因