Google Analytics 在 Swift 2.0 中崩溃

Google Analytics crash with Swift 2.0

我刚刚从 CocoaPods 安装了 GoogleAnalytics 并尝试使用它,突然崩溃并报错:

fatal error: unexpectedly found nil while unwrapping an Optional value

崩溃发生在这部分:

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)

    let tracker = GAI.sharedInstance().defaultTracker
    tracker.set(kGAIScreenName, value: "Main")

    let builder = GAIDictionaryBuilder.createScreenView()
    tracker.send(builder.build() as [NSObject : AnyObject])
}

到达这条线时:

tracker.set(kGAIScreenName, value: "Main")

可能与桥接自Objective-C的框架有关?


更新

所以我通过用 if 语句包装它来修复崩溃,但仍然没有发送到 Google Analytics:

let name = "Main"
if let gai = GAI.sharedInstance() {
    if let tracker: GAITracker = gai.trackerWithTrackingId("TRACKING_ID") {
        tracker.set(kGAIScreenName, value: name)

        let builder = GAIDictionaryBuilder.createScreenView()
        tracker.send(builder.build() as [NSObject : AnyObject])

        print("tracker initialized")
    }
}

docsGAIclass有这个说法defaultTracker

> For convenience, this class exposes a default tracker instance. This is initialized to nil and will be set to the first tracker that is instantiated in trackerWithTrackingId:. It may be overridden as desired.

所以我猜您需要在某处调用 trackerWithTrackingId:,或者如果您已经在调用,请确保它在调用此方法之前发生。

所以我弄清楚了问题,我按照 Google Analytics iOS tutorial 中的说明将 Google AnalyticsCocoaPods 一起使用,并将此行添加到桥接头文件中:

#import <Google/Analytics.h>

但我想这还不够,在添加这些行之后:

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

效果很好。 (感谢 Rich Tolley 的帮助)

对我来说,我必须在 AppDelegate 中添加这些行:

var configureError:NSError?
GGLContext.sharedInstance().configureWithError(&configureError)
assert(configureError == nil, "Error configuring Google services: \(configureError)")