使用 Places SDK for iOS,即可探索裝置目前的所在位置。也就是裝置目前回報的地點。例如當地商家、搜尋點和地理位置
要求位置授權
如果您的應用程式使用 GMSPlacesClient findPlaceLikelihoodsFromCurrentLocationWithPlaceFields:
,您的應用程式必須要求使用定位服務的權限。在 Info.plist
檔案中加入 NSLocationWhenInUseUsageDescription
鍵,以便定義字串,告知使用者需要定位服務的原因。例如:
<key>NSLocationWhenInUseUsageDescription</key> <string>Show your location on the map</string>
如要在應用程式於背景執行時呼叫 findPlaceLikelihoodsFromCurrentLocationWithPlaceFields:
,而不觸發確認對話方塊,請在呼叫前按照下列步驟操作:
- 將
NSLocationAlwaysUsageDescription
鍵新增至Info.plist
檔案。 - 呼叫
CLLocationManager
之前,請先對CLLocationManager
的任何執行個體呼叫requestAlwaysAuthorization
。
向 CLLocationManager
要求授權,如下所示:
Swift
locationManager.requestAlwaysAuthorization()
Objective-C
[self.locationManager requestAlwaysAuthorization];
取得目前位置
如要尋找當地商家或目前裝置所在的其他地點,請呼叫 GMSPlacesClient
findPlaceLikelihoodsFromCurrentLocationWithPlaceFields:
。請加入以下參數:
- 一或多個
GMSPlaceField
,指定要傳回的資料類型。如果省略這個參數,系統會傳回「所有」可能的欄位,並向您收取相關費用。這僅適用於 Place Details 要求。 - 處理結果的回呼方法。
欄位會對應至 Place Search 結果,分為三種計費類別:「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); } } }];
可能值的注意事項:
- 針對單一要求,傳回地點在傳回地點清單中的可能性,最可能性。你無法比較不同要求的可能性。
- 可能性的值必須介於 0 到 1.0 之間。
GMSPlaceLikelihood
物件所傳回陣列中的機率總和小於或等於 1.0。請注意,總和不一定為 1.0。
舉例來說,為了正確表示正確地點為地點 A 的 55% 及地點 B 的機率為 35%,可能性陣列有兩個成員:地點 A 的可能性為 0.55,地點 B 的可能性為 0.35。
在應用程式中顯示歸因
當應用程式顯示從 GMSPlacesClient
findPlaceLikelihoodsFromCurrentLocationWithPlaceFields:
取得的資訊時,應用程式也必須顯示出處。進一步瞭解歸因。