Skip to content

Instantly share code, notes, and snippets.

@lostincode
Created November 14, 2014 05:49
Show Gist options
  • Save lostincode/909b72f96bfbf8d7f956 to your computer and use it in GitHub Desktop.
Save lostincode/909b72f96bfbf8d7f956 to your computer and use it in GitHub Desktop.
Google Analytics Swift Extension
import UIKit
extension UIViewController {
func setScreeName(name: String) {
self.title = name
self.sendScreenView()
}
func sendScreenView() {
let tracker = GAI.sharedInstance().defaultTracker
tracker.set(kGAIScreenName, value: self.title)
tracker.send(GAIDictionaryBuilder.createScreenView().build())
}
func trackEvent(category: String, action: String, label: String, value: NSNumber?) {
let tracker = GAI.sharedInstance().defaultTracker
let trackDictionary = GAIDictionaryBuilder.createEventWithCategory(category, action: action, label: label, value: value).build()
tracker.send(trackDictionary)
}
}
@solal
Copy link

solal commented Feb 2, 2015

Hey, sorry for the random comment but did you get GA to work with Swift?
I've added all the header files for GA to my bridging file and I can instantiate GAI objects from my AppDelegate without a problem (also added the required frameworks to the project).
Now when I try to go let tracker = GAI.sharedInstance().defaultTracker in any of my view controllers I get Use of unresolved identifier 'GAI'.
You wouldn't have an idea of what could be going on here by any chance?
Thanks so much!

@fatihyildizhan
Copy link

swift 2:

extension UIViewController {
    func setScreeName(name: String) {
        self.title = name
        self.sendScreenView()
    }

    func sendScreenView() {
        let tracker = GAI.sharedInstance().defaultTracker
        tracker.set(kGAIScreenName, value: self.title)
        let builder = GAIDictionaryBuilder.createScreenView()
        tracker.send(builder.build() as [NSObject : AnyObject])
    }

    func trackEvent(category: String, action: String, label: String, value: NSNumber?) {
        let tracker = GAI.sharedInstance().defaultTracker
        let trackDictionary = GAIDictionaryBuilder.createEventWithCategory(category, action: action, label: label, value: value)
        tracker.send(trackDictionary.build() as [NSObject : AnyObject])
    }
}

@sealz
Copy link

sealz commented Jul 2, 2016

There's a typo in the first function:

I believe func setScreeName should be func setScreenName

screeName becomes screenName

@tolbard
Copy link

tolbard commented Oct 14, 2016

swift 3 & GA 3.17.0:

extension UIViewController {
    func setScreenName(name: String) {
        self.title = name
        self.sendScreenView()
    }

    func sendScreenView() {
        weak var tracker = GAI.sharedInstance().defaultTracker
        tracker!.set(kGAIScreenName, value: self.title)
        tracker!.send(GAIDictionaryBuilder.createScreenView()?.build() as [NSObject : AnyObject]!)
    }

    func trackEvent(category: String, action: String, label: String, value: NSNumber?) {
        let tracker = GAI.sharedInstance().defaultTracker
        let trackDictionary = GAIDictionaryBuilder.createEvent(withCategory: category, action: action, label: label, value: value)
        tracker?.send(trackDictionary?.build() as [NSObject : AnyObject]!)
    }
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment