2013-02-19 11 views
6

Ich habe das neueste Google Analytics SDK zu meiner iOS-Anwendung hinzugefügt (Version 2.0 Beta 4). habe ich das gleiche wie der Guide sagt und den Code zu AppDelegate hinzugefügt:Google Analytics verfolgt keine Ansicht auf iOS?

// 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]; 

nun auf jeder Ansicht, die ich diese hinzugefügt haben:

self.trackedViewName = @"Main Menu Screen"; 

Alles funktioniert gut, aber aus irgendeinem Grund 3 der 20 Bildschirme senden sich nicht an Google und ich habe keine Ahnung warum. Ich habe überall im Internet gesucht, aber niemand ist auf dieses Problem gestoßen. Ich dachte mir, wenn jemand mit diesem Problem vertraut ist, ist es auf Stack-Overflow.

Bitte helfen Sie mir. Danke!

Antwort

4

Das Problem wurde auf die einfachste Weise behoben.

Der Code, den ich schrieb oben, ist für die AppDelegate.Nachdem der Tracker einmal mit der Tracking-ID initialisiert wurde, müssen Sie ihn nur in jeder Ansicht aufrufen, in der Sie ihn verwenden. (Ich bin nicht sicher, dass aber trotzdem funktionierte es für mich.)

Also, in der 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]; 

Innerhalb der Ansicht-Controller viewDidLoad:

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

Danach hat es perfekt funktioniert.

+1

Beachten Sie, dass sie ihre SDK aktualisiert haben. In Version 3 wird es nicht funktionieren. Überprüfen Sie diesen Thread: http: // Stackoverflow.com/questions/16289581/gaitrackedviewcontroller-and-uitableviewcontroller. – pbibergal

+0

Ja, aber ich habe diese Antwort vor 7 Monaten veröffentlicht. –

+2

Ja ich weiß, ich schrieb den Kommentar für alle, die Ihre Lösung mit SDK 3 versuchen werden. – pbibergal

19

Ich hatte das gleiche Problem vor einiger Zeit. Ich wette, dass Sie nicht über die folgenden Methoden in den Überschreibungen rufen:

  1. [super viewDidLoad] in Ihrer -(void)viewDidLoad Überschreibung
  2. [super viewDidAppear:animated] in Ihrer -(void)viewDidAppear:(BOOL)animated Überschreibung
  3. [super viewDidUnload] in Ihrer -(void)viewDidUnload Überschreibung
  4. ... (nehmen Sorge für alle anderen Methoden, die Sie überschreiben von GAITrackedViewController

Konkret sollten Ihre Methoden wie folgt aussehen:

-(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 
} 

Die wichtigsten Methoden sind viewDidLoad und viewDidAppear: da besonders für Echtzeit die viewDidAppear: zeigt Tracking, dass diese Ansicht noch sichtbar ist.

EDIT: Seit Version 3.0 des Google Analytics-SDK sollte die Eigenschaft screenName vor dem Aufruf der Methode viewDidLoad von super festgelegt werden.

+0

Ich habe das Problem behoben, indem ich '[GAI sharedInstance] defaultTracker];' und dann '' self.tracker sendView: @ "Some name"]; '. Danach hat es perfekt funktioniert. –

+0

@ who9vy Danke Mann! So offensichtlich, wenn man darüber nachdenkt, aber wirklich leicht zu übersehen. Google sollte dies wirklich in ihre Dokumente einfügen. – tobyc

+0

Danke - das war das Ticket. Ich schreibe jetzt einfach ein Skript, um irgendwelche View (did | will) -Skripten ohne einen Superaufruf zu finden .. Doh! – earnshavian

2

So fand ich die Antwort auf diese Frage:

In Header hinzufügen: #import "GAI.h"

Jetzt in viewDidLoad:

  1. hinzufügen self.trackedViewName = @"Some Name";

  2. als dies tun: [GAI sharedInstance] defaultTracker];

  3. auch hinzufügen: [self.tracker sendView:@"Some Name"];

als es gut funktionieren wird.

15

Ich verwende Version 3.02 und stieß auf das gleiche Problem. Die folgende feste mein Problem:

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

    ... 
} 

Sie wollen auf jeden Fall super nennen, weil es löst die ga Daten sendet. Es scheint mir, dass die screenName davor gesetzt werden muss.

+0

Vielen Dank! Das funktionierte für mich, nachdem ich 10 andere Methoden ausprobiert hatte. Ich bin auf GAI 3.0 glaube ich. – Micah

+0

Ja! Das ist die richtige Art zu reparieren! Vielen Dank! – skywinder

+0

Debugging GA automatische Ansichtsverfolgung ist so frustrierend! Dies funktionierte auch für mich (GAI v3.0.6 auf iOS 7). Schreckliche und irreführende Dokumentation kann Sie verrückt machen. –

0

So .. Dies ist für die noobies da draußen .. (ich eingeschlossen) ..

Dies könnte eine dumme Sache zu denken, aber für mich war die dumme super Aussicht setzen schien [super viewDidAppear: animiert];, nachdem Sie den Bildschirmnamen festgelegt haben.

Nebenbei, ich bin nur ein iOS-Benutzer, aber wenn ich in den gaitrackedviewcontroller.h der neueste Bildschirm-Name zu setzen ist, ist gut, screenname nicht trackedviewname. Also, das ist, was ich aussah:

  • (void) viewDidAppear: (BOOL) animierte {

    self.screenName = @ "Login-Bildschirm";

    [super viewDidAppear: animiert];

}

Good Luck. Hoffe das hilft jedem. Klassisch bleiben.

0

In 3.10 Umgebung hatte ich ähnliches Problem. Ich habe andere Art versucht, aber keine Hoffnung. Schließlich fand ich die ANTWORT außerhalb der offiziellen Anweisungen.

Nach dem Hinzufügen von zwei Zeilen funktioniert es.

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

Offizielle Anweisungen erwähnt nicht wir brauchen Register kAllowTraking in Standardeinstellungen.

Verwandte Themen