您可以使用 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
要求授權:
locationManager.requestAlwaysAuthorization()
[self.locationManager requestAlwaysAuthorization];
取得目前位置
如要找出裝置目前所在地的當地商家或其他地點,請撥打 GMSPlacesClient
findPlaceLikelihoodsFromCurrentLocationWithPlaceFields:
。請加入下列參數:
- 一或多個
GMSPlaceField
,用於指定要傳回的資料類型。如果省略這個參數,系統會傳回「所有」可能的欄位,並據此向您收費。這項規定僅適用於 Place Details 要求。 - 用來處理結果的回呼方法。
欄位會與 Place Search 結果相對應,並分為三種計費類別:「Basic」、「Contact」和「Atmosphere」。「Basic」欄位以基本費率計費,不會產生額外費用。「Contact」和「Atmosphere」欄位會以較高的費率計費。如要進一步瞭解地點資料要求的計費方式,請參閱「用量與計費」一文。
API 會叫用指定的回呼方法,傳回 GMSPlaceLikelihood
物件的陣列。
每個 GMSPlaceLikelihood
物件都代表一個地點。每個地點的結果都會顯示該地點是否為正確地點的可能性。值越高,代表該地點與搜尋字詞相符的可能性越高。如果沒有與裝置位置相對應的已知地點,緩衝區可能會是空白。
下列程式碼範例會擷取裝置最有可能所在的地點清單,並記錄每個地點的名稱和可能性。
// 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:
取得的資訊,則也須顯示出處資訊。進一步瞭解歸因。