GAITrackedViewController和的UITableViewController(GA

2019-09-01 09:57发布

随着iOS版谷歌V2谷歌分析建议继承他们的GAITrackedViewController类代替UIViewController 。 我们需要什么样的UITableViewController的情况下怎么办?

资源

#import "GAITrackedViewController.h"

@interface AboutViewController : GAITrackedViewController

Answer 1:

手动屏幕跟踪

请记住,延长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



Answer 2:

在努力清理我的雨燕项目的手动跟踪代码,我创建了下面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 
}

尼斯和清洁。 请享用!



Answer 3:

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

这种overules的谷歌在同一时间有一个以上的跟踪的想法。 (我还没有需要还)。 不能容纳之后,跟踪器,它使用这只是重命名您的跟踪方法,以及使用什么都跟踪器你想要的。

#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


Answer 4:

确保您的所有viewDidAppear调用[超级viewDidAppear]

然后确保你的UITableViewController的子类的每一个也是myTableViewController的子类

在[myTableViewController viewDidAppear],实现所有这些其他的答案。

只是补充所有其他很好的答案在那里。 这样,你得到的GAITrackedViewController.h好东西

用同样的方法我要确保我的所有其他UIViewController子类的也超的UIViewController的一个子类,然后我做同样的事情。



Answer 5:

对于斯威夫特,你可以使用

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"


Answer 6:

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



Answer 7:

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

UIResponder:从的UITableViewController继承的UIViewController NSObject的

在可以继承GAITrackedViewController和几乎所有类型的ViewController的继承来回的UIViewController不会做任何额外的东西。



文章来源: GAITrackedViewController and UITableViewController