Vous êtes prêt !

Pour passer à l'étape de développement, accédez à notre documentation pour les développeurs.

Activer Google Places API for iOS

Pour commencer, nous allons vous guider à travers la console Google Developers et effectuer deux ou trois petites choses :

  1. Créer ou choisir un projet
  2. Activer Google Places API for iOS
  3. Créer les clés appropriées
Continuer

Premiers pas avec Google Places API for iOS

Suivez les instructions de ce guide pour télécharger Google Places API for iOS, ajouter la bibliothèque et ses dépendances à votre application et obtenir une clé d'API gratuite.

Des notes de version sont disponibles pour chaque version.

Étape 1 : Obtenir la dernière version de Xcode

Pour créer un projet avec Google Places API for iOS, vous avez besoin de la version 7.3 ou ultérieure de Xcode.

Étape 2 : Installer l'API

Utiliser CocoaPods

Google Places API for iOS est disponible sous forme de deux pods CocoaPod. Le premier d'entre eux, GooglePlaces, contient toutes les fonctionnalités de lieu qui ne nécessitent pas de carte (API par programmation et widget IU de saisie semi-automatique), tandis que GooglePlacePicker est un pod distinct contenant un widget pour la recherche et la sélection de lieux sur une carte.

CocoaPods est un gestionnaire de dépendances open source pour les projets Cocoa Swift et Objective-C. Si vous ne possédez pas encore l'outil CocoaPods, installez-le sur macOS en exécutant la commande suivante à partir du terminal. Pour plus de détails, voir le guide de démarrage de CocoaPods.

sudo gem install cocoapods

Créez un fichier Podfile pour Google Places API for iOS et utilisez-le pour installer l'API et ses dépendances :

  1. Si vous n'avez pas encore de projet Xcode, créez-en un immédiatement et enregistrez-le sur votre machine locale. (Si vous n'êtes pas familier du développement iOS, créez une Single View Application.)
  2. Créez un fichier intitulé Podfile dans le répertoire de votre projet. Ce fichier définit les dépendances de votre projet.
  3. Modifiez le fichier Podfile en y ajoutant vos dépendances. Voici un exemple qui indique le nom cible de votre application, et les noms des deux pods fournis avec Places API for iOS (GooglePlacePicker et GoogleMaps ne sont requis que si vous utilisez l'échantillon du sélecteur de lieux) :
    source 'https://github.com/CocoaPods/Specs.git'
    target 'YOUR_APPLICATION_TARGET_NAME_HERE' do
      pod 'GooglePlaces'
      pod 'GooglePlacePicker'
      pod 'GoogleMaps'
    end
  4. Enregistrez le fichier Podfile.
  5. Sur un terminal, accédez au répertoire contenant le fichier Podfile :

    cd <path-to-project>
  6. Exécutez la commande pod install. Les API spécifiées dans le Podfile sont alors installées avec toutes les dépendances associées.

    pod install
  7. Fermez Xcode, et ouvrez (par un double clic) le fichier .xcworkspace de votre projet pour lancer Xcode. À partir de ce moment, vous devez utiliser le fichier .xcworkspace pour ouvrir le projet.

Installer manuellement

Ce guide décrit comment ajouter manuellement le framework GooglePlaces à votre projet et configurer les paramètres de votre build dans Xcode.

  1. Téléchargez les fichiers source SDK :

    GooglePlacePicker-2.0.1 n'est nécessaire que si vous utilisez le sélecteur de lieux.

  2. Décompressez les fichiers source.
  3. Lancez Xcode et ouvrez un projet existant ou créez-en un nouveau. Si vous débutez avec iOS, créez une Single View Application, désactivez Use Storyboards et activez Use Automatic Reference Counting.
  4. Supprimez tous les groupes Maps des précédentes versions de votre projet.
  5. Faites glisser les groupes suivants dans votre projet (lorsque vous y êtes invité(e), sélectionnez Copy items if needed) :
    • GooglePlaces-2.0.1/Frameworks/GooglePlaces.framework
    • GoogleMaps-2.0.1/Subspecs/Base/Frameworks/GoogleMapsBase.framework

    Si vous utilisez le sélecteur de lieux, faites glisser les groupes suivants dans votre projet (en plus des groupes énumérés précédemment) :

    • 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. Cliquez avec le bouton droit de la souris sur GooglePlaces.framework dans votre projet, puis sélectionnez Show In Finder.
  7. Faites glisser GooglePlaces.bundle depuis le dossier Resources dans votre projet. Lorsque vous y êtes invité, vérifiez que l'option Copy items into destination group's folder n'est pas sélectionnée.
  8. Si vous utilisez le sélecteur de lieux, répétez l'étape précédente et faites glisser les fichiers GoogleMaps.bundle et GooglePlacePicker.bundle dans votre projet. Ces fichiers se trouvent respectivement dans GoogleMaps.framework et GooglePlacePicker.framework.
  9. Sélectionnez votre projet dans Project Navigator, puis choisissez la cible de votre application.
  10. Ouvrez l'onglet Build Phases, puis dans Link Binary with Libraries, ajoutez les frameworks suivants :
    • GooglePlaces.framework
    • GoogleMapsBase.framework
    • GooglePlacePicker.framework (uniquement si vous utilisez le sélecteur de lieux)
    • GoogleMapsCore.framework (uniquement si vous utilisez le sélecteur de lieux)
    • GoogleMaps.framework (uniquement si vous utilisez le sélecteur de lieux)
    • 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. Choisissez votre projet au lieu de sélectionner une cible spécifique, et ouvrez l'onglet Build Settings.

  12. Dans la section Other Linker Flags, ajoutez -ObjC. Si ces paramètres ne sont pas visibles, changez le filtre dans la barre Build Settings de Basic à All.

Étape 3 : Obtenir une clé d'API

Pour commencer à utiliser Google Places API for iOS, cliquez sur le bouton ci-dessous pour obtenir de l'aide tout au long du processus d'activation de Google Places API for iOS et d'obtention d'une clé d'API.

Obtenir une clé

Vous pouvez également obtenir une clé d'API comme suit :

  1. Allez à la Google API Console.
  2. Créez ou sélectionnez un projet.
  3. Cliquez sur Continue pour activer Google Places API for iOS.
  4. Sur la page Credentials, obtenez une clé d'API.
    Remarque : Si vous avez une clé avec des restrictions pour iOS, vous pouvez l'utiliser. Vous pouvez utiliser la même clé avec n'importe laquelle de vos applications iOS au sein du même projet.
  5. Dans la boîte de dialogue affichant la clé d'API, sélectionnez Restrict key afin de définir une restriction pour iOS sur la clé d'API.
  6. Dans la section Restrictions, sélectionnez iOS apps, puis saisissez l'identifiant de groupe de votre application. Par exemple : com.exemple.helloplaces.
  7. Cliquez sur Save.

    Votre nouvelle clé iOS apparaît dans la liste des clés d'API de votre projet. Une clé d'API est une chaîne de caractères semblable à ce qui suit :

    AIzaSyBdVl-cTICSwYKrZ95SuvNw7dbMuDt1KG0

Vous pouvez également rechercher une clé existante dans la Google API Console.

Pour plus d'informations sur l'utilisation de la Google API Console, voir l'aide de la API Console.

Étape 4 : Ajouter la clé d'API à votre application

Les exemples de code suivants montrent comment ajouter la clé d'API à une application.

Swift

Ajoutez votre clé d'API à AppDelegate.swift comme suit :

  • Ajoutez la déclaration d'importation suivante :
    import GooglePlaces
  • Ajoutez ce qui suit à la méthode application(_:didFinishLaunchingWithOptions:) en remplaçant YOUR_API_KEY par votre clé d'API :
    GMSPlacesClient.provideAPIKey("YOUR_API_KEY")
Objective-C

Ajoutez votre clé d'API à AppDelegate.m comme suit :

  • Ajoutez la déclaration d'importation suivante :
    @import GooglePlaces;
  • Ajoutez ce qui suit à la méthode application:didFinishLaunchingWithOptions: en remplaçant YOUR_API_KEY par votre clé d'API :
    [GMSPlacesClient provideAPIKey:@"YOUR_API_KEY"];

Étape 5 : Commencer à rédiger le code

Les échantillons de code suivants montrent comment obtenir le lieu actuel et ajouter un widget IU Sélecteur de lieux à votre application.

Obtenir le lieu actuel

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

Ajouter un sélecteur de lieux

Les applications de démo de SDK fournies avec Google Places API for iOS incluent un exemple d'application pour le widget IU Sélecteur de lieux. Pour installer la démo du sélecteur de lieux, utilisez la commande pod try GooglePlacePicker. Pour plus de détails, voir le guide sur les échantillons de code.

Voici un échantillon qui présente rapidement la création d'un sélecteur de lieux.

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

Envoyer des commentaires concernant…