2013年7月29日月曜日

Google Maps SDK for iOS を使ってみた

Map ばっかり。
今回は、タイトル通り Google Maps SDK for iOS を使ってみた。
といっても、Map が表示されるまで。

前提条件としては、Google のアカウントがあること。

1. アプリ登録のための bundle identifiers を決める
XCode を起動して新規プロジェクトの作成を行う(確認なので、Simple View Application で作成)。
この時に、APK で使用する Bundle Identifer を決定する。

Bundle Identifer とは、プロジェクトを作成する際に付ける Product Name と、Company Identifier を組み合わせたもの。
Bundle Identifer に表示されている。
これをどこかにコピーしておく。

2. SDK と APK を取得する。

Google Maps SDK for iOS
以下から SDK をダウンロード(zip形式)
https://developers.google.com/maps/documentation/ios/start#getting_the_google_maps_sdk_for_ios

Google APIs Console(APK)
https://code.google.com/apis/console/
※ 初めてのアクセスの場合は、プロジェクトの作成がある。

3. API キーの作成
API プロジェクトの Services を選択し、Google Maps SDK for iOS を有効(ON)にする。
次に、API Access を選択し、Create new iOS Key をクリックする。
ポップアップウインドウに 1. で作成した Bundle Identifer を入力(Create ボタンを押す)

API Access に Key for iOS apps(with bundle identifiers)ができ、API Key が表示される。
これをコピーしておく。

4. Google Maps SDK の配置
取得した SDK の Zip を展開する。

XCode に戻り、展開した SDK フォルダ内にある GoogleMaps.framework を Frameworks へ D&D する。
(プロジェクトの Summary の Linked Frameworks and Libraries で追加しても良い。フォルダごと選択追加する)
この時、Destination の Copy items into destination group's folder(if needed) はチェックを付ける。

次に、コピーしたフレームワークのフォルダを右クリックして、Show Finder などでフォルダを開き、フォルダ内にある Resources の中の GoogleMaps.bundle を再度、Frameworks へ D&D する。
この時、Destination の Copy items into destination group's folder(if needed) のチェックは無し

5. ライブラリの追加
必要なライブラリを追加していく。
プロジェクトをクリックして TARGETS のプロジェクトをクリック。
Summary の Linked Frameworks and Libraries で以下のライブラリを追加する

- AVFoundation.framework
- CoreData.framework
- CoreLocation.framework
- CoreText.framework
- GLKit.framework
- ImageIO.framework
- libicucore.dylib
- libstdc++.dylib
- libz.dylib
- OpenGLES.framework
- QuartzCore.framework
- SystemConfiguration.framework

6. 環境設定
Build Settings を選択し、Architectures の Valid Architectures を armv7 にする。
(armv7 と armv7s があるので、armv7s を削除)

次に、Other Linker Flags に 「-ObjC」を追加

7. コードの記述
ここからは、コードの編集

AppDelegate.m に GoogleMaps/GoogleMaps.h をインポート
didFinishLaunchingWithOptions で API キーを指定する。
#import "AppDelegate.h"
#import <GoogleMaps/GoogleMaps.h>

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
 {
    // Override point for customization after application launch.
    [GMSServices provideAPIKey:@"xxxxxx"];  // ここにキーを入れる

    return YES;
}

ViewController で、Map の表示を定義する
#import "ViewController.h"
#import <GoogleMaps/GoogleMaps.h>

@interface ViewController ()
@end

@implementation ViewController {
    GMSMapView *mapView_;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.86
                                                            longitude:151.20
                                                                 zoom:6];
    mapView_ = [GMSMapView mapWithFrame:CGRectZero camera:camera];
    mapView_.myLocationEnabled = YES;
    self.view = mapView_;

    // Creates a marker in the center of the map.
    GMSMarker *marker = [[GMSMarker alloc] init];
    marker.position = CLLocationCoordinate2DMake(-33.86, 151.20);
    marker.title = @"Sydney";
    marker.snippet = @"Australia";
    marker.map = mapView_;
}
8. 確認
これで、ビルドすると Map が表示される。

最初、マーカーは出ても、地図が表示されない時があった。
ログには、API キーが違うというログが表示されていた。
これは、キーの作成の際に指定した Bundle identifiers とプロジェクトの Bundle Identifer が違っていた為に起こっていた模様。
一旦、Google の API キーを削除後、再度正しい名前で作成し直すと、表示されるようになった。

参考にさせて頂いたサイト:
Google Maps SDK for iOSの導入手順
http://qiita.com/shu223/items/bfb5ef3e45682c2bb763

Google Mapを組み込む - [開発] - Google Maps SDK for iOS
http://www.sachostore.com/2013/02/google-map-google-maps-sdk-for-ios.html

0 件のコメント:

コメントを投稿