L'SDK Places per iOS fornisce alla tua app informazioni dettagliate sui luoghi, inclusi il nome e l'indirizzo, la posizione geografica specificata come coordinate di latitudine/longitudine, il tipo di luogo (ad esempio discoteca, negozio di animali, museo) e altro ancora. Per accedere a queste informazioni relative a un luogo specifico, puoi utilizzare l'ID luogo, un identificatore stabile che identifica in modo univoco un luogo.
Dettagli luogo
Il corso GMSPlace
fornisce informazioni su un luogo specifico. Puoi recuperare un oggetto
GMSPlace
nei seguenti modi:
- Chiama il numero
GMSPlacesClient findPlaceLikelihoodsFromUserLocationWithPlaceFields:
. Consulta la guida per ottenere il luogo attuale. - Chiama
GMSPlacesClient fetchPlaceFromPlaceID:
, trasmettendo unGMSPlaceField
, un ID luogo e un metodo di callback. Per le richieste Place Details, se non specifichi almeno un campo con una richiesta o se ometti il parametrofields
da una richiesta, verranno restituiti TUTTI i campi possibili e ti verranno addebitati i costi corrispondenti. Consulta la guida per ottenere un luogo in base all'ID.
Quando richiedi un luogo, devi specificare i tipi di dati sul luogo da
restituire. Per farlo, passa un GMSPlaceField
, specificando i tipi di dati da restituire. Questa è una considerazione importante, poiché influirà sul costo per ogni richiesta.
Poiché i risultati dei dati relativi ai luoghi non possono essere vuoti, vengono restituiti solo
risultati con dati (ad esempio, se un luogo richiesto non ha
foto, il campo photos
non sarà presente nel risultato).
L'esempio seguente trasmette un elenco di due valori di campo per specificare i dati restituiti da una richiesta:
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);
Scopri di più sui campi del luogo. Per ulteriori informazioni su come vengono fatturate le richieste di dati dei luoghi, consulta Utilizzo e fatturazione.
La classe GMSPlace
può contenere i seguenti dati sui luoghi:
name
- Il nome del luogo.editorialSummary
- Fornisce una semplice descrizione di un luogo.placeID
- L'identificatore testuale del luogo. Scopri di più sugli ID luogo nel resto di questa pagina.coordinate
- La posizione geografica del luogo, specificata come coordinate di latitudine e longitudine.phoneNumber
- Il numero di telefono del luogo, in formato internazionale.formattedAddress
: l'indirizzo leggibile di questa località.Spesso questo indirizzo equivale all'indirizzo postale. Tieni presente che alcuni paesi, come il Regno Unito, non consentono la distribuzione di indirizzi postali reali a causa di restrizioni relative alle licenze.
L'indirizzo formattato è logicamente composto da uno o più componenti dell'indirizzo. Ad esempio, l'indirizzo "111 8th Avenue, New York, NY" è costituito dai seguenti componenti: "111" (il numero civico), "8th Avenue" (il percorso), "New York" (la città) e "NY" (lo stato degli Stati Uniti).
Non analizzare l'indirizzo formattato in modo programmatico. Devi invece utilizzare i singoli componenti dell'indirizzo, che la risposta dell'API include in aggiunta al campo dell'indirizzo formattato.
openingHours
- Gli orari di apertura del luogo (rappresentati daGMSOpeningHours
). ChiamaGMSOpeningHours.weekdayText
per ricevere un elenco localizzato di stringhe localizzate degli orari di apertura giornalieri della settimana. RichiamaGMSOpeningHours.Periods
per restituire un elenco diGMSPeriod
con informazioni più dettagliate equivalenti ai dati forniti daweekdayText
. Nota: se un luogo è sempre aperto, il periodo di tempo è rappresentato da domenica a mezzanotte ecloseEvent
è nullo.currentOpeningHours
esecondaryOpeningHours
: campi interessati da festività e modifiche temporanee alla programmazione di un luogo.addressComponents
: un array di oggettiGMSAddressComponent
che rappresenta i componenti dell'indirizzo di un luogo. Questi componenti vengono forniti allo scopo di estrarre informazioni strutturate sull'indirizzo di un luogo, ad esempio per trovare la città in cui si trova il luogo. Non utilizzare questi componenti per la formattazione dell'indirizzo. Utilizza invece la proprietàformattedAddress
, che fornisce un indirizzo formattato localizzato.Tieni presente quanto segue in merito all'array
addressComponents
:- L'array di componenti dell'indirizzo potrebbe contenere più componenti rispetto a
formattedAddress
. - L'array non include necessariamente tutte le entità politiche che
contengono un indirizzo, tranne quelle incluse in
formattedAddress
. - Non è garantito che il formato della risposta rimanga lo stesso tra le richieste. In particolare, il numero di
addressComponents
varia in base all'indirizzo richiesto e può cambiare nel tempo per lo stesso indirizzo. Un componente può cambiare posizione nell'array. Il tipo di componente può essere modificato. In una risposta successiva potrebbe mancare un componente specifico.
- L'array di componenti dell'indirizzo potrebbe contenere più componenti rispetto a
userRatingsTotal
: indica quante recensioni costituiscono la valutazione del luogo.
La classe GMSPlace
contiene le seguenti funzioni membro:
-
isOpen
calcola se un luogo è aperto in un determinato orario, in base aopeningHours
eUTCOffsetMinutes
, nonché alla data e all'ora correnti. isOpenAtDate
calcola se un luogo è aperto in una determinata data, in base aopeningHours
eUTCOffsetMinutes
, nonché alla data e all'ora correnti.
Quando utilizzi queste funzioni per ottenere gli orari di apertura e/o le date, la richiesta
fetchPlaceFromPlaceID:
o findPlaceLikelihoodsFromUserLocationWithPlaceFields:
originale deve specificare SIA i campi GMSPlaceFieldOpeningHours
e GMSPlaceFieldUTCOffsetMinutes
. Se uno di questi campi non è presente, l'oggetto GMSPlace
risultante non conterrà gli orari di apertura o le date e la chiamata restituirà
GMSPlaceOpenStatusUnknown
. Per garantire risultati precisi, richiedi
i campi GMSPlaceFieldBusinessStatus
e GMSPlaceFieldUTCOffsetMinutes
nella richiesta di luogo originale. Se non richiesto, si presume che l'attività sia operativa.
isOpen
con Dettagli luogo.
Approfitta di orari eccezionali
Gli orari di apertura regolari sono disponibili fino al giornoopeningHours
, ma currentOpeningHours
e secondaryOpeningHours
supportano le modifiche agli orari festivi e temporanei.
Gli orari eccezionali per questi giorni speciali possono essere filtrati e presentati, se disponibili.
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 } }
Ottieni un luogo in base all'ID
Un ID luogo è un identificatore testuale che identifica in modo univoco un luogo. Nell'SDK Places per iOS puoi recuperare l'ID di un luogo da un oggetto GMSPlace
. Puoi archiviare l'ID luogo e utilizzarlo per recuperare di nuovo l'oggetto
GMSPlace
in un secondo momento.
Per ottenere un luogo in base all'ID, chiama
GMSPlacesClient
fetchPlaceFromPlaceID:
, trasmettendo i seguenti parametri:
- Una stringa contenente un ID luogo.
- Uno o più
GMSPlaceField
, specificando i tipi di dati da restituire. - Un token di sessione se la chiamata viene effettuata per concludere una query di completamento automatico. In caso contrario, passa null.
- Un
GMSPlaceResultCallback
per gestire il risultato.
L'API richiama il metodo di callback specificato, passando un oggetto
GMSPlace
. Se il luogo non viene trovato, l'oggetto luogo è nullo.
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]); } }];
Attribuzioni display nell'app
Quando l'app mostra informazioni ottenute da GMSPlacesClient
lookUpPlaceID:callback:
, deve mostrare anche le attribuzioni.
Consulta la documentazione sulle attribuzioni.
Scopri di più sugli ID luogo
L'ID luogo utilizzato nell'SDK Places per iOS è lo stesso identificatore utilizzato nell'API Places, nell'SDK Places per Android e in altre API di Google.
Ogni ID luogo può fare riferimento a un solo luogo, ma un luogo può avere più di un ID luogo.
In alcune circostanze è possibile che un luogo venga associato a un nuovo ID luogo. Ad esempio, questo può accadere se un'attività si trasferisce in una nuova sede.
Quando richiedi un luogo specificando un ID luogo, hai la certezza che riceverai sempre lo stesso luogo nella risposta (se il luogo esiste ancora). Tuttavia, tieni presente che la risposta potrebbe contenere un ID luogo diverso da quello indicato nella richiesta.
Per maggiori informazioni, consulta la panoramica di ID luogo.