使用 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:
。添加以下参数:
- 一个或多个
GMSPlaceField
,指定要返回的数据类型。如果省略此参数,系统将返回所有可能的字段,并向您收取相应费用。这仅适用于地点详情请求。 - 用于处理结果的回调方法。
这些字段与地点搜索结果相对应,分为三个结算类别:基本结算、联系人结算和氛围结算。基本字段采用基本费率计费,不会产生额外费用。“联系人”和“氛围”字段以较高费率结算。如需详细了解地点数据请求的计费方式,请参阅用量和结算。
该 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); } } }];
关于可能性值的说明:
- 可能性提供的地点相对单个请求所返回地点列表中的最佳匹配项的相对概率。您无法比较不同请求的可能性。
- 可能性的值将在 0 和 1.0 之间。
- 返回的
GMSPlaceLikelihood
对象数组中的可能性之和始终小于或等于 1.0。请注意,总和不一定是 1.0。
例如,为了表示地点 A 是正确地点的可能性为 55%,地点 B 的可能性是 35%,地点可能性数组包含两个成员:地点 A 的可能性为 0.55,地点 B 的可能性为 0.35。
在应用中显示出处
当您的应用显示从 GMSPlacesClient
findPlaceLikelihoodsFromCurrentLocationWithPlaceFields:
获取的信息时,它还必须显示提供方信息。详细了解归因。