모든 준비를 마쳤습니다!

개발을 시작하려면 개발자 문서로 이동하세요.

Google Places API for iOS 활성화

개발을 시작하기 위해 Google Developers Console에서 우선적으로 해야 할 일을 몇 가지 소개하겠습니다.

  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를 사용하여 프로젝트를 빌드하려면 Xcode7.3 버전 이상이 필요합니다.

2단계: API 설치

CocoaPods 사용

Google Places API for iOS는 두 개의 CocoaPod pod로 제공됩니다. 첫 번째 pod인 GooglePlaces에는 모든 장소 기능이 포함되어 있으며, 지도가 필요 없습니다(프로그램형 API 및 자동완성 UI 위젯). GooglePlacePicker는 지도에서 장소를 검색하고 선택하는 위젯이 포함된 별개의 pod입니다.

CocoaPods는 Swift 및 Objective-C Cocoa 프로젝트용 오픈 소스 종속성 관리자입니다. 아ocoaPods 도구가 아직 없다면 터미널에서 다음 명령을 실행하여 macOS에 설치합니다. 자세한 내용은 CocoaPods 시작 가이드를 참조하세요.

sudo gem install cocoapods

Google Places API for iOS의 Podfile을 생성하고 이를 사용하여 API와 종속성을 설치합니다.

  1. 아직 Xcode 프로젝트가 없으면 지금 생성하고 로컬 시스템에 저장합니다. (iOS 개발이 처음인 경우, Single View Application을 만듭니다.)
  2. 프로젝트 디렉토리에 Podfile이라는 이름의 파일을 만듭니다. 이 파일은 프로젝트의 종속성을 정의합니다.
  3. Podfile을 편집하고 종속성을 추가합니다. 다음은 애플리케이션 대상 이름과 Places API for iOS와 함께 제공되는 두 개의 pod 이름을 지정하는 예시입니다. (GooglePlacePickerGoogleMaps는 장소 선택기 샘플을 사용할 때만 필요합니다.)
    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 명령을 실행합니다. 그러면 Podfile에 지정된 API가 설치되고, 해당 종속성이 있는 경우 함께 설치됩니다.

    pod install
  7. Xcode를 닫은 다음 (마우스를 두 번 클릭하여) 프로젝트의 .xcworkspace 파일을 열고 Xcode를 실행합니다. 지금부터는 .xcworkspace 파일을 사용하여 프로젝트를 열어야 합니다.

수동 설치

이 가이드에서는 GooglePlaces 프레임워크를 프로젝트에 수동으로 추가하고 Xcode에서 빌드 설정을 구성하는 방법을 보여줍니다.

  1. SDK 소스 파일을 다운로드합니다:

    GooglePlacePicker-2.0.1은 장소 선택기를 사용할 때만 필요합니다.

  2. 소스 파일의 압축을 풉니다.
  3. Xcode를 시작하고 기존 프로젝트를 열거나 새 프로젝트를 생성합니다. iOS를 처음 사용하는 경우, Single View Application을 만들고 Use Storyboards를 비활성화하고 Use Automatic Reference Counting을 활성화합니다.
  4. 프로젝트의 이전 릴리스에서 모든 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.bundleResources 폴더에서 프로젝트로 드래그합니다. 메시지가 나타나면, Copy items into destination group's folder가 선택되지 않았는지 확인합니다.
  8. 장소 선택기를 사용하는 경우 이전 단계를 반복하고 GoogleMaps.bundleGooglePlacePicker.bundle 파일을 프로젝트로 드래그합니다. 이 파일들은 각각 GoogleMaps.frameworkGooglePlacePicker.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로 변경합니다.

4단계: 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. Credentials 페이지에서 API 키를 가져옵니다.
    참고: iOS 제한이 있는 키가 있으면, 이 키를 사용할 수도 있습니다. 동일 프로젝트 내의 모든 iOS 애플리케이션에서 동일 키를 사용할 수 있습니다.
  5. API 키가 표시된 대화상자에서, Restrict key를 선택하여 API 키에 iOS 제한을 설정합니다.
  6. Restrictions 섹션에서 iOS apps를 선택한 다음, 앱의 번들 식별자를 입력합니다. 예: com.example.helloplaces.
  7. Save를 클릭합니다.

    프로젝트의 API 키 목록에 새 iOS 키가 나타납니다. API 키는 다음과 같은 문자열입니다.

    AIzaSyBdVl-cTICSwYKrZ95SuvNw7dbMuDt1KG0

Google API Console에서 기존 키를 찾을 수도 있습니다.

Google API Console 사용에 대한 자세한 내용은 API Console 도움말을 참조하세요.

5단계: 애플리케이션에 API 키 추가

다음 코드 예시는 API 키를 애플리케이션에 추가하는 방법을 보여줍니다.

Swift

다음과 같이 API 키를 AppDelegate.swift에 추가합니다.

  • 다음 import 문을 추가합니다.
    import GooglePlaces
  • 다음을 application(_:didFinishLaunchingWithOptions:) 메서드에 추가하고 YOUR_API_KEY를 자신의 API 키로 대체합니다.
    GMSPlacesClient.provideAPIKey("YOUR_API_KEY")
Objective-C

다음과 같이 API 키를 AppDelegate.m에 추가합니다.

  • 다음 import 문을 추가합니다.
    @import GooglePlaces;
  • 다음을 application:didFinishLaunchingWithOptions: 메서드에 추가하고 YOUR_API_KEY를 자신의 API 키로 대체합니다.
    [GMSPlacesClient provideAPIKey:@"YOUR_API_KEY"];

5단계: 코드 작성 시작

다음 코드 샘플은 현재 장소를 가져오고 장소 선택기 UI 위젯을 앱에 추가하는 방법을 보여줍니다.

현재 장소 가져오기

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

장소 선택기 추가

Google Places API for iOS와 함께 제공되는 SDK 데모 앱에는 장소 선택기 UI 위젯용 샘플 앱이 포함되어 있습니다. 장소 선택기 데모를 설치하려면 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

다음에 대한 의견 보내기...