GAITrackedViewController和UITableViewController

时间:2013-04-29 22:55:20

标签: iphone ios google-analytics

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

source

#import "GAITrackedViewController.h"

@interface AboutViewController : GAITrackedViewController

7 个答案:

答案 0 :(得分:125)

手动屏幕跟踪

请记住,扩展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

答案 1 :(得分:14)

为了清理我的Swift项目中的手动跟踪代码,我创建了以下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 
}

干净整洁。享受!

答案 2 :(得分:4)

由于Sdk缺少GAITrackedTableViewController,我创建了一个简单巧妙的手动屏幕viev跟踪实现。

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

#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"];
}

这种强调谷歌的想法是同时进行多个跟踪。 (我还没有必要)。要对此进行修改,只需将跟踪方法重命名后使用跟踪器,然后使用您想要的跟踪器。

#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

答案 3 :(得分:1)

确保所有viewDidAppear调用[super viewDidAppear]

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

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

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

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

答案 4 :(得分:0)

对于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"

答案 5 :(得分:-1)

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

答案 6 :(得分:-1)

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

UITableViewController从UIViewController继承:UIResponder:NSObject

On可以继承GAITrackedViewController,而且几乎不会为从UIViewController继承的任何类型的ViewController做任何额外的事情。