Es kann losgehen!

Bevor Sie mit der Entwicklung beginnen, lesen Sie bitte unsere Entwicklerdokumentation.

Die Google Places API for iOS aktivieren

Zum Einstieg führen wir Sie durch die Google Developers Console, wo Sie vorab Folgendes tun müssen:

  1. Ein Projekt erstellen oder auswählen
  2. Die Google Places API for iOS aktivieren
  3. Zugehörige Schlüssel erstellen
Weiter

Erste Schritte mit Places API for iOS

Befolgen Sie die Anleitung in diesem Leitfaden, um die Google Places API for iOS herunterzuladen, Ihrer App die Bibliothek und ihre Abhängigkeiten hinzuzufügen und einen kostenlosen API-Schlüssel anzufordern.



Versionshinweise sind für jede Version verfügbar.

Schritt 1: Neueste Version von Xcode herunterladen

Zur Erstellung eines Projekts mit der Google Places API for iOS benötigen Sie Xcode Version 7.3 oder höher.

Schritt 2: API installieren

Mit CocoaPods

Die Google Places API for iOS ist in der Form von zwei CocoaPod-Pods verfügbar. Der erste Pod heißt GooglePlaces und enthält alle Funktionen für Orte, die keine Karte erfordern (programmatische APIs und das UI-Widget zur automatischen Vervollständigung). Der zweite, separate Pod ist GooglePlacePicker, der ein Widget zur Suche nach Orten und Auswahl der Orte auf einer Karte enthält.

CocoaPods ist ein Open-Source-Abhängigkeitsmanager für Cocoa-Projekte in Swift und Objective-C. Falls Sie das Tool CocoaPods noch nicht haben, installieren Sie es unter macOS, indem Sie den folgenden Befehl über das Terminal ausführen. Weitere Informationen finden Sie im Leitfaden zu den ersten Schritten mit CocoaPods.

sudo gem install cocoapods

Erstellen Sie eine Podfile für Google Places API for iOS, und verwenden Sie sie, um die API und ihre Abhängigkeiten zu installieren:

  1. Falls Sie kein Xcode-Projekt haben, erstellen Sie eines, und speichern Sie es auf dem lokalen Rechner. (Falls Sie noch keine Erfahrung in der iOS-Entwicklung haben, erstellen Sie eine Single View Application.)
  2. Erstellen Sie in Ihrem Projektverzeichnis eine Datei mit dem Namen Podfile. In dieser Datei sind die Abhängigkeiten Ihres Projekts definiert.
  3. Bearbeiten Sie die Podfile, und fügen Sie Ihre Abhängigkeiten hinzu. Nachfolgend finden Sie ein Beispiel, in dem der Anwendungszielname und die Namen der beiden in der Places API for iOS enthaltenen Pods angegeben sind (GooglePlacePicker und GoogleMaps sind nur erforderlich, wenn Sie das Ortsauswahl-Beispiel verwenden):
    source 'https://github.com/CocoaPods/Specs.git'
    target 'YOUR_APPLICATION_TARGET_NAME_HERE' do
      pod 'GooglePlaces'
      pod 'GooglePlacePicker'
      pod 'GoogleMaps'
    end
  4. Speichern Sie die Podfile.
  5. Öffnen Sie ein Terminal, und navigieren Sie zum Verzeichnis, das die Podfile enthält:

    cd <path-to-project>
  6. Führen Sie den Befehl pod install aus. Auf diese Weise installieren Sie die APIs, die in der Podfile angegeben sind, zusammen mit eventuellen Abhängigkeiten.

    pod install
  7. Schließen Sie Xcode, und öffnen Sie (per Doppelklick) die Datei .xcworkspace des Projekts, um Xcode zu starten. Von jetzt an müssen Sie die Datei .xcworkspace zum Öffnen des Projekts verwenden.

Manuelle Installation

In diesem Leitfaden wird gezeigt, wie Sie das GooglePlaces-Framework Ihrem Projekt manuell hinzufügen und Ihre Build-Einstellungen in Xcode konfigurieren.

  1. Laden Sie die SDK-Quelldaten herunter:

    GooglePlacePicker-2.0.1 ist nur erforderlich, wenn Sie die Ortsauswahl verwenden.

  2. Entpacken Sie die Quelldateien.
  3. Starten Sie Xcode und öffnen Sie entweder ein vorhandenes Projekt oder erstellen Sie ein neues Projekt. Wenn iOS für Sie noch Neuland ist, erstellen Sie eine Single View Application. Deaktivieren Sie Use Storyboards und aktivieren Sie Use Automatic Reference Counting.
  4. Entfernen Sie Maps-Bündel aus vorherigen Releases aus Ihrem Projekt.
  5. Ziehen Sie die folgenden Bündel in Ihr Projekt (wählen Sie bei entsprechender Aufforderung Copy items if needed):
    • GooglePlaces-2.0.1/Frameworks/GooglePlaces.framework
    • GoogleMaps-2.0.1/Subspecs/Base/Frameworks/GoogleMapsBase.framework

    Wenn Sie die Ortsauswahl verwenden, ziehen Sie die folgenden Bündel (zusätzlich zu den oben aufgeführten Bündeln) in Ihr Projekt:

    • 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. Klicken Sie mit der rechten Maustaste in Ihrem Projekt auf GooglePlaces.framework und wählen Sie Show In Finder aus.
  7. Ziehen Sie das GooglePlaces.bundle aus dem Ordner Resources in Ihr Projekt. Stellen Sie auf die entsprechende Aufforderung hin sicher, dass Copy items into destination group's folder nicht ausgewählt ist.
  8. Falls Sie die Ortsauswahl verwenden, wiederholen Sie den vorherigen Schritt und ziehen Sie die Dateien GoogleMaps.bundle und GooglePlacePicker.bundle in Ihr Projekt. Diese Dateien befinden sich im GoogleMaps.framework bzw. im GooglePlacePicker.framework.
  9. Wählen Sie im Projektnavigator Ihr Projekt aus und wählen Sie das Ziel Ihrer Anwendung.
  10. Öffnen Sie den Tab Build Phases und fügen Sie innerhalb von Link Binary with Libraries die folgenden Frameworks hinzu:
    • GooglePlaces.framework
    • GoogleMapsBase.framework
    • GooglePlacePicker.framework (nur bei Verwendung der Ortsauswahl)
    • GoogleMapsCore.framework (nur bei Verwendung der Ortsauswahl)
    • GoogleMaps.framework (nur bei Verwendung der Ortsauswahl)
    • 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. Wählen Sie Ihr Projekt (und nicht ein spezielles Ziel) und öffnen Sie den Tab Build Settings.

  12. Fügen Sie im Abschnitt Other Linker Flags -ObjC hinzu. Wenn diese Einstellungen nicht sichtbar sind, ändern Sie den Filter in der Leiste Build Settings von Basic zu All.

Schritt 3: API-Schlüssel anfordern



Für die ersten Schritte bei der Verwendung von Google Places API for iOS klicken Sie auf die folgende Schaltfläche. Nun werden Sie durch den Vorgang zur Aktivierung der Google Places API for iOS und zur Anforderung eines API-Schlüssels geleitet.

Schlüssel anfordern

Alternativ können Sie auch wie folgt einen API-Schlüssel anfordern:

  1. Navigieren Sie zu Google API Console.
  2. Ein Projekt erstellen oder auswählen
  3. Klicken Sie auf Continue, um die Google Places API for iOS zu aktivieren.
  4. Fordern Sie auf der Seite Credentials einen API-Schlüssel an.
    Hinweis: Wenn Sie einen Schlüssel mit iOS-Einschränkungen besitzen, können Sie diesen Schlüssel verwenden. Denselben Schlüssel können Sie für alle Ihre iOS-Anwendungen im selben Projekt verwenden.
  5. Wählen Sie im kleinen Fenster mit dem API-Schlüssel die Option Restrict key, um für den API-Schlüssel eine iOS-Einschränkung festzulegen.
  6. Wählen Sie im Abschnitt Restrictions die Option iOS apps und geben Sie dann die Bündelkennung Ihrer App ein. Beispiel: com.example.helloplaces.
  7. Klicken Sie auf Save.

    Ihr neuer iOS-Schlüssel wird in der Liste der API-Schlüssel für Ihr Projekt angezeigt. Ein API-Schlüssel ist eine Zeichenfolge, die in etwa wie folgt aussieht:

    AIzaSyBdVl-cTICSwYKrZ95SuvNw7dbMuDt1KG0

Sie können auch nach einem vorhandenen Schlüssel in Google API Console suchen.

Weitere Informationen zur Verwendung der Google API Console finden Sie in der Hilfe zur API Console.

Schritt 4. API-Schlüssel der Anwendung hinzufügen

Den folgenden Codebeispielen können Sie entnehmen, wie der API-Schlüssel einer Anwendung hinzugefügt wird.

Swift

Fügen Sie den API-Schlüssel AppDelegate.swift wie folgt Ihrer Datei hinzu:

  • Fügen Sie die folgende Importanweisung hinzu:
    import GooglePlaces
  • Fügen Sie der Methode application(_:didFinishLaunchingWithOptions:) Folgendes hinzu und ersetzen Sie dabei YOUR_API_KEY durch Ihren API-Schlüssel:
    GMSPlacesClient.provideAPIKey("YOUR_API_KEY")
Objective-C

Fügen Sie den API-Schlüssel zu Ihrer AppDelegate.m wie folgt hinzu:

  • Fügen Sie die folgende Importanweisung hinzu:
    @import GooglePlaces;
  • Fügen Sie folgenden Code zur Methode application:didFinishLaunchingWithOptions: hinzu, um YOUR_API_KEY durch Ihren API-Schlüssel zu ersetzen:
    [GMSPlacesClient provideAPIKey:@"YOUR_API_KEY"];

Schritt 5: Erste Schritte im Codeschreiben

Die folgenden Codebeispiele veranschaulichen, wie Sie den aktuellen Ort abrufen und Ihrer App ein Ortsauswahl-UI-Widget hinzufügen.

Aktuellen Ort anfordern

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

Ortsauswahl hinzufügen

Die SDK-Demo-Apps, die mit Google Places API for iOS bereitgestellt werden, enthalten eine Beispiel-App für das UI-Widget Ortsauswahl. Installieren Sie die Ortsauswahl-Demo mit dem Befehl pod try GooglePlacePicker. Weitere Informationen finden Sie im Leitfaden zu Beispielcodes.

Nachfolgend finden Sie eine kurzes Einführungsbeispiel zum Erstellen einer Ortsauswahl.

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

Feedback geben zu...

location_on
Google Places API for iOS