Google Analytics SDK for iOS v3の導入方法と使い方

アプリがどのように使われているかを分析するのに便利な無料ツール
「Google アナリティクス」のiOSアプリへの導入方法と使い方をまとめました。

Google アナリティクスではアプリの利用者数や各画面への遷移数、離脱率などの情報を、
自動的に集計・分析・可視化してくれます。（例：以下の画面）
![GoogleAnalytics概要.jpg](https://qiita-image-store.s3.amazonaws.com/0/34488/524525bd-e0c8-36be-f327-52b81f0bfefb.jpeg)


2015/6現在の最新verの導入方法を紹介します。

公式ページで紹介されている導入方法では足りないところや、
古いver3.0.3での導入時の注意（最新verでは無関係）がネットで散見されましたので、
最新のver3.12の導入方法を説明します。


#Google Analyticsアカウントの作成
「Google アナリティクス公式サイト」
https://www.google.com/intl/ja_jp/analytics/
![アカウント作成.jpg](https://qiita-image-store.s3.amazonaws.com/0/34488/b0dd95f5-b25b-5d4d-9432-da46560f951a.jpeg)

右上の「ログイン」または「アカウント作成」をクリック。

![Googleアナリティクスの開始.png](https://qiita-image-store.s3.amazonaws.com/0/34488/5d29f87b-d5ae-7f96-c06d-a86062dd9880.png)

「お申し込み」ボタンをクリック。

アカウントを作成
![アカウント作成.png](https://qiita-image-store.s3.amazonaws.com/0/34488/fb5b8875-3135-d951-0908-82b298f0aeab.png)

「モバイルアプリ」のタブを選択して、「アカウント名」「アプリ名」を入力してください。
※黄色枠の注意事項は新規にGoogleAnalyticsを導入する方は関係ありません。

![トラッキングIDを取得.png](https://qiita-image-store.s3.amazonaws.com/0/34488/c03444cd-b084-837c-c9e6-991eb0a6b99f.png)

「レポートのタイムゾーン」は日本を設定。
業種のアンケートがありますが、該当する項目を回答してください。
その他のGoogleサービスとの連携はお好みで選択してください。
「トラッキングIDを取得」ボタンを押してアカウント作成完了です。

![トラッキングID発行完了.png](https://qiita-image-store.s3.amazonaws.com/0/34488/8ada7e05-6322-631f-c5a9-6c2ff8370bb6.png)
ユニバーサルアナリティクスへのアップグレードを勧められますが、
モバイル版Google Analyticsを導入している時点でユニバーサルアナリティクスの機能を使用していますので、
特に対応する必要はありません。

真ん中のトレーニングも不要であれば、右上の✕ボタンを押して非表示にしてください。

![SDKインストール.png](https://qiita-image-store.s3.amazonaws.com/0/34488/be0549e7-b89d-a0e0-7657-52df5ce7f7b0.png)
SDKのダウンロードを求められますが、このページは更新がされておらずダウンロードできるSDKが古いverの場合があります。
以下のSDKのページから最新verを確認してダウンロードしてください。








#SDKのダウンロード
最新のSDKをダウンロードしてください。
https://developers.google.com/analytics/devguides/collection/ios/resources?hl=ja

![スクリーンショット 2015-06-25 21.15.07.png](https://qiita-image-store.s3.amazonaws.com/0/34488/4b518dbe-d3f8-711b-2a56-b81688c33bd6.png)


ダウンロードしたzipファイルの中にあるGoogleAnalytics->Libraryの中にあるファイルが必要です。
![GoogleAnalyticsSDKiOS.jpg](https://qiita-image-store.s3.amazonaws.com/0/34488/f65576bb-f8e1-5248-b6af-2049060d41e8.jpeg)

さらに<b>トップにあるlibGoogleAnalyticsServices.aファイルも必要です</b>。
Libraryフォルダの名前を適当に「GoogleAnalyticsLibrary」とでも変更します。
先ほどのlibGoogleAnalyticsServices.aをLibraryフォルダに移動させた上で、
導入したいiOSアプリのプロジェクトのフォルダにコピペしましょう。

#Xcodeでの設定

その後、Xcodeにリンク付けします。

![スクリーンショット 2014-08-10 17.03.50.png](https://qiita-image-store.s3.amazonaws.com/0/34488/0ccea33a-382c-22a3-176d-de7cffef4a48.png)
プロジェクト内に「New Group」で「GoogleAnalytics」を作成しています。
作成したグループ「GoogleAnalytics」にコピペしたフォルダ内のファイルをドラッグ＆ドロップします。
（Create folder reference for any added foldersを選択します。）

GoogleAnalyticsに必要な以下のライブラリを追加します。

* CoreData.framework
* SystemConfiguration.framework
* libz.dylib
* libsqlite3.dylib
* libGoogleAnalyticsServices.a

![スクリーンショット 2014-08-10 18.35.20.png](https://qiita-image-store.s3.amazonaws.com/0/34488/fd02ca7b-c38b-6a92-0ddb-19df25c07938.png)

このとき+ボタンでframeworkの追加をしていくと後から追加したものから順に上に記載されますが、
frameworkの読み込みは上から順に行うため、最上段にlibGoogleAnalyticsServices.aがあると、
リンカエラーを起こす場合があります。
指定された順序に並び替えることを推奨します。


#Google Analyticsの使い方：コード内の処理
実装方法には２種類あります。
1. 各ViewControllerにGAITrackedViewController.hを継承させる
2. GAITrackerを使い、任意の情報を送る

1.の方法では既存のViewControllerに継承させるだけでできる簡単なやり方ですが、
イベントトラッキングには対応していないため、2.の方法を使います。


##AppDelegateでの初期化
Google Analyticsの初期化をAppDelegateで実施します。
作成したご自身のトラッキングIDで置き換えてください。

```objc:Objective-C
#import "AppDelegate.h"
#import "GAI.h"

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Google Analyticsの初期化
    [self initializeGoogleAnalytics];
    
    return YES;
}

- (void)initializeGoogleAnalytics
{
    // トラッキングIDを設定
    [[GAI sharedInstance] trackerWithTrackingId:@"UA-XXXX-Y"];

    // 例外を Google Analytics に送る
    [GAI sharedInstance].trackUncaughtExceptions = YES;

}

```

##トラッキング用クラスの作成
トラッキング情報送信用のクラスTrakingManagerを作成します。
このクラスでは以下の２つの機能を実装します。

1. どの画面へ遷移したかを分析するためのスクリーン名計測
2. どのボタンが押されたかなどを分析をするためのイベント計測

```objc:TrackingManager.h
#import <Foundation/Foundation.h>

@interface TrackingManager : NSObject

// スクリーン名計測用メソッド
+ (void)sendScreenTracking:(NSString *)screenName;

// イベント計測用メソッド
+ (void)sendEventTracking:(NSString *)category action:(NSString *)action label:(NSString *)label value:(NSNumber *)value;

@end

```


```objc:TrackingManager.m

#import "TrackingManager.h"
#import "GAI.h"
#import "GAIFields.h"
#import "GAIDictionaryBuilder.h"

@implementation TrackingManager

// スクリーン名をGoogleAnalyticsに送信する
+ (void)sendScreenTracking:(NSString *)screenName
{
    id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
    
    // スクリーン名を設定
    [tracker set:kGAIScreenName value:screenName];
    
    // トラッキング情報を送信する
    [tracker send:[[GAIDictionaryBuilder createScreenView] build]];
    
    // 送信が終わったらtrackerに設定されているスクリーン名を初期化する
    [tracker set:kGAIScreenName value:nil];
}


// イベントをGoogleAnalyticsに送信する
// イベント情報送信前にスクリーン名を設定するとどの画面でイベントが起きたかも分析可能です
+ (void)sendEventTracking:(NSString *)category action:(NSString *)action label:(NSString *)label value:(NSNumber *)value screen:(NSString *)screen {
    
    id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
    
    // スクリーン名を設定
    [tracker set:kGAIScreenName value:screen];
    
    // イベントのトラッキング情報を送信する
    [tracker send:[[GAIDictionaryBuilder createEventWithCategory:category
                                                          action:action
                                                           label:label
                                                           value:value] build]];
}

@end

```

##画面遷移の追跡とイベント追跡の方法
アプリ内の各画面でトラッキング情報を送ります。
例としてViewControllerクラスでの送信例を記載します。

```objc:ViewController.m
#import "ViewController.h"
#import "TrackingManager.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    // "トップ画面"が開かれたときのトラッキング情報を送る
    [TrackingManager sendGoogleAnalyticsTracking:@"トップ画面"];
}

- (IBAction)buttonPushed:(id)sender {
    
    [TrackingManager sendEventTracking:@"Button" action:@"Push" label:@"お気に入り" value:nil screen:@"トップ画面"];
}

```

以上でアプリからGoogle Analyticsに情報送信ができます。

##デバッグ方法
ちゃんと実装できているかの確認はリアルタイムのページで確認できます。
![スクリーンショット 2014-08-12 22.42.36.png](https://qiita-image-store.s3.amazonaws.com/0/34488/65ec3b4a-2633-4c91-9101-94b01d3daefd.png)

Google Analyticsへの情報送信が成功していれば「リアルタイム」→「サマリー」にアクティブユーザとしてあなたの端末が認識されます。
画面名やイベント名を確認したいときは、「行動」→「サマリー」を選択して右上の集計期間を当日のみに設定すればデバッグしながら動作確認することができます。

###通信頻度の変更
アプリがGoogleAnalyticsに情報を送信する頻度はデフォルト120秒間隔に設定されていますが、最小で1秒間隔に変更可能です。
1秒に設定しておけば、「リアルタイム」で確認したときにすぐに結果が反映されます。

```objc

- (void)initializeGoogleAnalytics
{
    // トラッキングIDを設定
    [[GAI sharedInstance] trackerWithTrackingId:@"UA-XXXX-Y"];

    ...

    // Google Analytics に情報送信する頻度を1秒に設定
    [GAI sharedInstance].dispatchInterval = 1;
}

```


#推奨：カスタムディメンションの設定
トラッキング情報にユーザ独自の情報を追加する方法を紹介します。
ディメンションとはGoogle Analyticsのページにある「ユーザー」「サマリー」「デバイス」「ネットワーク」などの区分のことです。
カスタムディメンションはユーザ独自のディメンションを追加する機能のことです。

カスタムディメンションはアカウント毎に20個まで作成可能です。

##「携帯端末のモデル情報」ディメンションの作成

GoogleAnalyticsでレポートを見る際にユーザが使用している端末の情報は、
「ユーザー」→「デバイスとネットワーク」→「デバイス」から閲覧することが可能です。

カスタムディメンションにiOS端末のモデル情報を設定する場合を例として紹介します。

ただし、Google Analytics SDK for iOS ver3.11 (2015/4/30 release)以降のバージョンを使用する場合は、
iOS端末のモデル情報が詳細に送信されているのでモデル情報を別途送信する必要はありません。
公式が対応してくれました。
Issue 408: Differentiate Apple devices by exact model
https://code.google.com/p/analytics-issues/issues/detail?id=408

ver3.11以前のSDKを使用している場合は、「iPhone5」でも「iPhone5S」でも「iPhone」のようにまとめられてしまいます。
iPad、iPod touchも同様です。
(iOS端末はUserAgentに端末のモデル情報が無いためでしょう。)

![iPhoneの端末情報.png](https://qiita-image-store.s3.amazonaws.com/0/34488/ca014404-f6c2-1e03-f3f6-3acd76002f5a.png)

ユーザーのIDや課金状態から利用状況を知るために、カスタムディメンションを作成します。
※個人情報をGoogleAnalyticsに送信することは禁止されています。
個人が特定されない情報を設定してください。

##カスタムディメンションの作成

![カスタムディメンション作成0.png](https://qiita-image-store.s3.amazonaws.com/0/34488/7cc87186-a38d-ebb3-af88-b224a5e22e77.png)

カスタムディメンションの作成画面は「アナリティクス設定」→「カスタム定義」→「カスタムディメンション」をクリックします。

![カスタムディメンションの作成.png](https://qiita-image-store.s3.amazonaws.com/0/34488/46a326ea-b4c6-153c-aa37-d324c0da9a06.png)

上記の内容でカスタムディメンションを作成します。
範囲を「ユーザー」に設定すれば同一セッション中で一意なものを設定できます。
ここでは毎回送信するたびに別物として扱う「ヒット」を指定しています。

![カスタムディメンションの作成後.png](https://qiita-image-store.s3.amazonaws.com/0/34488/b4c69952-f0ca-1989-7e78-26bb566b3b24.png)

作成後にサンプルコードが記載されるため、トラッキング情報の情報送信前の箇所に追加します。


```objc
    // カスタムディメンションの設定(端末のモデル情報を送る)
    [tracker set:[GAIFields customDimensionForIndex:1] value:[self deviceModel]];

    // トラッキング情報をsendする前にsetしておくこと
    [tracer send:...
...

// iOSのモデル情報の取得メソッド
+ (NSString *)deviceModel
{
    size_t size;
    sysctlbyname("hw.machine", NULL, &size, NULL, 0);
    char *machine = malloc(size);
    sysctlbyname("hw.machine", machine, &size, NULL, 0);
    NSString *modelName = [NSString stringWithCString:machine encoding:NSUTF8StringEncoding];
    free(machine);
    
    return modelName;
}

```

#まとめ
Google Analytcisの導入方法と使い方をご紹介しました。
ご自身のアプリの利用状況を分析し、改善に役立ててみてはいかがでしょうか。