以上で完了です。

開発を始めるには、デベロッパー ドキュメント をご覧下さい。

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 を使ってプロジェクトをビルドするには、バージョン 7.3 以降の Xcode が必要です。

ステップ 2: API をインストールする

CocoaPods を使う

Google Places API for iOS は、CocoaPod の 2 つの pod として利用できます。最初の pod (GooglePlaces)には、マップを必要としないすべてのプレイス機能(プログラミング用 API、オートコンプリート UI ウィジェット)が含まれています。もう 1 つの pod (GooglePlacePicker)には、マップからプレイスを検索して選択するウィジェットが含まれています。

CocoaPods は、Swift と Objective-C の Cocoa プロジェクトで依存関係を管理するためのオープンソースのツールです。CocoaPods ツールを持っていない場合は、ターミナルから以下のコマンドを実行して、macOS 上に CocoaPods ツールをインストールします。詳細については、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 に付属する 2 つの pod の名前を指定する例を次に示します(GooglePlacePickerGoogleMaps が必要なのは、Place Picker サンプルを使用している場合のみです)。
    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 が必要なのは、Place Picker を使用している場合のみです。

  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

    Place Picker を使用している場合、(上記のバンドルに加えて)次のバンドルをプロジェクトにドラッグします。

    • 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. Place Picker を使用している場合は、前のステップを繰り返し、GoogleMaps.bundle ファイルと GooglePlacePicker.bundle ファイルをプロジェクトにドラッグします。これらのファイルはそれぞれ、GoogleMaps.frameworkGooglePlacePicker.framework にあります。
  9. プロジェクト ナビゲータでプロジェクトを選択し、アプリのターゲットを選択します。
  10. [Build Phases] タブを開き、[Link Binary with Libraries] で次のフレームワークを追加します。
    • GooglePlaces.framework
    • GoogleMapsBase.framework
    • GooglePlacePicker.framework (Place Picker を使用している場合のみ)
    • GoogleMapsCore.framework (Place Picker を使用している場合のみ)
    • GoogleMaps.framework (Place Picker を使用している場合のみ)
    • 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. [Credentials] ページで、API キーを取得します。
    注: iOS 限定のキーがある場合は、そのキーを使用することもできます。同じプロジェクト内で任意の iOS アプリに対して同じキーを使用できます。
  5. API キーが表示されているダイアログで、[Restrict key] を選択して、API キーを iOS 限定にします。
  6. [Restrictions] セクションで [iOS apps] を選択してから、アプリのバンドル識別子を入力します。例: com.example.helloplaces
  7. [Save] をクリックします。

    プロジェクトの API キーリストに、新しい iOS API キーが表示されます。API キーは次のような文字列です。

    AIzaSyBdVl-cTICSwYKrZ95SuvNw7dbMuDt1KG0

Google API Console で、既存のキーを探すこともできます。

Google API Console の使用に関する詳細については、API Console のヘルプをご覧ください。

ステップ 4: アプリに API キーを追加する

次のコード例は、アプリに API キーを追加する方法を示しています。

Swift

AppDelegate.swift に API キーを以下のように追加します。

  • 以下のインポート文を追加します。
    import GooglePlaces
  • 以下の内容を application(_:didFinishLaunchingWithOptions:) メソッドに追加して、YOUR_API_KEY の部分を自分の API キーに置き換えます。
    GMSPlacesClient.provideAPIKey("YOUR_API_KEY")
Objective-C

以下のように AppDelegate.m に API キーを追加します。

  • 以下のインポート文を追加します。
    @import GooglePlaces;
  • 以下の内容を application:didFinishLaunchingWithOptions: メソッドに追加して、YOUR_API_KEY の部分を自分の API キーに置き換えます。
    [GMSPlacesClient provideAPIKey:@"YOUR_API_KEY"];

ステップ 5: コーディングを開始する

次のコードサンプルは、現在のプレイスを取得する方法と、アプリに Place Picker 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

Place Picker を追加する

Google Places API for iOS に含まれる SDK のデモアプリの中には、Place Picker UI ウィジェットのサンプルアプリもあります。Place Picker デモをインストールするには、pod try GooglePlacePicker コマンドを使用します。詳細については、コードサンプルをご覧ください。

以下は Place Picker を作成するための初心者用の簡単なサンプルです。

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

フィードバックを送信...