Google Analytics不会跟踪iOS上的视图?

时间:2013-02-19 08:41:20

标签: ios objective-c google-analytics

我已将最新的Google AnalyticsSDK添加到我的iOS应用程序(版本2.0 beta 4)。 我做了同样的指导,并将此代码添加到app delegate:

// Optional: automatically send uncaught exceptions to Google Analytics.
[GAI sharedInstance].trackUncaughtExceptions = YES;
// Optional: set Google Analytics dispatch interval to e.g. 20 seconds.
[GAI sharedInstance].dispatchInterval = 20;
// Optional: set debug to YES for extra debugging information.
[GAI sharedInstance].debug = YES;
// Create tracker instance.
self.tracker = [[GAI sharedInstance] trackerWithTrackingId:@"UA-TRACKINGID-2"];//UA-33873963-13 - My testing google analytics trackingId

[self.tracker setSessionStart:YES];
[self.tracker setSessionTimeout:60];

现在,在每个视图中我都添加了这个:

self.trackedViewName = @"Main Menu Screen";

一切正常,但出于某种原因,20个屏幕中有3个没有发送给谷歌,我也不知道为什么。我在网上搜索过,但没有人遇到过这个问题。我想如果有人熟悉这个问题,那就是堆栈溢出。

请帮帮我。 谢谢!

6 个答案:

答案 0 :(得分:19)

前段时间我遇到了同样的问题。我打赌你没有在你的覆盖中调用以下方法:

    您的[super viewDidLoad]覆盖中的
  1. -(void)viewDidLoad 您的[super viewDidAppear:animated]覆盖
  2. 中的
  3. -(void)viewDidAppear:(BOOL)animated 您的[super viewDidUnload]覆盖
  4. 中的
  5. -(void)viewDidUnload
  6. ...(处理从GAITrackedViewController
  7. 覆盖的所有其他方法

    具体而言,您的方法应如下所示:

    -(void)viewDidLoad
    {
      // call this at the beginning of the overridden methods
      self.screenName = @"Some Name"; 
      [super viewDidLoad];
    
      // your remaining code here
    }
    
    -(void)viewDidAppear:(BOOL)animated
    {
      [super viewDidAppear:animated];
    
      // your remaining code here
    }
    

    最重要的方法是viewDidLoadviewDidAppear:,因为特别是对于实时跟踪viewDidAppear:显示此视图当前可见。

    编辑:从Google Analytics SDK 3.0版开始,应在调用super viewDidLoad方法之前设置screenName属性。

答案 1 :(得分:15)

我使用的是3.02版,遇到了同样的问题。以下解决了我的问题:

-(void) viewDidAppear:(BOOL)animated {
   self.screenName = @"My Screen"; // set screenName prior to calling super
   [super viewDidAppear:animated];

   ...
}

您肯定想要致电super,因为它会触发发送ga数据。在我看来,screenName需要在它之前设置。

答案 2 :(得分:4)

问题已经用最简单的方法解决了。

我写的代码是AppDelegate。使用跟踪ID将跟踪器初始化一次后,您只需在每个使用它的视图中调用它。 (我不确定,但无论如何它对我有用。)

所以,在 AppDelegate

// Optional: automatically send uncaught exceptions to Google Analytics.
[GAI sharedInstance].trackUncaughtExceptions = YES;
// Optional: set Google Analytics dispatch interval to e.g. 20 seconds.
[GAI sharedInstance].dispatchInterval = 20;
// Optional: set debug to YES for extra debugging information.
[GAI sharedInstance].debug = YES;
// Create tracker instance.
self.tracker = [[GAI sharedInstance] trackerWithTrackingId:@"UA-TRACKINGID-2"];//UA-33873963-13 - My testing google analytics trackingId

[self.tracker setSessionStart:YES];
[self.tracker setSessionTimeout:60];

视图控制器内部 viewDidLoad

[GAI sharedInstance] defaultTracker];
[self.tracker sendView:@"Some name"];

这样做之后,它完美地运作了。

答案 3 :(得分:2)

所以,我找到了这个问题的答案:

在标题中添加:#import "GAI.h"

现在在viewDidLoad:

  1. 添加self.trackedViewName = @"Some Name";

  2. 比这样做: [GAI sharedInstance] defaultTracker];

  3. 还添加以下内容: [self.tracker sendView:@"Some Name"];

  4. 比它能正常工作。

答案 4 :(得分:0)

所以..这是为了那里的小说..(包括我自己)..

这可能是一个愚蠢的想法,但对我来说,在你调用设置屏幕名称之后,确实会出现愚蠢的超级视图[super viewDidAppear:animated];

另外,我只是一个iOS用户,但是当我查看gaitrackedviewcontroller.h时,要设置的最新屏幕名称是,屏幕名称不是trackedviewname。所以,这就是我的样子:

  • (void)viewDidAppear:(BOOL)动画{

    self.screenName = @"登录屏幕&#34 ;;

    [super viewDidAppear:animated];

}

祝你好运。希望这有助于任何人。保持优雅。

答案 5 :(得分:0)

3.10 环境中,我遇到了类似的问题。我尝试过其他的方式,但没有希望。最后,我发现ANSWER不在官方指示之外。

添加两行后,它可以正常工作。

 NSDictionary *appDefaults = @{kAllowTracking: @(YES)};
 [[NSUserDefaults standardUserDefaults] registerDefaults:appDefaults];

官方说明并未提及我们需要在默认情况下注册kAllowTraking。