Pakiet SDK Miejsc na iOS zapewnia Twojej aplikacji szczegółowe informacje o miejscach, w tym ich nazwę i adres, lokalizację geograficzną określoną jako współrzędne geograficzne, typ miejsca (np. klub nocny, sklep zoologiczny, muzeum) i wiele innych. Aby uzyskać dostęp do informacji o konkretnym miejscu, możesz użyć identyfikatora miejsca – stałego identyfikatora, który jednoznacznie identyfikuje miejsce.
Szczegóły miejsca
Klasa GMSPlace
zawiera informacje o konkretnym miejscu. Aby uzyskać dostęp do obiektu GMSPlace
, wykonaj te czynności:
- Zadzwoń:
GMSPlacesClient findPlaceLikelihoodsFromUserLocationWithPlaceFields:
. Zapoznaj się z przewodnikiem, aby uzyskać informacje o bieżącym miejscu. - Wywołaj
GMSPlacesClient fetchPlaceFromPlaceID:
, przekazującGMSPlaceField
, identyfikator miejsca i metodę wywołania zwrotnego. Jeśli w przypadku żądań szczegółów miejsca nie określisz co najmniej jednego pola z żądaniem lub pominiesz parametrfields
w żądaniu, zostaną zwrócone WSZYSTKIE możliwe pola i odpowiednio naliczymy opłaty. Zapoznaj się z przewodnikiem, aby uzyskać informacje o miejscu według identyfikatora.
Gdy wysyłasz prośbę o miejsce, musisz określić, jakie typy danych o miejscu chcesz zwrócić. Aby to zrobić, przekaż GMSPlaceField
, określając typy danych do zwrócenia. To ważna kwestia, ponieważ wpłynie na koszt każdego żądania.
Wyniki z danymi o miejscach nie mogą być puste, dlatego zwracane są tylko te wyniki z danymi (jeśli na przykład żądane miejsce nie zawiera zdjęć, pole photos
nie będzie widoczne).
W przykładzie poniżej przesyłamy listę 2 wartości pól, aby określić dane zwracane przez żądanie:
Swift
// A hotel in Saigon with an attribution. let placeID = "ChIJV4k8_9UodTERU5KXbkYpSYs" // Specify the place data types to return. let fields: GMSPlaceField = GMSPlaceField(rawValue: UInt(GMSPlaceField.name.rawValue) | UInt(GMSPlaceField.placeID.rawValue))
Objective-C
// A hotel in Saigon with an attribution. NSString *placeID = @"ChIJV4k8_9UodTERU5KXbkYpSYs"; // Specify the place data types to return. GMSPlaceField fields = (GMSPlaceFieldName | GMSPlaceFieldPlaceID);
Dowiedz się więcej o polach miejsc. Więcej informacji o naliczaniu opłat za żądania dotyczące danych miejsc znajdziesz w artykule Korzystanie i płatności.
Klasa GMSPlace
może zawierać te dane o miejscu:
name
– nazwa miejsca.editorialSummary
– zawiera prosty opis miejsca.placeID
– identyfikator tekstowy miejsca. Więcej informacji o identyfikatorach miejsc znajdziesz w pozostałej części tej strony.coordinate
– lokalizacja geograficzna miejsca określona jako szerokość i długość geograficzna.phoneNumber
– numer telefonu danego miejsca w formacie międzynarodowym.formattedAddress
– czytelny dla człowieka adres lokalizacji.Często jest to równoważny adres pocztowy. Pamiętaj, że w niektórych krajach (np. w Wielkiej Brytanii) nie można rozpowszechniać prawdziwych adresów pocztowych ze względu na ograniczenia licencyjne.
Sformatowany adres logicznie składa się z co najmniej jednego komponentu adresu. Na przykład adres „111 8th Aleja, Nowy Jork, Nowy Jork” składa się z tych komponentów: „111” (numer domu), „8 Aleja” (trasa), „Nowy Jork” (miasto) i „NY” (stan w USA).
Nie analizuj sformatowanego adresu automatycznie. Zamiast tego należy używać poszczególnych komponentów adresu, które oprócz sformatowanego pola adresu zawierają odpowiedź interfejsu API.
openingHours
– godziny otwarcia danego miejsca (oznaczone przezGMSOpeningHours
). Zadzwoń pod numerGMSOpeningHours.weekdayText
, aby uzyskać listę dziennych godzin otwarcia w danym tygodniu. WywołajGMSOpeningHours.Periods
, aby zwrócić listę elementówGMSPeriod
z bardziej szczegółowymi informacjami, które odpowiadają danym dostarczonym przezweekdayText
. Uwaga: jeśli miejsce jest zawsze otwarte, przedział czasu jest przedstawiany jako niedziela o północy, a polecloseEvent
ma wartość null.currentOpeningHours
isecondaryOpeningHours
– pola, w przypadku których następuje okres świąteczny i tymczasowe zmiany harmonogramu dla danego miejsca.addressComponents
– tablica obiektówGMSAddressComponent
reprezentujących komponenty adresu miejsca. Komponenty te służą do wyodrębniania uporządkowanych informacji o adresie miejsca, np. w znalezieniu miasta, w którym się ono znajduje. Nie używaj tych komponentów do formatowania adresów. Zamiast tego użyj właściwościformattedAddress
, która udostępnia zlokalizowany adres w formacie.Zwróć uwagę na te informacje na temat tablicy
addressComponents
:- Tablica komponentów adresu może zawierać więcej komponentów niż
formattedAddress
. - Tablica nie musi zawierać wszystkich podmiotów politycznych z adresem (oprócz tych uwzględnionych w elemencie
formattedAddress
). - Nie możemy zagwarantować, że format odpowiedzi będzie taki sam między żądaniami. Liczba
addressComponents
różni się w zależności od żądanego adresu i może się z czasem zmieniać dla tego samego adresu. Komponent może zmieniać pozycję w tablicy. Typ komponentu może się zmieniać. Konkretnego komponentu może brakować w późniejszej odpowiedzi.
- Tablica komponentów adresu może zawierać więcej komponentów niż
userRatingsTotal
– określa, z ilu opinii składa się ocena miejsca.
Klasa GMSPlace
zawiera te funkcje członkowskie:
-
isOpen
oblicza, czy miejsce jest otwarte w danej godzinie, na podstawieopeningHours
iUTCOffsetMinutes
oraz bieżącej daty i godziny. isOpenAtDate
oblicza, czy dane miejsce jest otwarte w określonym dniu, na podstawie właściwościopeningHours
iUTCOffsetMinutes
oraz bieżącej daty i godziny.
Jeśli używasz tych funkcji do uzyskiwania godzin lub dat otwarcia, pierwotne żądanie fetchPlaceFromPlaceID:
lub findPlaceLikelihoodsFromUserLocationWithPlaceFields:
musi zawierać ZARÓWNO pola GMSPlaceFieldOpeningHours
, jak i GMSPlaceFieldUTCOffsetMinutes
. Jeśli brakuje któregoś z tych pól, wynikowy obiekt GMSPlace
nie będzie zawierać godzin otwarcia ani dat, a wywołanie zwróci GMSPlaceOpenStatusUnknown
. Aby zapewnić dokładne wyniki, w pierwotnej prośbie o miejsce poproś o pola GMSPlaceFieldBusinessStatus
i GMSPlaceFieldUTCOffsetMinutes
. Jeśli prośba nie zostanie wysłana, zakłada się, że firma działa.
isOpen
z informacjami o miejscu.
Zyskaj wyjątkowe godziny pracy
Z kolei standardowe godziny otwarcia obowiązują doopeningHours
, currentOpeningHours
i secondaryOpeningHours
obsługują zmiany w okresach świątecznych i tymczasowych.
Wyjątkowe godziny otwarcia w te wyjątkowe dni można filtrować i przedstawić, jeśli są dostępne.
Swift
func examineOpeningHours(place: GMSPlace) { // Check if the current opening hours contains a special day that has exceptional hours guard let currentOpeningHours = place.currentOpeningHours else { return } if let specialDays = currentOpeningHours.specialDays { guard !specialDays.isEmpty else { return } if let specialDay = specialDays.filter { $0.isExceptional }.first { // Indicate exceptional hours } } // Check if current opening hours contains a truncated time period let periods = currentOpeningHours.periods if !periods.isEmpty { for period in periods { let open = period.open let close = period.close if let open = open { let date = open.date if open.isTruncated { // Indicate truncated time period } } } } // Check if the place's secondary opening hours indicate when delivery is available let secondaryOpeningHours = place.secondaryOpeningHours guard let hoursType = secondaryOpeningHours.first?.hoursType else { return } if (hoursType == GMSPlaceHoursTypeDelivery) { // Indicate hours where delivery is available } }
Objective-C
- (void)examineOpeningHours:(GMSPlace *) place { // Check if the current opening hours contains a special day that has exceptional hours GMSOpeningHours *currentOpeningHours = place.currentOpeningHours; if (currentOpeningHours != nil) { NSArray<GMSPlaceSpecialDay *> *specialDays = currentOpeningHours.specialDays; if ([specialDays count] != 0) { for (GMSPlaceSpecialDay *specialDay in specialDays) { NSDate *date = specialDay.date; if ([specialDay isExceptional]) { // Indicate exceptional hours } } } } // Check if current opening hours contains a truncated time period NSArray <GMSPeriod *> * periods = currentOpeningHours.periods; if ([periods count] != 0) { for (GMSPeriod * period in periods) { GMSTimeOfWeek *open = period.open; GMSTimeOfWeek *close = period.close; if (open) { if ([open isTruncated]) { // Indicate truncated time period } } } } // Check if the place's secondary opening hours indicate when delivery is available GMSOpeningHours *secondaryOpeningHours = place.secondaryOpeningHours; GMSPlaceHoursType hoursType = secondaryOpeningHours.getHoursType; if (hoursType == GMSPlaceHoursTypeDelivery) { // Indicate hours where delivery is available } }
Znajdź miejsce na podstawie dokumentu tożsamości
Identyfikator miejsca to identyfikator tekstowy, który jednoznacznie identyfikuje miejsce. Za pomocą pakietu SDK Miejsc na iOS możesz pobrać identyfikator miejsca z obiektu GMSPlace
. Możesz zapisać identyfikator miejsca i użyć go później do ponownego pobrania obiektu GMSPlace
.
Aby znaleźć miejsce według identyfikatora, wywołaj GMSPlacesClient
fetchPlaceFromPlaceID:
, przekazując te parametry:
- Ciąg tekstowy zawierający identyfikator miejsca.
- Co najmniej jeden element
GMSPlaceField
określający typy danych do zwrócenia. - Token sesji, jeśli wywołanie zostanie wykonane w celu zakończenia zapytania autouzupełniania. W przeciwnym razie przekaż nil.
- Pole
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.
Swift
// A hotel in Saigon with an attribution. let placeID = "ChIJV4k8_9UodTERU5KXbkYpSYs" // Specify the place data types to return. let fields: GMSPlaceField = GMSPlaceField(rawValue: UInt(GMSPlaceField.name.rawValue) | UInt(GMSPlaceField.placeID.rawValue))! placesClient?.fetchPlace(fromPlaceID: placeID, placeFields: fields, sessionToken: nil, callback: { (place: GMSPlace?, error: Error?) in if let error = error { print("An error occurred: \(error.localizedDescription)") return } if let place = place { self.lblName?.text = place.name print("The selected place is: \(place.name)") } })
Objective-C
// A hotel in Saigon with an attribution. NSString *placeID = @"ChIJV4k8_9UodTERU5KXbkYpSYs"; // Specify the place data types to return. GMSPlaceField fields = (GMSPlaceFieldName | GMSPlaceFieldPlaceID); [_placesClient fetchPlaceFromPlaceID:placeID placeFields:fields sessionToken:nil callback:^(GMSPlace * _Nullable place, NSError * _Nullable error) { if (error != nil) { NSLog(@"An error occurred %@", [error localizedDescription]); return; } if (place != nil) { NSLog(@"The selected place is: %@", [place name]); } }];
Wyświetlaj atrybucje w swojej aplikacji
Gdy aplikacja wyświetla informacje uzyskane ze strony GMSPlacesClient
lookUpPlaceID:callback:
, musi też wyświetlać atrybucje.
Zapoznaj się z dokumentacją dotyczącą atrybucji.
Więcej informacji o identyfikatorach miejsc
Identyfikator miejsca używany w pakiecie Places SDK na iOS jest taki sam jak identyfikator używany w Places API, 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 miejsca. Może się tak na przykład zdarzyć, gdy firma przeprowadzi się w inne miejsce.
Jeśli podasz identyfikator miejsca, w odpowiedzi wyświetli się zawsze to samo miejsce (o ile miejsce nadal istnieje). Pamiętaj jednak, że odpowiedź może zawierać identyfikator miejsca inny niż ten podany w Twoim żądaniu.
Więcej informacji znajdziesz w omówieniu identyfikatorów miejsc.