GAITrackedViewController和UITableViewController

使用Google Analytics for iOS v2 Googlebuild议将其GAITrackedViewController类replace为UIViewController 。 我们在UITableViewController的情况下做什么?

资源

 #import "GAITrackedViewController.h" @interface AboutViewController : GAITrackedViewController 

手动屏幕跟踪

请记住,扩展GAITrackedViewController只是跟踪屏幕视图的一种方法。 手动方式也一样简单。

SDK v2

 - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; // returns the same tracker you created in your app delegate // defaultTracker originally declared in AppDelegate.m id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker]; // manual screen tracking [tracker sendView:@"Home Screen"]; } 

SDK v3

 #import "GAI.h" #import "GAIFields.h" #import "GAIDictionaryBuilder.h" 

 - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; // returns the same tracker you created in your app delegate // defaultTracker originally declared in AppDelegate.m id tracker = [[GAI sharedInstance] defaultTracker]; // This screen name value will remain set on the tracker and sent with // hits until it is set to a new value or to nil. [tracker set:kGAIScreenName value:@"Home Screen"]; // manual screen tracking [tracker send:[[GAIDictionaryBuilder createScreenView] build]]; } 

参考

https://developers.google.com/analytics/devguides/collection/ios/v2/screens#manual https://developers.google.com/analytics/devguides/collection/ios/v3/screens#manual

为了清理Swift项目中的手动跟踪代码,我创build了以下UIViewController扩展。

 extension UIViewController { func trackScreenView(screenName: String) { let tracker = GAI.sharedInstance().defaultTracker tracker.set(kGAIScreenName, value: screenName) tracker.send(GAIDictionaryBuilder.createAppView().build()) } } 

这样做可能不适合使用扩展,因为我没有使用UIViewController的任何属性,但是这是一种比全局方法更好的方便的方法。 如果你不介意使用你的类名而不是格式良好的名字,你甚至可以使用NSStringFromClass(self.dynamicType)来获得ViewController类的名字,如下所示:

 extension UIViewController { func trackScreenView() { let tracker = GAI.sharedInstance().defaultTracker tracker.set(kGAIScreenName, value: NSStringFromClass(self.dynamicType)) tracker.send(GAIDictionaryBuilder.createAppView().build()) } } 

这使我可以添加手动跟踪从我的UITableViewControllers只是下面的代码:

 override func viewDidAppear(animated: Bool) { super.viewDidAppear(animated) trackScreenView("Detail View") //Or call this without any arguments if using the NSStringFromClass idea } 

好,干净。 请享用!

由于Sdk缺less一个GAITrackedTableViewController,我创build了一个简单的整洁的手动屏幕viev跟踪实现。

为GAI类创build一个类别,因为这已经是单例,并且易于访问。

 #import "GAI+Tracking.h" #import "GAIFields.h" #import "GAIDictionaryBuilder.h" @implementation GAI (Tracking) - (void)trackScreenView:(NSString *)screenName { [self.defaultTracker set:kGAIScreenName value:screenName]; [self.defaultTracker send:[[GAIDictionaryBuilder createAppView] build]]; } @end 

现在就像这样跟踪一个屏幕视图

 - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; [[GAI sharedInstance] trackScreenView:@"Counts map screen"]; } 

同时有多个跟踪的这种类似谷歌Google的想法。 (我还没有这个需要)。 为了避免这种情况,只需在使用跟踪器之后重命名跟踪方法,然后使用所需的跟踪器。

 #import "GAI+Tracking.h" #import "GAIFields.h" #import "GAIDictionaryBuilder.h" @implementation GAI (Tracking) - (void)trackDefaultScreenView:(NSString *)screenName { [self.defaultTracker set:kGAIScreenName value:screenName]; [self.defaultTracker send:[[GAIDictionaryBuilder createAppView] build]]; } @end 

确保你所有的viewDidAppear调用[super viewDidAppear]

然后确保UITableViewController的每个子类都是myTableViewController的子类

在[myTableViewController viewDidAppear]中,实现所有其他答案。

只是补充了所有其他好的答案。 这样你就可以得到和GAITrackedViewController.h一样好的东西

同样的方式,我确保所有我的其他UIViewController子类也是超UIViewController的子类,然后我做同样的事情。

对于Swift你可以使用

 AppDelegate.appDelegateIns.defTrackerIns?.set(kGAIScreenName, value: "Enter Your Screen Name") AppDelegate.appDelegateIns.defTrackerIns?.send(GAIDictionaryBuilder.createScreenView().build() as [NSObject : AnyObject]) 

包括这在你的应用程序委托

 static let appDelegateIns = AppDelegate() let gai = GAI.sharedInstance() let defTrackerIns = GAI.sharedInstance().tracker(withTrackingId: "Your Tracking Id") let gaDefTargetURL = "https://developers.google.com/analytics" 

假设他们自己没有UITableViewController的子类,我不明白你为什么不能使用他们的GAITrackedViewController,然后自己实现UITableViewDataSource和UITableViewDelegate协议。

https://developer.apple.com/library/ios/documentation/uikit/reference/UITableViewController_Class/Reference/Reference.html

UITableViewController从UIViewControllerinheritance:UIResponder:NSObject

On可以inheritanceGAITrackedViewController的子类,并且对于从UIViewControllerinheritance来的几乎任何types的ViewController都不会做任何额外的事情。