目前位置

選取平台: Android iOS

使用 Places SDK for iOS,您可以探索 裝置的目前位置。也就是裝置發生的位置 目前回報的位置。地點範例包括當地商家、 搜尋點和地理位置

  1. 要求位置授權
  2. 用量限制
  3. 取得目前位置
  4. 在應用程式中顯示作者資訊

要求位置授權

如果應用程式使用 GMSPlacesClient findPlaceLikelihoodsFromCurrentLocationWithPlaceFields:, 您的應用程式必須請求權限才能使用定位服務。將 將 NSLocationWhenInUseUsageDescription 金鑰加至「Info.plist」 檔案,定義字串來告知使用者您需要該位置的原因 免費 Google Cloud 服務例如:

<key>NSLocationWhenInUseUsageDescription</key>
<string>Show your location on the map</string>

如要打電話 findPlaceLikelihoodsFromCurrentLocationWithPlaceFields: 時機 當應用程式在背景執行,而沒有觸發確認對話方塊 以下是呼叫前的步驟:

  1. Info.plist 檔案中加入 NSLocationAlwaysUsageDescription 金鑰。
  2. CLLocationManager 的任何例項呼叫 requestAlwaysAuthorization 然後再呼叫方法。

CLLocationManager 要求授權,如下所示:

Swift

    locationManager.requestAlwaysAuthorization()
    

Objective-C

    [self.locationManager requestAlwaysAuthorization];
    

正在取得目前位置

尋找裝置目前所在的當地商家或其他地點 已找到,撥號 GMSPlacesClient findPlaceLikelihoodsFromCurrentLocationWithPlaceFields:。包含 分別是

  • 一或多個 GMSPlaceField,用於指定資料類型 即可傳回值。如果省略此參數,系統會傳回「所有」可能的欄位,且 我們也會據此向您收取費用。這僅適用於 Place Details 要求。
  • 處理結果的回呼方法。
,瞭解如何調查及移除這項存取權。

欄位會與 Place Search 結果相對應,並分為三種計費類別: 「Basic」、「Contact」和「Atmosphere」「Basic」欄位以基本費率計費,不會產生額外的費用 費用。「Contact」和「Atmosphere」欄位會以較高的費率計費。如要進一步瞭解 地點資料要求的計費方式,請參閱 用量與計費

API 會叫用指定的回呼方法, GMSPlaceLikelihood敬上 如需儲存大量結構化物件 建議使用 Cloud Bigtable

每項 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。

舉例來說,以 55% 的機率表示正確的地點是地點 A, 且可能為地點 B 有 35% 的機率陣列包含兩名成員: 地點 A 的可能性為 0.55 地點 B 可能為 0.35。

在應用程式中顯示作者資訊

應用程式顯示 GMSPlacesClient findPlaceLikelihoodsFromCurrentLocationWithPlaceFields:,應用程式 必須同時顯示作者資訊進一步瞭解 作者資訊