iOS版GoogleAnalyticsを利用


iOSアプリで簡単にトラッキングを行おうと考えた時に利用するツールの選択肢の一つとして、GoogleAnalyticsがある。その導入時のメモ。

## 環境
- Xcode7.2
- GoogleAnalytics (iOS) v3.14.0

## 導入
### インストール
CocoaPodsに対応しているので、そちらを利用する。
アナリティクスに限らず、GoogleのiOS版SDKはCocoaPodsに対応しているようだ。

[Install a Google SDK using CocoaPods  |  Google APIs for iOS  |  Google Developers](https://developers.google.com/ios/guides/cocoapods)

`Podfile`に記述。

```ruby:Podfile
platform :ios, '8.0'
use_frameworks!

pod 'GoogleAnalytics'
```

`pod install`してビルド、`import GoogleAnalytics`して使おうと思ったらうまく呼び出せず。。原因が解明できなかったので、Bridging-Header を作成して対応。

```objectivec:App-Bridging-Header.h
#ifndef App_Bridging_Header_h
#define App_Bridging_Header_h

#import <GoogleAnalytics/GAI.h>
#import <GoogleAnalytics/GAIFields.h>
#import <GoogleAnalytics/GAILogger.h>
#import <GoogleAnalytics/GAITracker.h>
#import <GoogleAnalytics/GAIDictionaryBuilder.h>

#endif /* App_Bridging_Header_h */
```

とりあえずこれでG/Aのライブラリを呼び出せるようになった。

### 設定ファイルの取得
https://developers.google.com/analytics/devguides/collection/ios/v3/?ver=swift&hl=ja#get-config

↑上記URLの記載に従い、設定ファイルを取得。前もって、GoogleAnalytics上でのプロジェクトを作成しておく。

情報を入力すると、`GoogleService-Info.plist`というplistがDLできるので、それをXcodeでプロジェクトに追加しておく。いくつかキーが記載されているが、その中の **TRACKING_ID** というキーには、アナリティクス上でのID (UA-xxxxxxxx-1 みたいなやつ)が格納されているのが分かる。

## 利用
### 初期化
まずはアプリ内でGoogleAnalticsを利用できるよう、`AppDelegate.swift`で初期化設定。

```swift:AppDelegate.swift
class AppDelegate: UIResponder, UIApplicationDelegate {

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // G/A初期設定
        let gai = GAI.sharedInstance()
        gai.trackUncaughtExceptions = true
        
        if let path = NSBundle.mainBundle().pathForResource("GoogleService-Info", ofType: "plist") {
            if let propertyList = NSDictionary(contentsOfFile: path) as? [String: AnyObject] {
                let trackingId = propertyList["TRACKING_ID"] as! String
                gai.trackerWithTrackingId(trackingId)
            }
        }
    
        (略)
    
    }

end
```

基本的には`GAI`というシングルトンを利用して実装していく。
`trackUncaughtExceptions`を`true`にしておくことで、補足できなかった例外（主にクラッシュ）をアナリティクスに送信することができる。

さらに、先ほどのplistファイルからトラッキングIDを読み込み、トラッカーに設定。これでアプリ内の各viewからアナリティクスにデータを送信する準備が整った。

### トラッキング
`GATrackingManager`というクラスを作成し、GoogleAnalyticsでアプリ内の遷移を実際にトラッキングできるようにしてみる。

```swift:GATrackingManager.swift
import Foundation

class GATrackingManager {
    
    class func sendScreenTracking(screenName: String) {
        let tracker = GAI.sharedInstance().defaultTracker
        tracker.set(kGAIScreenName, value: screenName)
        tracker.send(GAIDictionaryBuilder.createScreenView().build() as [NSObject: AnyObject])
        tracker.set(kGAIScreenName, value: nil)
    }
    
}
```

引数にスクリーン名（どのviewか識別するための名前）をセットして利用。
スクリーン名を`set`メソッドで指定、`send`メソッドでデータ送信ということをしているだけ。`GAI`はシングルトンなので、最後にセット済のスクリーン名を`nil`に戻している。

このクラスメソッドを、以下の例のように各ViewControllerで呼び出すことで、Google Analyticsにデータが送信される。

```swift:ViewController.swift
import UIKit

class ViewController: UIViewController {

    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        
        GATrackingManager.sendScreenTracking("スクリーン名")
    }

end
```

---

実装にミスがなければ、Google Analyticsのサイトでデータが送信されていることが確認できる。

![スクリーンショット 2015-12-27 18.21.09.png](https://qiita-image-store.s3.amazonaws.com/0/1795/b13a5b79-4887-9b68-0e00-2d47201cf9b7.png "スクリーンショット 2015-12-27 18.21.09.png")


以上でメモ終わり。簡単なトラッキングをするだけなら非常に楽だった。