Все готово!

Прежде чем приступить к разработке, ознакомьтесь с документацией для разработчиков.

Активация Google Places API for iOS

Чтобы помочь вам освоиться, мы покажем, как выполнить некоторые необходимые действия в консоли разработчика Google:

  1. Создание или выбор проекта
  2. Активация Google Places API for iOS
  3. Создание соответствующих ключей

Начало работы с Places API for iOS

Следуйте инструкциям настоящего руководства по загрузке Google Places API for iOS, добавлению библиотеки и ее зависимостей в ваше приложение, а также получению бесплатного ключа API.

Примечания к выпуску публикуются для каждого выпуска.

Шаг 1. Установите последнюю версию Xcode

Для создания проекта с использованием Google Places API for iOS требуется Xcode 7.3 или более новой версии.

Шаг 2. Установите API

Использование CocoaPods

Google Places API for iOS предоставляется как две группы контейнеров CocoaPod. Первая из них, GooglePlaces, содержит все функции адресов, для которых не требуется карта (программные API и виджет подсказки мест для пользовательского интерфейса), а отдельная группа контейнеров GooglePlacePicker содержит виджет для поиска и выделения мест на карте.

CocoaPods – диспетчер зависимостей с открытым исходным кодом для проектов Cocoa на языках Swift и Objective-C. Если инструмент CocoaPods у вас еще не установлен, установите его в macOS, выполнив следующую команду через терминал: Дополнительную информацию см. в руководстве по началу работы с CocoaPods.

sudo gem install cocoapods

Создайте файл Podfile для Google Places API for iOS и используйте его для установки API и его зависимостей.

  1. Если у вас еще нет проекта Xcode, создайте его и сохраните на локальном компьютере. (Если вы раньше не занимались разработкой для iOS, создайте приложение с одним представлением).
  2. Создайте файл с именем Podfile в каталоге своего проекта. Этот файл содержит определения зависимостей проекта.
  3. Откройте Podfile и добавьте в него свои зависимости. В этом примере указано имя вашего приложения, а также имена обеих групп контейнеров, получаемых вместе с Places API for iOS (GooglePlacePicker и GoogleMaps требуются только в том случае, если вы используете пример с виджетом выбора мест):
    source 'https://github.com/CocoaPods/Specs.git'
    target 'YOUR_APPLICATION_TARGET_NAME_HERE' do
      pod 'GooglePlaces'
      pod 'GooglePlacePicker'
      pod 'GoogleMaps'
    end
  4. Сохраните Podfile.
  5. Откройте окно терминала и перейдите в каталог, содержащий Podfile:

    cd <path-to-project>
  6. Выполните команду pod install. Эта команда устанавливает API, указанные в Podfile, а также все относящиеся к ним зависимости.

    pod install
  7. Закройте проект Xcode, а затем откройте (двойным щелчком) файл .xcworkspace вашего проекта для запуска Xcode. С этого момента для открытия проекта необходимо использовать файл .xcworkspace.

Установка вручную

В этом руководстве разъясняется, как вручную добавить платформу GooglePlaces в проект и настроить параметры сборки в Xcode.

  1. Загрузите исходные файлы SDK:

    GooglePlacePicker-2.0.1 требуется, только если вы используете выбор мест.

  2. Распакуйте исходные файлы.
  3. Запустите Xcode, после чего либо откройте существующий проект, либо создайте новый. Если вы раньше не занимались разработкой для iOS, создайте приложение с одним представлением, отключите режим Use Storyboards и включите режим Use Automatic Reference Counting.
  4. Удалите все комплекты пакеты Google Maps предыдущих версий из своего проекта.
  5. Перенесите следующие пакеты в свой проект (при появлении соответствующего запроса выберите Copy items if needed):
    • GooglePlaces-2.0.1/Frameworks/GooglePlaces.framework
    • GoogleMaps-2.0.1/Subspecs/Base/Frameworks/GoogleMapsBase.framework

    Если вы используете выбор мест, перенесите в свой проект следующие пакеты (в дополнение к вышеперечисленным):

    • 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. В своем проекте щелкните правой кнопкой GooglePlaces.framework и выберите Show In Finder.
  7. Перенесите GooglePlaces.bundle из папки Resources в свой проект. При появлении соответствующего запроса убедитесь, что режим Copy items into destination group's folder не выбран.
  8. Если вы используете выбор мест, повторите предыдущий шаг и перенесите в проект файлы GoogleMaps.bundle и GooglePlacePicker.bundle. Их можно найти в GoogleMaps.framework и GooglePlacePicker.framework соответственно.
  9. В Project Navigator найдите свой проект и выберите назначение своего приложения.
  10. Перейдите на вкладку Build Phases и в Link Binary with Libraries добавьте следующие компоненты:
    • GooglePlaces.framework
    • GoogleMapsBase.framework
    • GooglePlacePicker.framework (только если используется выбор мест)
    • GoogleMapsCore.framework (только если используется выбор мест)
    • GoogleMaps.framework (только если используется выбор мест)
    • 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. Вместо конкретного назначения выберите свой проект и перейдите на вкладку Build Settings.

  12. В разделе Other Linker Flags добавьте -ObjC. Если эти параметры не отображаются, на панели Build Settings измените фильтр – вместо Basic выберите All.

Шаг 3. Получите ключ API

Для начала использования Google Places API for iOS нажмите кнопку ниже, чтобы перейти к инструкциям по активации Google Places API for iOS и получению ключа API.

Получить ключ

В качестве альтернативы выполните следующие действия, чтобы получить ключ API.

  1. Перейдите в Google API Console.
  2. Создайте или выберите проект.
  3. Нажмите Continue для активации Google Places API for iOS.
  4. На странице Учетные данные выберите Ключ API.
    Примечание. Если у вас есть ключ с ограничениями для iOS, можете использовать этот ключ. В одном проекте можно использовать один и тот же ключ с любыми приложениями для iOS.
  5. В окне с отображаемым ключом API выберите Restrict key, чтобы установить ограничение iOS для ключа API.
  6. В разделе Restrictions выберите iOS apps и укажите идентификатор пакета своего приложения. Например: com.example.helloplaces.
  7. Нажмите Save.

    Новый ключ для iOS появится в списке ключей API вашего проекта. Ключ API представляет собой строку символов, которая выглядит примерно так:

    AIzaSyBdVl-cTICSwYKrZ95SuvNw7dbMuDt1KG0

Также можно выполнить поиск существующего ключа в Google API Console.

Дополнительную информацию об использовании Google API Console см. в Справке API Console.

Шаг 4. Добавьте ключ API в свое приложение

В следующих примерах кода показано, как добавить ключ API в приложение.

Swift

Добавьте свой ключ API в файл AppDelegate.swift, как показано ниже:

  • Добавьте следующую команду импорта:
    import GooglePlaces
  • Добавьте в метод application(_:didFinishLaunchingWithOptions:) следующую строку, заменив YOUR_API_KEY своим ключом API:
    GMSPlacesClient.provideAPIKey("YOUR_API_KEY")
Objective-C

Добавьте свой ключ API в файл AppDelegate.m, как показано ниже:

  • Добавьте следующую команду импорта:
    @import GooglePlaces;
  • Добавьте в метод application:didFinishLaunchingWithOptions: следующую строку, заменив YOUR_API_KEY своим ключом API:
    [GMSPlacesClient provideAPIKey:@"YOUR_API_KEY"];

Шаг 5. Подготовка программного кода

В следующих примерах кода показано, как узнать текущее место и добавить виджет выбора мест в приложение.

Получение информации о текущем месте

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

Добавление средства выбора мест

В числе демонстрационных приложений SDK в комплекте Google Places API for iOS имеется пример приложения виджета выбора мест. Для установки демонстрационного приложения с виджетом выбора мест используйте команду pod try GooglePlacePicker. Дополнительную информацию см. в руководстве по примерам кода.

Ниже приведены краткие примеры создания виджета выбора мест.

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

Оставить отзыв о...

Текущей странице
location_on
Google Places API for iOS