UIButton事件跟踪Google Analytics(Swift)

14

我想在用户点击一个UIButton时使用Google Analytics跟踪事件。我有下面的代码,但是出现了错误。我做错了什么?谢谢。

代码:

@IBAction func startGame1(sender: AnyObject) {

        var tracker = GAI.sharedInstance().defaultTracker

        tracker.send(GAIDictionaryBuilder.createEventWithCategory("Game 1", action: "Start Pressed", label: "Start Timer One", value: nil).build()) 
    }

错误:

Cannot invoke 'send' with an argument list of type'(NSMutableDictionarry)'

可能是重复的问题:Google Analytics在Swift 1.2和Xcode 6.3中无法工作 - jregnauld
3个回答

19
自从Swift 1.2发布以来,你需要将GAIDictionaryBuilder强制转换为[NSObject : AnyObject] 请参见StackOverflow上的这篇文章 Swift 1.2和Xcode 6.3中Google Analytics无法工作的解决方案 这是你问题的解决方案
@IBAction func startGame1(sender: AnyObject) {

        var tracker = GAI.sharedInstance().defaultTracker

        tracker.send(GAIDictionaryBuilder.createEventWithCategory("Game 1", action: "Start Pressed", label: "Start Timer One", value: nil).build() as [NSObject : AnyObject]) 
    }

希望它有所帮助!

2
嘿jre,它在Swift 2.0中没有帮助,错误:NSMutableDictionary无法转换为[NSObject:AnyObject]。有建议吗? - Roi Mulia

16

对于Swift 5。

1.您应该在项目中添加GoogleService-Info.plist文件(请参阅Google文档)。

2.您应该在Info.plist文件中添加此属性:

<key>GoogleAnalytics</key>
<dict>
    <key>TRACKING_ID</key>
    <string>"put_your_tracking_id_here"</string>
</dict>

3.在AppDelegate类中的didFinishLaunchingWithOptions方法中:

// GAI
    if let gai = GAI.sharedInstance(),
        let gaConfigValues = Bundle.main.infoDictionary?["GoogleAnalytics"] as? [String: String],
        let trackingId = gaConfigValues["TRACKING_ID"]
    {
        gai.logger.logLevel = .error
        gai.trackUncaughtExceptions = false
        gai.tracker(withTrackingId: trackingId)
    } else {
        assertionFailure("Google Analytics not configured correctly")
    }

4. 在您的 ViewController 中,例如在 viewDidLoad 方法中:

// GAI
    let tracker = GAI.sharedInstance().defaultTracker
    tracker?.set(kGAIScreenName, value: "Your_mark_name")
    let eventTracker: NSObject = GAIDictionaryBuilder.createScreenView().build()
    tracker?.send(eventTracker as! [NSObject : AnyObject])

5. 你应该在什么之后喝啤酒 ;)


对于 Swift 3

let tracker = GAI.sharedInstance().defaultTracker
tracker.set(kGAIDescription, value: "ScreenViewName")
let eventTracker: NSObject = GAIDictionaryBuilder.createScreenView().build()
tracker.send(eventTracker as! [NSObject : AnyObject])

或者...

let tracker = GAI.sharedInstance().defaultTracker
let eventTracker: NSObject = GAIDictionaryBuilder.createEvent( 
            withCategory: "SomeCategory",
            action: "SomeAction",
            label: "SomeLabel",
            value: nil).build()
tracker.send(eventTracker as [NSObject : AnyObject]!)

1
太棒了,谢谢... Google的文档还没有完全更新到Swift... 而且,遵循他们的iOS SDK教程也真的很困难:( - Chris Allinson
@ChrisAllinson 不客气) - Włodzimierz Woźniak
有任何示例项目可供使用吗?我发现很难实现这个。每当我运行代码时,都会收到Hit(s) dispatched: HTTP status -1错误。 - Dayanithi Natarajan
@DayaKevin,我今天更新了我的帖子。希望它能对你有所帮助。 - Włodzimierz Woźniak

14

Swift 3: 在[NSObject: AnyObject]的地方,你应该使用"[AnyHashable: Any]"。

来源:https://developer.apple.com/swift/blog/?id=39

guard let tracker = GAI.sharedInstance().defaultTracker else {return}
let eventTracker: NSObject = GAIDictionaryBuilder.createEvent(
    withCategory: YOUR_CATEGORY_NAME,
    action: YOUR_ACTION_NAME,
    label: YOUR_LABEL_NAME,
    value: nil).build()
tracker.send(eventTracker as! [AnyHashable: Any])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接