2013/02/24

Google Mapを組み込む - [開発] - Google Maps SDK for iOS

ついにGoogle Maps SDK for iOSのAPIキーが利用できるようになったので、サンプルアプリを作ってGoogke Mapを組み込んでみた。
これで、不評のApple Mapではなく、これまで慣れ親しんだGoogle Mapが利用できるようになる。
たぶん次回のiOSのアップデートでApple Mapもだいぶ良くなるはずなのだが。。。



必要なもの

プロジェクトをGoogle Mapを組み込むには、SDKとAPKキーがあればよい。
APIキーを作成するためには、Googleアカウントが必要になる。
またAPIキーを作成する際に、アプリを登録する必要があるので、「bundle identifiers」を決めておく。

1. Google Maps SDK for iOSを入手

現時点で、Google Maps SDK for iOSの最新バージョンは1.1.0となる。(2013月2月21日)

こちらからダウンロードする。
zipファイルを保存する。


リンク切れの場合は、本家サイトから。
https://developers.google.com/maps/documentation/ios/start

2. MapsAPIキーの取得


MapsAPIキーを利用しないで、Google Mapsを利用するにはURL Schemeを利用する。URL Schemeに関しては「URL Scheme でアプリ起動 - [開発] - Google Maps SDK for iOS」を参照。

以下の手順でAPIを取得する。
  1. Google APIs ConsoleからAPIプロジェクトを作成する
  2. APIプロジェクトの「Services」を選択し、「Google Maps SDK for iOS」を有効にする
  3. 「API Access」を選択し、「Create new iOS Key」をクリック
  4. Google Mapsを組み込むアプリのBundle identifiersを入力
  5. 「Create」ボタンをクリック
  6. 「API Access」に「Key for iOS apps (with bundle identifiers)」項目に40文字のAPIキーが作成される

Google APIs Console

はじめてGoogle の「Google APIs Console」を利用する場合は以下でプロジェクトを作成する。



「Servies」の項目で「Google Maps SDK for iOS」を有効に。





「API Access」の項目でiOS Keyを作成し、Bundle identifiersを登録する。


iOS Keyが作成されると以下のようになる。
赤枠の「API Key」を後でプロジェクトで使用する。


3. プロジェクトに組み込む

今回は「Simple View Application」でプロジェクトを作成し、Google Maps SDK for iOSを組み込む。

全体の流れは以下。
  1. 「Simple View Application」で新規のプロジェクトを作成する
  2. Frameworksに「GoogleMaps.framework」を追加する
  3. 追加した「GoogleMaps.framework」をFinderで表示し、そのResourcesの中から「GoogleMaps.bundle」をプロジェクトのFrameworksグループに追加する
  4. ターゲットの「Build Pharses」を選択し「Link Binary With Liraries」に以下を追加する
    • AVFoundation.framework
    • CoreData.framework
    • CoreLocation.framework
    • CoreText.framework
    • GLKit.framework
    • ImageIO.framework
    • libicucore.dylib
    • libstdc++.dylib
    • libz.dylib
    • OpenGLES.framework
    • QuartzCore.framework
    • SystemConfiguration.framework
  5. ターゲットの「Build Settings」を選択し、「Architectures」を「armv7」に変更。「Other Linker Flags」に「-ObjC」を追加
  6. AppDelegateに<GoogleMaps/GoogleMaps.h>をインポート。
  7. application:didFinishLaunchingWithOptions:に[GMSServices provideAPIKey:@"<API Key>"];を指定。
  8. View Controllerでマップの表示を指定。


FrameworksにGoogleMaps.framework、GoogleMaps.bundleおよびその他必要なFrameworkを追加すると以下のようになる。




Build Settingsの設定は以下。




AppDelegateで<GoogleMaps/GoogleMaps.h>をインポート後、didFinishLaunchingWithOptionsでAPIを指定する。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    
    NSString *APIKey = @"xxxxxxxxxxxxxxxxxxxxxxxxxxxx";
    
    [GMSServices provideAPIKey:(NSString *)APIKey];
    
    return YES;
}


View ControllerでMapsの表示を定義する。
- (void)loadView {
    GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:35.658599
                                                            longitude:139.745443
                                                                 zoom:15];
    mapView_ = [GMSMapView mapWithFrame:CGRectZero camera:camera];
    mapView_.myLocationEnabled = YES;
    self.view = mapView_;
    
    GMSMarkerOptions *options = [[GMSMarkerOptions alloc] init];
    options.position = CLLocationCoordinate2DMake(35.658599, 139.745443);
    options.title = @"東京タワー";
    options.snippet = @"Tokyo Tower";
    [mapView_ addMarkerWithOptions:options];
}

これで実行をすると、Simulator、実機ともにGoogle Mapが表示された。

4. 地図が表示されない場合

最初のビルド時は、以下のエラーが出てしまい、マーカーは表示されるが地図が表示されないことがあった。
com.google.Maps.GMSDASHConnection error 100.


Google先生に聞いてみると、APIキーが間違っているのでは?などの回答があったが間違っているようでもないので、有効になっていないのではと思い、Google APIs Consoleの設定を一度OFFにしてからONに戻したら表示されるようになった。




反映されていなかったということか。。

どうでもいいことだが、地図に表示される左下の「Google」のログにも少しだけマージンがほしい気がする。。

Related Posts Plugin for WordPress, Blogger...

0 件のコメント:

コメントを投稿