SwiftのプロジェクトにGoogle Analytics SDKを導入する

  • 34
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

分析ツールですが、やはりGoogle Analyticsが導入コストも低く、いろんな角度で分析できるので無難かなと思ってます。
Swiftのプロジェクトに導入するまでの手順をまとめました。

Cocoapods

Podfile
pod 'GoogleAnalytics', '~> 3.13.0'

Bridging-Headerに記述

Example-Briding-Header.swift
...
#import "GAI.h"
#import "GAIFields.h"
#import "GAILogger.h"
#import "GAIDictionaryBuilder.h"
...

起動時のセットアップ

AppDelegate.swift
    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        ...
        AppDelegate.setupGoogleAnalytics()
        ...
    }

    ...
    var tracker: GAITracker?
    class func setupGoogleAnalytics() {
        GAI.sharedInstance().trackUncaughtExceptions = true
        GAI.sharedInstance().dispatchInterval = 20
#if DEBUG
        GAI.sharedInstance().dryRun = true
        GAI.sharedInstance().logger.logLevel = .Info
#else
        GAI.sharedInstance().dryRun = false
        GAI.sharedInstance().logger.logLevel = .None
#endif
        if let appDelegate = UIApplication.sharedApplication().delegate as? AppDelegate {
            appDelegate.tracker = GAI.sharedInstance().trackerWithTrackingId("UA-111111-1")
        }
    }
    ...

スクリーンをTrackする

各UIViewControllerのviewWillAppearにて。

  • screenName は設計によるので自由に設定する
  • もちろん全てのクラスに下記を書くのは冗長なのでHelperとかExtensionとかで一行のメソッドにするか、親クラスでこれをやって継承するなどお好みで
ExampleViewController.swift
override func viewWillAppear(animated: Bool) {
    if let appDelegate = UIApplication.sharedApplication().delegate as? AppDelegate {
        let bundleName = NSBundle.mainBundle().infoDictionary!["CFBundleName"] as! String
        let className = NSStringFromClass(type).componentsSeparatedByString(".").last!
        let screenName = [bundleName, className].joinWithSeparator(".")
        let build = GAIDictionaryBuilder.createScreenView().set(screenName, forKey: kGAIScreenName).build() as NSDictionary
        appDelegate.tracker?.send(build as [NSObject : AnyObject])
        appDelegate.tracker?.set(kGAIScreenName, value: nil)
    }
}

イベントをTrackする

画面以外はイベントを設定するのが良いので、必要な箇所にて下記を記述する。

SomeEventClass.swift
    if let appDelegate = UIApplication.sharedApplication().delegate as? AppDelegate {
        let build = GAIDictionaryBuilder.createEventWithCategory("category",action: "action",label: "label",value: 999).build() as [NSObject : AnyObject]
        appDelegate.tracker?.send(build)
    }