Szczegóły miejsca (nowość)

Deweloperzy z Europejskiego Obszaru Gospodarczego (EOG)

Pakiet Places SDK for iOS (New) udostępnia aplikacji szczegółowe informacje o miejscach, w tym nazwę i adres miejsca, lokalizację geograficzną określoną za pomocą współrzędnych geograficznych, typ miejsca (np. klub nocny, sklep zoologiczny, muzeum) i inne dane. Aby uzyskać dostęp do tych informacji w przypadku konkretnego miejsca, możesz użyć identyfikatora miejsca, czyli stałego identyfikatora, który jednoznacznie identyfikuje miejsce.

Pobieranie szczegółów miejsca

Klasa GMSPlace zawiera informacje o konkretnym miejscu, w tym wszystkie pola danych widoczne w sekcji Pola danych o miejscu (nowe). Pobierz obiekt GMSPlace, wywołując metodę GMSPlacesClient fetchPlaceWithRequest: i przekazując obiekt GMSFetchPlaceRequest oraz metodę wywołania zwrotnego typu GMSPlaceResultCallback.

Obiekt GMSFetchPlaceRequest określa:

  • (Wymagany) Identyfikator miejsca, czyli niepowtarzalny identyfikator miejsca w bazie danych Miejsc Google i w Mapach Google.
  • (Wymagane) Lista pól do zwrócenia w obiekcie GMSPlace, zwana też maską pola, zgodnie z definicją w GMSPlaceProperty. Jeśli nie określisz co najmniej jednego pola na liście pól lub pominiesz listę pól, wywołanie zwróci błąd.
  • (Opcjonalnie) Kod regionu używany do formatowania odpowiedzi.
  • (Opcjonalnie) Token sesji używany do zakończenia sesji Autouzupełniania (nowego).

Wysyłanie żądania szczegółów miejsca

Ten przykład pobiera miejsce według identyfikatora, przekazując te parametry:

  • Identyfikator miejsca ChIJV4k8_9UodTERU5KXbkYpSYs.
  • Lista pól określająca, że mają być zwracane nazwa miejsca i adres URL witryny.
  • GMSPlaceResultCallback do obsługi wyniku.

Interfejs API wywołuje określoną metodę wywołania zwrotnego, przekazując obiekt GMSPlace. Jeśli miejsce nie zostanie znalezione, obiekt miejsca będzie miał wartość nil.

Pakiet SDK Miejsc w Swift

// A hotel in Saigon with an attribution.
let placeID = "ChIJV4k8_9UodTERU5KXbkYpSYs"
let fetchPlaceRequest = FetchPlaceRequest(
  placeID: placeID,
  placeProperties: [.name, .website]
)
switch await placesClient.fetchPlace(with: fetchPlaceRequest) {
case .success(let place):
  // Handle place
case .failure(let placesError):
  // Handle error
}

Swift

// A hotel in Saigon with an attribution.
let placeID = "ChIJV4k8_9UodTERU5KXbkYpSYs"

// Specify the place data types to return.
let myProperties = [GMSPlaceProperty.name, GMSPlaceProperty.website].map {$0.rawValue}

// Create the GMSFetchPlaceRequest object.
let fetchPlaceRequest = GMSFetchPlaceRequest(placeID: placeID, placeProperties: myProperties, sessionToken: nil)

client.fetchPlace(with: fetchPlaceRequest, callback: {
  (place: GMSPlace?, error: Error?) in
  guard let place, error == nil else { return }
  print("Place found: \(String(describing: place.name))")
})

Objective-C

// A hotel in Saigon with an attribution.
NSString *placeID = @"ChIJV4k8_9UodTERU5KXbkYpSYs";

// Specify the place data types to return.
NSArray<NSString *> *myProperties = @[GMSPlacePropertyName, GMSPlacePropertyWebsite];

// Create the GMSFetchPlaceRequest object.
GMSFetchPlaceRequest *fetchPlaceRequest = [[GMSFetchPlaceRequest alloc] initWithPlaceID:placeID placeProperties: myProperties sessionToken:nil];

[placesClient fetchPlaceWithRequest: fetchPlaceRequest callback: ^(GMSPlace *_Nullable place, NSError *_Nullable error) {
    if (error != nil) {
      NSLog(@"An error occurred %@", [error localizedDescription]);
      return;
    } else {
    NSLog(@"Place Found: %@", place.name);
    NSLog(@"The place URL: %@", place.website);
  }
}];

Odpowiedź Informacje o miejscu

Usługa Place Details zwraca obiekt GMSPlace zawierający szczegółowe informacje o miejscu. W obiekcie GMSPlace wypełnione są tylko pola określone na liście pól.

Pobieranie stanu otwarcia

Obiekt GMSPlacesClient zawiera funkcję składową o nazwie isOpenWithRequest (isOpenRequest w Swift i isPlaceOpenRequest w GooglePlacesSwift), która zwraca odpowiedź wskazującą, czy miejsce jest obecnie otwarte, na podstawie czasu określonego w wywołaniu.

Ta metoda przyjmuje jeden argument typu GMSPlaceIsOpenWithRequest, który zawiera:

  • GMSPlaceObiekt lub ciąg znaków określający identyfikator miejsca. Więcej informacji o tworzeniu obiektu Place z wymaganymi polami znajdziesz w sekcji Szczegóły miejsca.
  • Opcjonalny obiekt NSDate (Obj-C) lub Date (Swift) określający czas, który chcesz sprawdzić. Jeśli nie podasz czasu, zostanie użyta wartość domyślna „teraz”.
  • Metoda GMSPlaceOpenStatusResponseCallback do obsługi odpowiedzi.
  • >

Metoda GMSPlaceIsOpenWithRequest wymaga ustawienia w obiekcie GMSPlace tych pól:

  • GMSPlacePropertyUTCOffsetMinutes
  • GMSPlacePropertyBusinessStatus
  • GMSPlacePropertyOpeningHours
  • GMSPlacePropertyCurrentOpeningHours
  • GMSPlacePropertySecondaryOpeningHours

Jeśli te pola nie są podane w obiekcie Place lub jeśli przekażesz identyfikator miejsca, metoda użyje funkcji GMSPlacesClient GMSFetchPlaceRequest:, aby je pobrać.

isOpenWithRequest odpowiedź

isOpenWithRequest zwraca obiekt GMSPlaceIsOpenResponse zawierający wartość logiczną o nazwie status, która wskazuje, czy firma jest otwarta, zamknięta lub czy jej stan jest nieznany.

Język Wartość, jeśli jest otwarty Wartość, jeśli firma jest zamknięta Wartość, jeśli stan jest nieznany
Places Swift true false nil
Swift .open .closed .unknown
Objective-C GMSPlaceOpenStatusOpen GMSPlaceOpenStatusClosed GMSPlaceOpenStatusUnknown

Płatności za konto isOpenWithRequest

Przykład: wysyłanie prośby GMSPlaceIsOpenWithRequest

Poniższy przykład pokazuje, jak zainicjować GMSPlaceIsOpenWithRequest w ramach istniejącego obiektu GMSPlace.

Pakiet SDK Miejsc w Swift

        let isOpenRequest = IsPlaceOpenRequest(place: place)
        switch await placesClient.isPlaceOpen(with: isOpenRequest) {
          case .success(let isOpenResponse):
            switch isOpenResponse.status {
              case true:
                // Handle open
              case false:
                // Handle closed
              case nil:
                // Handle unknown
          case .failure(let placesError):
            // Handle error
        }
        

Swift

    let isOpenRequest = GMSPlaceIsOpenRequest(place: place, date: nil)
      GMSPlacesClient.shared().isOpen(with: isOpenRequest) { response, error in
        if let error = error {
          // Handle Error
        }
        switch response.status {
          case .open:
            // Handle open
          case .closed:
            // Handle closed
          case .unknown:
            // Handle unknown
        }
      }
        

Objective-C

          GMSPlaceIsOpenRequest *isOpenRequest = [[GMSPlaceIsOpenRequest alloc] initWithPlace:place date:nil];

          [[GMSPlacesClient sharedClient] isOpenWithRequest:isOpenRequest callback:^(GMSPlaceIsOpenResponse response, NSError *_Nullable error) {
            if (error) {
              // Handle error
            }

            switch (response.status) {
              case GMSPlaceOpenStatusOpen:
                // Handle open
              case GMSPlaceOpenStatusClosed:
                // Handle closed
              case GMSPlaceOpenStatusUnknown:
                // Handle unknown
            }
          }];
          

Wymagane parametry

Aby określić wymagane parametry, użyj obiektu GMSFetchPlaceRequest.

Identyfikator miejsca

Identyfikator miejsca używany w pakiecie Places SDK na iOS jest tym samym identyfikatorem, który jest używany w interfejsie Places API, pakiecie Places SDK na Androida i innych interfejsach API Google. Każdy identyfikator miejsca może odnosić się tylko do jednego miejsca, ale jedno miejsce może mieć więcej niż 1 identyfikator.

W pewnych okolicznościach miejsce może otrzymać nowy identyfikator. Może się tak zdarzyć na przykład wtedy, gdy firma przeniesie się do nowej lokalizacji.

Gdy poprosisz o miejsce, podając jego identyfikator, możesz mieć pewność, że w odpowiedzi zawsze otrzymasz to samo miejsce (jeśli nadal istnieje). Pamiętaj jednak, że odpowiedź może zawierać identyfikator miejsca, który różni się od identyfikatora w Twoim żądaniu.

Lista pól

Gdy wysyłasz prośbę o informacje o miejscu, musisz określić dane, które mają być zwracane w obiekcie GMSPlace dla tego miejsca, jako maskę pola. Aby zdefiniować maskę pola, przekaż tablicę wartości z GMSPlaceProperty do obiektu GMSFetchPlaceRequest. Maskowanie pól to dobra praktyka projektowania, która pozwala uniknąć żądania niepotrzebnych danych, co z kolei pomaga uniknąć niepotrzebnego czasu przetwarzania i opłat.

Określ co najmniej jedno z tych pól:

  • Te pola wywołują Place Details Essentials ID Only SKU:

    GMSPlacePropertyPlaceID
    GMSPlacePropertyPhotos

  • Te pola wywołują podstawowy SKU szczegółów miejsca:

    GMSPlacePropertyAddressComponents
    GMSPlacePropertyFormattedAddress
    GMSPlacePropertyCoordinate
    GMSPlacePropertyPlusCode
    GMSPlacePropertyTypes
    GMSPlacePropertyViewport

  • Te pola wywołują SKU Szczegóły miejsca Pro:

    GMSPlacePropertyBusinessStatus
    GMSPlacePropertyIconBackgroundColor
    GMSPlacePropertyIconImageURL
    GMSPlacePropertyName
    GMSPlacePropertyUTCOffsetMinutes
    GMSPlacePropertyWheelchairAccessibleEntrance

  • Te pola wywołują SKU Szczegóły miejsca Pro:

    GMSPlacePropertyCurrentOpeningHours
    GMSPlacePropertySecondaryOpeningHours
    GMSPlacePropertyPhoneNumber
    GMSPlacePropertyPriceLevel
    GMSPlacePropertyRating
    GMSPlacePropertyOpeningHours
    GMSPlacePropertyUserRatingsTotal
    GMSPlacePropertyWebsite

  • Te pola wywołują kod SKU Szczegóły miejsca w wersji Enterprise:

    GMSPlacePropertyCurbsidePickup
    GMSPlacePropertyDelivery
    GMSPlacePropertyDineIn
    GMSPlacePropertyEditorialSummary
    GMSPlacePropertyReservable
    GMSPlacePropertyReviews
    GMSPlacePropertyServesBeer
    GMSPlacePropertyServesBreakfast
    GMSPlacePropertyServesBrunch
    GMSPlacePropertyServesDinner
    GMSPlacePropertyServesLunch
    GMSPlacePropertyServesVegetarianFood
    GMSPlacePropertyServesWine
    GMSPlacePropertyTakeout

W tym przykładzie przekazywana jest lista 2 wartości pól, aby określić, że obiekt GMSPlace zwracany przez żądanie zawiera pola nameplaceID:

Pakiet SDK Miejsc w Swift

// Specify the place data types to return.
let fields: [PlaceProperty] = [.placeID, .displayName]
    

Swift

// Specify the place data types to return.
let fields: [GMSPlaceProperty] = [.placeID, .name]
  

Objective-C

// Specify the place data types to return.
NSArray<GMSPlaceProperty *> *fields = @[GMSPlacePropertyPlaceID, GMSPlacePropertyName];
  

Parametry opcjonalne

Aby określić parametry opcjonalne, użyj obiektu GMSFetchPlaceRequest.

regionCode

Kod regionu używany do formatowania odpowiedzi, określony jako dwuznakowy kod CLDR. Ten parametr może też wpływać na wyniki wyszukiwania. Nie ma wartości domyślnej.

Jeśli nazwa kraju w polu adresu w odpowiedzi jest zgodna z kodem regionu, kod kraju jest pomijany w adresie.

Większość kodów CLDR jest identyczna z kodami ISO 3166-1, z kilkoma istotnymi wyjątkami. Na przykład krajowa domena najwyższego poziomu Zjednoczonego Królestwa to „uk” (.co.uk), a kod ISO 3166-1 to „gb” (technicznie dla podmiotu „Zjednoczone Królestwo Wielkiej Brytanii i Irlandii Północnej”). W zależności od obowiązujących przepisów parametr może wpływać na wyniki.

sessionToken

Tokeny sesji to wygenerowane przez użytkownika ciągi znaków, które śledzą wywołania Autocomplete (New) jako „sesje”. Autouzupełnianie (nowe) używa tokenów sesji do grupowania faz zapytania i wyboru miejsca w wyszukiwaniu autouzupełniania użytkownika w osobnej sesji na potrzeby rozliczeń. Tokeny sesji są przekazywane do wywołań Place Details (New), które następują po wywołaniach Autocomplete (New). Więcej informacji znajdziesz w artykule Tokeny sesji.

Wyświetlanie atrybucji w aplikacji

Gdy aplikacja wyświetla informacje uzyskane z GMSPlacesClient, np. zdjęcia i opinie, musi też wyświetlać wymagane atrybucje.

Na przykład właściwość reviews obiektu GMSPlacesClient zawiera tablicę maksymalnie 5 obiektów GMSPlaceReview. Każdy obiekt GMSPlaceReview może zawierać atrybucje i atrybucje autora. Jeśli wyświetlasz opinię w aplikacji, musisz też wyświetlać informacje o autorze lub atrybucję.

Więcej informacji znajdziesz w dokumentacji dotyczącej atrybucji.