GAITrackedViewController和UITableViewController

pal*_*lmi 69 iphone google-analytics ios

借助Google Analytics for iOS v2,Google建议将其GAITrackedViewController类继承为子类UIViewController.在UITableViewController的情况下我们做什么?

资源

#import "GAITrackedViewController.h"

@interface AboutViewController : GAITrackedViewController
Run Code Online (Sandbox Code Playgroud)

dmz*_*zza 126

手动屏幕跟踪

请记住,扩展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"];
}
Run Code Online (Sandbox Code Playgroud)

SDK v3

#import "GAI.h"
#import "GAIFields.h"
#import "GAIDictionaryBuilder.h"
Run Code Online (Sandbox Code Playgroud)

...

- (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]];
}
Run Code Online (Sandbox Code Playgroud)

参考

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

  • 我不得不#import"GAIFields.h"使kGAIScreenName可用 (13认同)
  • 确保在.h文件中包含此行:#import"GAITrackedViewController.h" (2认同)
  • 为什么在`viewWillAppear`中调用sendView?发送`viewDidAppear`会更好吗? (2认同)

Kei*_*ith 14

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

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

以这种方式使用扩展可能不合适,因为我没有使用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())
    }
}
Run Code Online (Sandbox Code Playgroud)

这允许我使用以下代码从我的UITableViewControllers添加手动跟踪:

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

干净整洁.请享用!

  • "以这种方式使用扩展可能不合适"......不,这实际上是对扩展的正确使用.事实上,谷歌并没有自己这样做,这真让我感到困惑.使所有视图控制器成为GAITrackedViewController的子类只是为了进行分析跟踪,这就是不正确的.如果您想使用其他需要子类化其自定义View Controller类的其他框架,该怎么办?不,扩展是要走的路.很棒的答案! (4认同)