【问题标题】:Google Analytics crash with Swift 2.0Swift 2.0 导致 Google Analytics 崩溃
【发布时间】:2016-01-08 04:56:36
【问题描述】:

我刚刚从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")
    }
}

【问题讨论】:

  • tracker initialized 是否被打印,或者内部if let 是否失败?如果是这样,您是否绝对确定您使用的跟踪 id 值是有效的 - 文档说如果它无效,它将返回 nil。
  • tracker initialized 打印出来。是的。但分析没有显示任何内容。
  • 您是否尝试过代理应用并查看它是否正在向 GA 发送网络请求?
  • 好的,让我看看。

标签: ios swift google-analytics fatal-error


【解决方案1】:

GAI 类的docsdefaultTracker 有这样的看法

> 为方便起见,此类公开了一个默认跟踪器实例。 这被初始化为 nil 并将设置为在 trackerWithTrackingId: 中实例化的第一个跟踪器。它可以根据需要被覆盖。

所以我猜你需要在某个地方调用trackerWithTrackingId:,或者如果你已经这样做了,请确保它在调用此方法之前发生。

【讨论】:

  • 我并没有完全调用这个方法,但在新的分析中你不必这样做。
  • 但是defaultTracker 仍然为零,所以可能缺少其他一些设置步骤。顺便说一句,您在哪里发现不再需要调用它了?我的答案中的文档链接适用于 v3 文档,主页上说它已于 9 月 2 日更新。 (尽管根据以前的经验,如果 GA 文档变得不完整/不一致,我不会感到惊讶)
  • 我没有调用它,因为在最新的 SDK 中还有另一种初始化跟踪器的方法。看看这个:developers.google.com/analytics/devguides/collection/ios/v3/…
【解决方案2】:

所以我找到了问题所在,我将Google AnalyticsCocoaPods 一起使用,如Google Analytics iOS tutorial 中所述,并将这一行添加到桥接头文件中:

#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 的帮助)

【讨论】:

  • 我的问题和你一模一样,但是这个解决方案对我不起作用。
  • @cnbuff410 你找到其他解决方案了吗?因为这个解决方案对我也不起作用。
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多