Eso es todo.

Para comenzar a desarrollar, consulta nuestra documentación para desarrolladores.

Activar la Google Places API for iOS

Para que puedas comenzar, te proporcionaremos orientación en la consola para desarrolladores de Google a fin de que hagas primero algunas acciones:

  1. Crear o seleccionar un proyecto
  2. Activar la Google Places API for iOS
  3. Crear claves correspondientes
Continuar

Primeros pasos con la Places API for iOS

Sigue los pasos de esta guía para descargar la Google Places API for iOS, agregar la biblioteca y sus dependencias a tu app y obtener una clave de API gratuita.

Hay disponibles notas de la versión para cada versión.

Paso 1: Descarga la última versión de Xcode

Para crear un proyecto usando la Google Places API for iOS, necesitas la versión 7.3 de Xcode o una posterior.

Paso 2: Instala la API

Usar CocoaPods

La Google Places API for iOS está disponible en dos pods de CocoaPods. El primero de estos pods, GooglePlaces, contiene la funcionalidad de todos los lugares que no exige un mapa (API de programación y el widget de IU de autocompletado), mientras que GooglePlacePicker es un pod separado que contiene un widget para buscar y seleccionar un lugar de un mapa.

CocoaPods es un administrador de dependencias de código abierto para proyectos de Swift y Objective-C de Cocoa. Si todavía no dispones de la herramienta CocoaPods, instálala en macOS ejecutando el siguiente comando desde el terminal: Para obtener información detallada, consulta la guía de primeros pasos de CocoaPods.

sudo gem install cocoapods

Crea un Podfile para la Google Places API for iOS y úsalo para instalar la API y sus dependencias:

  1. Si aún no tienes un proyecto de Xcode, créalo y guárdalo en tu máquina local. (Si no has realizado desarrollos de iOS antes, crea una Aplicación de vista única).
  2. Crea un archivo llamado Podfile en el directorio de tu proyecto. Este archivo define las dependencias de tu proyecto.
  3. Edita el Podfile y agrega tus dependencias. A continuación, te mostramos un ejemplo que especifica tu nombre de destino de aplicación y los nombres de ambos pods que vienen con la Places API for iOS (GooglePlacePicker y GoogleMaps solo se exigen si usas el ejemplo del seleccionador de sitios):
    source 'https://github.com/CocoaPods/Specs.git'
    target 'YOUR_APPLICATION_TARGET_NAME_HERE' do
      pod 'GooglePlaces'
      pod 'GooglePlacePicker'
      pod 'GoogleMaps'
    end
  4. Guarda el Podfile.
  5. Abre un terminal y dirígete al directorio que contiene el Podfile:

    cd <path-to-project>
  6. Ejecuta el comando pod install. Con esto se instalarán las API especificadas en el Podfile junto con las dependencias que contengan.

    pod install
  7. Cierra Xcode y luego abre (con doble clic) el archivo .xcworkspace de tu proyecto para ejecutar Xcode. A partir de este punto, debes usar el archivo .xcworkspace para abrir el proyecto.

Instalación manual

En esta guía, se muestra la manera de agregar manualmente el framework de GoogleMaps a tu proyecto y configurar los ajustes de desarrollo en Xcode.

  1. Descarga los archivos de origen del SDK:

    Solo se necesita GooglePlacePicker-2.0.1 si usas el seleccionador de sitios.

  2. Desempaqueta los archivos de origen.
  3. Ejecuta Xcode y abre un proyecto existente o crea uno nuevo. Si recién comienzas a usar iOS, crea una Aplicación de vista única, inhabilita Use Storyboards y habilita Use Automatic Reference Counting.
  4. Quita cualquier paquete de Maps de las versiones anteriores de tu proyecto.
  5. Arrastra los siguientes paquetes a tu proyecto (selecciona Copy items if needed cuando aparezca el mensaje):
    • GooglePlaces-2.0.1/Frameworks/GooglePlaces.framework
    • GoogleMaps-2.0.1/Subspecs/Base/Frameworks/GoogleMapsBase.framework

    Si estás usando el seleccionador de sitios, arrastra los siguientes paquetes a tu proyecto (además de los paquetes enumerados previamente):

    • GooglePlacePicker-2.0.1/Frameworks/GooglePlacePicker.framework
    • GoogleMaps-2.0.1/Subspecs/Maps/Frameworks/GoogleMapsCore.framework
    • GoogleMaps-2.0.1/Subspecs/Maps/Frameworks/GoogleMaps.framework
  6. En tu proyecto, haz clic con el botón secundario en GooglePlaces.framework y selecciona Show In Finder.
  7. Arrastra GooglePlaces.bundle de la carpeta Resources y a tu proyecto. Cuando aparezca el mensaje, asegúrate de que la opción Copy items into destination group's folder no esté seleccionada.
  8. Si usas el seleccionador de sitios, repite el paso previo y arrastra los archivos GoogleMaps.bundle y GooglePlacePicker.bundle a tu proyecto. Estos se pueden encontrar en GoogleMaps.framework y GooglePlacePicker.framework respectivamente.
  9. Selecciona tu proyecto en el navegador de proyectos y elige el destino de la aplicación.
  10. Abre la pestaña Build Phases y agrega los siguientes frameworks en Link Binary with Libraries:
    • GooglePlaces.framework
    • GoogleMapsBase.framework
    • GooglePlacePicker.framework (solo si se usa el seleccionador de sitios)
    • GoogleMapsCore.framework (solo si se usa el seleccionador de sitios)
    • GoogleMapsCore.framework (solo si se usa el seleccionador de sitios)
    • Accelerate.framework
    • CoreData.framework
    • CoreGraphics.framework
    • CoreLocation.framework
    • CoreText.framework
    • GLKit.framework
    • ImageIO.framework
    • libc++.tbd
    • libz.tbd
    • OpenGLES.framework
    • QuartzCore.framework
    • SystemConfiguration.framework
    • UIKit.framework
  11. Elige tu proyecto, en lugar de un destino específico, y abre la pestaña Build Settings.

  12. En la sección Other Linker Flags, agrega -ObjC. Si esta configuración no es visible, cambia el filtro de la barra Build Settings de Basic a All.

Paso 3: Obtener una clave de API

Para comenzar a usar Google Places API for iOS, haz clic en el botón que aparece a continuación, que te guiará por todo el proceso de activación de Google Places API for iOS y obtención de una clave de API.

Obtén una clave

También puedes seguir estos pasos para obtener una clave de API:

  1. Ingresa a Google API Console.
  2. Crea o selecciona un proyecto.
  3. Haz clic en Continue para habilitar la Google Places API for iOS.
  4. En la página de Credentials, obtén una clave de API.
    Nota: Si tienes una clave con restricciones de iOS, puedes usarla. Puedes usar la misma clave con cualquiera de tus aplicaciones de iOS dentro del mismo proyecto.
  5. En el cuadro de diálogo en el que aparece la clave de API, selecciona Restrict Key para agregar una restricción de iOS a la clave de API.
  6. En la sección Restrictions, selecciona iOS apps y luego ingresa el identificador de paquete de tu app. Por ejemplo: com.example.helloplaces.
  7. Haz clic en Save.

    Tu nueva clave de iOS aparece en la lista de claves de API de tu proyecto. Una clave de API es una cadena de caracteres similar a la siguiente:

    AIzaSyBdVl-cTICSwYKrZ95SuvNw7dbMuDt1KG0

También puedes buscar una clave existente en Google API Console.

Para obtener más información sobre el uso de la Google API Console, consulta Ayuda de la API Console.

Paso 4: Agregar la clave de la API a tu aplicación

En los siguientes ejemplos de código se muestra la manera de agregar la clave de API a una aplicación.

Swift

Agrega tu clave de API a tu AppDelegate.swift de la siguiente manera:

  • Agrega la siguiente instrucción de importación:
    import GooglePlaces
  • Agrega lo siguiente a tu método application(_:didFinishLaunchingWithOptions:) y reemplaza YOUR_API_KEY por tu clave de API:
    GMSPlacesClient.provideAPIKey("YOUR_API_KEY")
Objective-C

Agrega tu clave de API a tu AppDelegate.m de la siguiente manera:

  • Agrega la siguiente instrucción de importación:
    @import GooglePlaces;
  • Agrega lo siguiente a tu método application:didFinishLaunchingWithOptions:, el cual reemplaza YOUR_API_KEY por tu clave de API:
    [GMSPlacesClient provideAPIKey:@"YOUR_API_KEY"];

Paso 5: Comienza a redactar código

En los siguientes ejemplos de código se demuestra la manera de obtener el sitio actual y agregar un widget de IU de seleccionador de sitios a tu app.

Obtener sitio actual

Swift

import UIKit
import GooglePlaces

class ViewController: UIViewController {

  var placesClient: GMSPlacesClient!

  // Add a pair of UILabels in Interface Builder, and connect the outlets to these variables.
  @IBOutlet var nameLabel: UILabel!
  @IBOutlet var addressLabel: UILabel!

  override func viewDidLoad() {
    super.viewDidLoad()
    placesClient = GMSPlacesClient.shared()
  }

  // Add a UIButton in Interface Builder, and connect the action to this function.
  @IBAction func getCurrentPlace(_ sender: UIButton) {

    placesClient.currentPlace(callback: { (placeLikelihoodList, error) -> Void in
      if let error = error {
        print("Pick Place error: \(error.localizedDescription)")
        return
      }

      self.nameLabel.text = "No current place"
      self.addressLabel.text = ""

      if let placeLikelihoodList = placeLikelihoodList {
        let place = placeLikelihoodList.likelihoods.first?.place
        if let place = place {
          self.nameLabel.text = place.name
          self.addressLabel.text = place.formattedAddress?.components(separatedBy: ", ")
            .joined(separator: "\n")
        }
      }
    })
  }
}

Objective-C

#import "ViewController.h"
@import GooglePlaces;

@interface ViewController ()
// Add a pair of UILabels in Interface Builder, and connect the outlets to these variables.
@property (weak, nonatomic) IBOutlet UILabel *nameLabel;
@property (weak, nonatomic) IBOutlet UILabel *addressLabel;
@end

@implementation ViewController {
  GMSPlacesClient *_placesClient;
}

- (void)viewDidLoad {
  [super viewDidLoad];
  _placesClient = [GMSPlacesClient sharedClient];
}

// Add a UIButton in Interface Builder, and connect the action to this function.
- (IBAction)getCurrentPlace:(UIButton *)sender {
  [_placesClient currentPlaceWithCallback:^(GMSPlaceLikelihoodList *placeLikelihoodList, NSError *error){
    if (error != nil) {
      NSLog(@"Pick Place error %@", [error localizedDescription]);
      return;
    }

    self.nameLabel.text = @"No current place";
    self.addressLabel.text = @"";

    if (placeLikelihoodList != nil) {
      GMSPlace *place = [[[placeLikelihoodList likelihoods] firstObject] place];
      if (place != nil) {
        self.nameLabel.text = place.name;
        self.addressLabel.text = [[place.formattedAddress componentsSeparatedByString:@", "]
                                  componentsJoinedByString:@"\n"];
      }
    }
  }];
}
@end

Agregar un seleccionador de sitios

En las aplicaciones de demostración de SDK proporcionadas con la Google Places API for iOS se incluye una aplicación de ejemplo para el widget de la IU del seleccionador de sitios. Para instalar la demostración del seleccionador de sitios, usa el comando pod try GooglePlacePicker. Para obtener información más detallada, consulta la guía de ejemplos de códigos.

A continuación, se ofrece un ejemplo introductorio rápido para crear un seleccionador de sitios.

Swift

import UIKit
import GooglePlacePicker

class ViewController: UIViewController {

  // Add a pair of UILabels in Interface Builder, and connect the outlets to these variables.
  @IBOutlet var nameLabel: UILabel!
  @IBOutlet var addressLabel: UILabel!

  // Add a UIButton in Interface Builder, and connect the action to this function.
  @IBAction func pickPlace(_ sender: UIButton) {
    let center = CLLocationCoordinate2D(latitude: 37.788204, longitude: -122.411937)
    let northEast = CLLocationCoordinate2D(latitude: center.latitude + 0.001, longitude: center.longitude + 0.001)
    let southWest = CLLocationCoordinate2D(latitude: center.latitude - 0.001, longitude: center.longitude - 0.001)
    let viewport = GMSCoordinateBounds(coordinate: northEast, coordinate: southWest)
    let config = GMSPlacePickerConfig(viewport: viewport)
    let placePicker = GMSPlacePicker(config: config)

    placePicker.pickPlace(callback: {(place, error) -> Void in
      if let error = error {
        print("Pick Place error: \(error.localizedDescription)")
        return
      }

      if let place = place {
        self.nameLabel.text = place.name
        self.addressLabel.text = place.formattedAddress?.components(separatedBy: ", ")
          .joined(separator: "\n")
      } else {
        self.nameLabel.text = "No place selected"
        self.addressLabel.text = ""
      }
    })
  }
}
    

Objective-C

#import "ViewController.h"
@import GooglePlacePicker;

@interface ViewController ()
// Add a pair of UILabels in Interface Builder, and connect the outlets to these variables.
@property (weak, nonatomic) IBOutlet UILabel *nameLabel;
@property (weak, nonatomic) IBOutlet UILabel *addressLabel;
@end

@implementation ViewController {
  GMSPlacePicker *_placePicker;
}

// Add a UIButton in Interface Builder, and connect the action to this function.
- (IBAction)pickPlace:(UIButton *)sender {

  CLLocationCoordinate2D center = CLLocationCoordinate2DMake(37.788204, -122.411937);
  CLLocationCoordinate2D northEast = CLLocationCoordinate2DMake(center.latitude + 0.001,
                                                                center.longitude + 0.001);
  CLLocationCoordinate2D southWest = CLLocationCoordinate2DMake(center.latitude - 0.001,
                                                                center.longitude - 0.001);
  GMSCoordinateBounds *viewport = [[GMSCoordinateBounds alloc] initWithCoordinate:northEast
                                                                       coordinate:southWest];
  GMSPlacePickerConfig *config = [[GMSPlacePickerConfig alloc] initWithViewport:viewport];
  _placePicker = [[GMSPlacePicker alloc] initWithConfig:config];

  [_placePicker pickPlaceWithCallback:^(GMSPlace *place, NSError *error) {
    if (error != nil) {
      NSLog(@"Pick Place error %@", [error localizedDescription]);
      return;
    }

    if (place != nil) {
      self.nameLabel.text = place.name;
      self.addressLabel.text = [[place.formattedAddress
                                 componentsSeparatedByString:@", "] componentsJoinedByString:@"\n"];
    } else {
      self.nameLabel.text = @"No place selected";
      self.addressLabel.text = @"";
    }
  }];
}
@end

Enviar comentarios sobre…