我按照Google分析doc将其添加到我的swift应用
我已经完成了那里所说的一切, 然而我的代码在运行时失败了。
这是我在AppDelegate中的代码:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool {
loadGoogleAnalytics()
chooseAndLuanchStoryboard()
initMembersAfterViewControllerInit()
return true
}
func loadGoogleAnalytics()
{
// Configure tracker from GoogleService-Info.plist.
var configureError:NSError?
GGLContext.sharedInstance().configureWithError(&configureError)
assert(configureError == nil, "Error configuring Google services: \(configureError)")
// Optional: configure GAI options.
let gai = GAI.sharedInstance()
gai.trackUncaughtExceptions = true // report uncaught exceptions
gai.logger.logLevel = GAILogLevel.Error
}
这是我在ViewController中的代码:
override public func viewWillAppear(animated: Bool) {
super.viewWillAppear(true)
let name = "Pattern~\(self.title!)"
// The UA-XXXXX-Y tracker ID is loaded automatically from the
// GoogleService-Info.plist by the `GGLContext` in the AppDelegate.
// If you're copying this to an app just using Analytics, you'll
// need to configure your tracking ID here.
// [START screen_view_hit_swift]
let tracker = GAI.sharedInstance().defaultTracker
tracker.set(kGAIScreenName, value: name)
let builder = GAIDictionaryBuilder.createScreenView()
tracker.send(builder.build() as [NSObject : AnyObject])
// [END screen_view_hit_swift]
}
override public func viewWillDisappear(animated: Bool) {
keyboardManager.deregisterFromKeyboardNotifications()
stopRefreshTimer()
}
我收到此运行时错误,因为self.title
中的let name = "Pattern~\(self.title!)"
为nil
2016-02-05 19:44:44.377 Inline[95803:3750273] The configuration file 'GoogleService-Info.plist' is for another bundle identifier ('com.Inline.inline-ios'). Using this file the services may not be configured correctly. To continue with this configuration file, you may change your app's bundle identifier to 'com.Inline.inline-ios'. Or you can download a new configuration file that matches your bundle identifier from https://developers.google.com/mobile/add and replace the current one.
2016-02-05 19:44:44.383 Inline[95803:] <GMR/INFO> App measurement v.1302000 started
2016-02-05 19:44:44.384 Inline[95803:] <GMR/INFO> To enable debug logging set the following application argument: -GMRDebugEnabled (see http://goo.gl/Y0Yjwu)
2016-02-05 19:44:45.999 Inline[95803:] <GMR/INFO> App measurement enabled
2016-02-05 19:44:46.034 Inline[95803:3750273] Unknown class logo in Interface Builder file.
2016-02-05 19:44:46.048 Inline[95803:3750273] Failed to set (keyPath) user defined inspected property on (UIView): [<UIView 0x7faf9a079730> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key keyPath.
2016-02-05 19:44:46.048 Inline[95803:3750273] Failed to set (keyPath) user defined inspected property on (UIView): [<UIView 0x7faf9a0729a0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key keyPath.
2016-02-05 19:44:46.048 Inline[95803:3750273] Failed to set (keyPath) user defined inspected property on (UIView): [<UIView 0x7faf9a07f8b0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key keyPath.
2016-02-05 19:44:46.051 Inline[95803:3750273] Device ID: (null)
2016-02-05 19:44:46.051 Inline[95803:3750273] RegisterDevice RPC request
scanning for beacons
fatal error: unexpectedly found nil while unwrapping an Optional value
如何让self.title
成为非零?
答案 0 :(得分:1)
初始于didFinishLaunchingWithOptions
let gai = GAI.sharedInstance()
let id = "UA-ID"
gai.trackerWithTrackingId(id)
gai.trackUncaughtExceptions = true
gai.logger.logLevel = GAILogLevel.Warning
gai.defaultTracker.allowIDFACollection = false
通过setScreenName
上的viewDidAppear
致电谷歌分析的简便方法。
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])
}
}
答案 1 :(得分:0)
我有同样的问题,发现defaultTracker属性会造成麻烦。
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(true)
// I called trackerWithTrackingId method in AppDelegate,
// but defaultTracker value could be nil.
// So, you got a error message like this :
// fatal error: unexpectedly found nil while unwrapping an Optional value
// According to google analytics documents, trackerWithTrackingId has an
// initial value with nil, and then will be set with return value
// from trackerWithTrackingId method call.
// But it doesn't look work well sometimes.
if let default_tracker = GAI.sharedInstance().defaultTracker {
#if DEBUG
print("default tracker")
#endif
}
// Instead of defaultTracker, use trackerWithTrackingId method
// it will return a new tracker(=create) or the existing tracker
let tracker = GAI.sharedInstance().trackerWithTrackingId("tracking-ID")
tracker.set(kGAIScreenName, value: "ViewController")
let builder = GAIDictionaryBuilder.createScreenView()
tracker.send(builder.build() as [NSObject : AnyObject])
}
有趣的是,默认跟踪器在AppDelegate中运行良好。
let tracker = GAI.sharedInstance().trackerWithTrackingId("tracking-ID")
GAI.sharedInstance().trackUncaughtExceptions = true;
GAI.sharedInstance().dispatchInterval = 20
GAI.sharedInstance().logger.logLevel = .Warning //.Verbose
let firstTracker = GAI.sharedInstance().defaultTracker
if tracker.isEqual(firstTracker) {
#if DEBUG
print("same Tracker")
#endif
}
pod&#39; GoogleAnalytics&#39;
#import <GoogleAnalytics/GAI.h> #import <GoogleAnalytics/GAIFields.h> #import <GoogleAnalytics/GAILogger.h> #import <GoogleAnalytics/GAIDictionaryBuilder.h> #import <GoogleAnalytics/GAITrackedViewController.h> #import <GoogleAnalytics/GAITracker.h>
我将Google Analytics与CocoaPods一起使用,但无法按照google analytics for swift中的说明操作。因为我不想在我的项目中添加GoogleService-Info.plist。
答案 2 :(得分:0)