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协议。
UITableViewController从UIViewControllerinheritance:UIResponder:NSObject
On可以inheritanceGAITrackedViewController的子类,并且对于从UIViewControllerinheritance来的几乎任何types的ViewController都不会做任何额外的事情。
- 有没有办法阻止Google Analytics(分析)将开发工作视为点击?
- 如何在不使用插件的情况下使用Google Analytics和PhoneGap?
- 无法将Google Analytics(分析)3.01与XCode 5(缺less必需的体系结构x86_64)
- 包含一个单词而不是另一个单词的string的正则expression式
- 意外的顶级例外:com.android.dex.DexException:多个dex文件定义
- 有没有办法通过服务器端API将事件发布到Google Analytics?
- Google Analytics(分析) – 无法加载资源:http://www.google-analytics.com/ga.js
- Chrome扩展程序将外部JavaScript添加到当前页面的HTML
- 特定页面上的访问者数量