Pronto!

Para começar a desenvolver, acesse nossa documentação do desenvolvedor.

Ativar a API do Google Places para iOS

Para começar, orientaremos você pelo Console de Desenvolvedores do Google para realizar algumas atividades:

  1. Criar ou selecionar um projeto
  2. Ativar a API do Google Places para iOS
  3. Criar chaves apropriadas
Continuar

Primeiros passos com a Places API for iOS

Sigas as etapas deste guia para baixar a Google Places API for iOS, adicionar a biblioteca e suas dependências ao aplicativo e obter uma chave de API gratuita.

As notas da versão estão disponíveis para todas as versões.

Etapa 1: obter a versão mais recente do Xcode

Para criar um projeto usando a Google Places API for iOS, é necessário usar a versão 7.3 ou posterior do Xcode.

Etapa 2: instalar a API

Usar CocoaPods

A Google Places API for iOS está disponível como dois pods do CocoaPod. O primeiro desses pods, GooglePlaces, contém todas as funcionalidades de locais que não precisam de um mapa (APIs programáticas e o widget de preenchimento automático da IU), e o GooglePlacePicker é um pod separado que contém um widget para pesquisar e selecionar um local em um mapa.

O CocoaPods é um gerenciador de dependências de código aberto para projetos Cocoa em Swift e Objective-C. Se você ainda não tem essa ferramenta, instale-a no macOS executando o seguinte comando no terminal. Para saber mais, consulte o guia de primeiros passos do CocoaPods.

sudo gem install cocoapods

Crie um Podfile para a Google Places API for iOS e use-o para instalar a API e suas dependências:

  1. Se ainda não tiver um projeto Xcode, crie um agora e salve-o no computador local. (Se você tem pouca experiência com desenvolvimento para iOS, crie um Single View Application)
  2. Crie um arquivo chamado Podfile no diretório do projeto. Esse arquivo define as dependências do projeto.
  3. Edite o Podfile e adicione suas dependências. Veja este exemplo que especifica o nome de destino do aplicativo e os nomes dos dois pods fornecidos com a Places API for iOS (GooglePlacePicker e GoogleMaps somente serão necessários se você usar o exemplo de seletor de local):
    source 'https://github.com/CocoaPods/Specs.git'
    target 'YOUR_APPLICATION_TARGET_NAME_HERE' do
      pod 'GooglePlaces'
      pod 'GooglePlacePicker'
      pod 'GoogleMaps'
    end
  4. Salve o Podfile.
  5. Abra um terminal e acesse o diretório que contém o Podfile:

    cd <path-to-project>
  6. Execute o comando pod install. Assim, você instalará as APIs especificadas no Podfile junto com as respectivas dependências.

    pod install
  7. Feche o Xcode e clique duas vezes para abrir o arquivo .xcworkspace do projeto e iniciar o Xcode. A partir desse momento, será preciso usar o arquivo .xcworkspace para abrir o projeto.

Instalar manualmente

Este guia mostra como adicionar manualmente o framework GooglePlaces ao projeto e ajustar as configurações de compilação no Xcode.

  1. Baixe os arquivos de origem do SDK:

    O GooglePlacePicker-2.0.1 somente será necessário se o seletor de local estiver sendo usado.

  2. Descompacte os arquivos de origem.
  3. Inicialize o Xcode e abra ou crie um projeto. Se você tem pouca experiência com o iOS, crie um Single View Application, desative Use Storyboards e ative Use Automatic Reference Counting.
  4. Remova todas as versões anteriores do Maps do projeto.
  5. Arraste os pacotes a seguir para o seu projeto (quando aparecer a tela de confirmação, selecione Copy items if needed):
    • GooglePlaces-2.0.1/Frameworks/GooglePlaces.framework
    • GoogleMaps-2.0.1/Subspecs/Base/Frameworks/GoogleMapsBase.framework

    Se você estiver usando o seletor de local, arraste os pacotes a seguir para o projeto (além dos pacotes listados anteriormente):

    • 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. Clique com o botão direito em GooglePlaces.framework no projeto e selecione Show In Finder.
  7. Arraste GooglePlaces.bundle da pasta Resources para o projeto. Quando aparecer a tela de confirmação, certifique-se de que a opção Copy items into destination group’s folder não esteja selecionada.
  8. Se você estiver usando o seletor de local, repita a etapa anterior e arraste os arquivos de GoogleMaps.bundle e GooglePlacePicker.bundle para o projeto. Esses arquivos podem ser encontrados em GoogleMaps.framework e GooglePlacePicker.framework, respectivamente.
  9. Selecione o projeto no Project Navigator e escolha o local de destino do aplicativo.
  10. Abra a guia Build Phases e, dentro de Link Binary with Libraries, adicione os seguintes frameworks:
    • GooglePlaces.framework
    • GoogleMapsBase.framework
    • GooglePlacePicker.framework (somente se o seletor de local estiver sendo usado)
    • GoogleMapsCore.framework (somente se o seletor de local estiver sendo usado)
    • GoogleMaps.framework (somente se o seletor de local estiver sendo usado)
    • 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. Escolha o seu projeto, em vez de um destino específico, e abra a guia Build Settings.

  12. Na seção Other Linker Flags, adicione -ObjC. Se essas configurações não estiverem visíveis, altere o filtro da barra Build Settings de Basic para All.

Etapa 3: obter uma chave de API

Para começar a usar o Google Places API for iOS, clique no botão abaixo e acesse um guia do processo de ativação do Google Places API for iOS e de obtenção de uma chave de API.

Obter uma chave

Como alternativa, siga as etapas a seguir para obter uma chave de API:

  1. Acesse o Google API Console.
  2. Crie ou selecione um projeto.
  3. Clique em Continue para ativar o Google Places API for iOS.
  4. Na página Credentials, obtenha uma chave de API.
    Observação: Se você tem uma chave restrita ao iOS, use-a. É possível usar a mesma chave com todos os aplicativos iOS dentro do mesmo projeto.
  5. Na caixa de diálogo que exibe a chave de API, selecione Restrict key para adicionar uma restrição para iOS à chave de API.
  6. Na seção Restrictions, selecione iOS apps e digite o identificador geral do seu aplicativo. Exemplo: com.example.helloplaces.
  7. Clique em Save.

    A nova chave para iOS é exibida na lista de chaves de API do projeto. Uma chave de API é uma string de caracteres, similar a:

    AIzaSyBdVl-cTICSwYKrZ95SuvNw7dbMuDt1KG0

Também é possível procurar uma chave existente no Google API Console.

Para saber mais sobre como usar o Google API Console, consulte a Ajuda do API Console.

Etapa 4: adicionar a chave de API ao aplicativo

Os exemplos de código a seguir mostram como adicionar a chave de API a um aplicativo.

Swift

Adicione a chave de API ao AppDelegate.swift da seguinte forma:

  • Adicione a seguinte declaração import:
    import GooglePlaces
  • Adicione o item a seguir ao método application(_:didFinishLaunchingWithOptions:) do aplicativo, substituindo YOUR_API_KEY pela chave de API:
    GMSPlacesClient.provideAPIKey("YOUR_API_KEY")
Objective-C

Adicione sua chave de API ao AppDelegate.m da seguinte maneira:

  • Adicione a seguinte declaração import:
    @import GooglePlaces;
  • Adicione o item a seguir ao método application:didFinishLaunchingWithOptions:, substituindo YOUR_API_KEY pela chave de API:
    [GMSPlacesClient provideAPIKey:@"YOUR_API_KEY"];

Etapa 5: começar a escrever o código

Os exemplos de código a seguir demonstram como obter o local atual e adicionar um widget de IU de seletor de local ao aplicativo.

Obter local atual

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

Adicionar um seletor de local

Os aplicativos de demonstração do SDK fornecidos com a Google Places API for iOS contêm um exemplo de aplicativo para o widget de IU do seletor de local. Para instalar a demonstração do seletor de local, use o comando pod try GooglePlacePicker. Para saber mais, consulte o guia de exemplos de código.

Veja aqui um rápido exemplo explicativo para criar um seletor de local.

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 comentários sobre…