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")
}
}
docs对GAI
class有这个说法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 Analytics
与 CocoaPods
一起使用,并将此行添加到桥接头文件中:
#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)")
我刚刚从 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")
}
}
docs对GAI
class有这个说法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 Analytics
与 CocoaPods
一起使用,并将此行添加到桥接头文件中:
#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)")