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

More than 3 years have passed since last update.

分析ツールですが、やはり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)
}