GAITrackedViewController и UITableViewController

В Google Analytics для iOS v2 Google предлагает подклассифицировать класс GAITrackedViewController вместо UIViewController. Что мы будем делать в случае UITableViewController?

источник

#import "GAITrackedViewController.h"

@interface AboutViewController : GAITrackedViewController

Ответ 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

Ответ 2

Чтобы очистить ручной код отслеживания в моем проекте 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 
}

Приятный и чистый. Наслаждайтесь!

Ответ 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 Googles предполагает наличие нескольких отслеживаний одновременно. (У меня еще не было необходимости). Чтобы использовать это, просто переименуйте свой метод отслеживания, после которого он использует трекер и использует то, что вам нужно.

#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

Ответ 4

Убедитесь, что все ваши viewDidAppear вызывают [super viewDidAppear]

Затем убедитесь, что каждый из ваших подклассов UITableViewController также является подклассом myTableViewController

в [myTableViewController viewDidAppear], выполните все эти другие ответы.

Просто дополняя все остальные хорошие ответы. Таким образом, вы получаете что-то вроде GAITrackedViewController.h

Точно так же я уверен, что весь мой другой подкласс UIViewController также является подклассом супер UIViewController, а затем я делаю то же самое.

Ответ 5

Для 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"

Ответ 6

Предполагая, что они не имеют подкласса самого UITableViewController, я не понимаю, почему вы не могли использовать их GAITrackedViewController, а затем сами реализовать UITableViewDataSource и UITableViewDelegate.