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 :
- 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.)
- Créez un fichier intitulé
Podfiledans le répertoire de votre projet. Ce fichier définit les dépendances de votre projet. - Modifiez le fichier
Podfileen 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 (GooglePlacePickeretGoogleMapsne 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
- Enregistrez le fichier
Podfile. Sur un terminal, accédez au répertoire contenant le fichier
Podfile:cd <path-to-project>
Exécutez la commande
pod install. Les API spécifiées dans lePodfilesont alors installées avec toutes les dépendances associées.pod install
Fermez Xcode, et ouvrez (par un double clic) le fichier
.xcworkspacede votre projet pour lancer Xcode. À partir de ce moment, vous devez utiliser le fichier.xcworkspacepour 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.
- Téléchargez les fichiers source SDK :
GooglePlacePicker-2.0.1 n'est nécessaire que si vous utilisez le sélecteur de lieux.
- Décompressez les fichiers source.
- 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.
- Supprimez tous les groupes Maps des précédentes versions de votre projet.
- 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.frameworkGoogleMaps-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.frameworkGoogleMaps-2.0.1/Subspecs/Maps/Frameworks/GoogleMapsCore.frameworkGoogleMaps-2.0.1/Subspecs/Maps/Frameworks/GoogleMaps.framework
- Cliquez avec le bouton droit de la souris sur
GooglePlaces.frameworkdans votre projet, puis sélectionnez Show In Finder. - Faites glisser
GooglePlaces.bundledepuis le dossierResourcesdans 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. - Si vous utilisez le sélecteur de lieux, répétez l'étape précédente et faites glisser les fichiers
GoogleMaps.bundleetGooglePlacePicker.bundledans votre projet. Ces fichiers se trouvent respectivement dansGoogleMaps.frameworketGooglePlacePicker.framework. - Sélectionnez votre projet dans Project Navigator, puis choisissez la cible de votre application.
- Ouvrez l'onglet Build Phases, puis dans Link Binary with Libraries, ajoutez les frameworks suivants :
GooglePlaces.frameworkGoogleMapsBase.frameworkGooglePlacePicker.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.frameworkCoreData.frameworkCoreGraphics.frameworkCoreLocation.frameworkCoreText.frameworkGLKit.frameworkImageIO.frameworklibc++.tbdlibz.tbdOpenGLES.frameworkQuartzCore.frameworkSystemConfiguration.frameworkUIKit.framework
Choisissez votre projet au lieu de sélectionner une cible spécifique, et ouvrez l'onglet Build Settings.
- 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 :
- Allez à la Google API Console.
- Créez ou sélectionnez un projet.
- Cliquez sur Continue pour activer Google Places API for iOS.
- 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. - 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.
- Dans la section Restrictions, sélectionnez iOS apps, puis saisissez l'identifiant de groupe de votre application. Par exemple :
com.exemple.helloplaces. - 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.
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")
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