2013-02-19 14 views
6

Ho aggiunto il nuovo SDK di Google Analytics alla mia applicazione iOS (versione 2.0 beta 4). Ho fatto lo stesso, come la guida dice e ha aggiunto questo codice di applicazione delegato:Google Analytics non traccia una visualizzazione su 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]; 

Ora, su ogni vista ho aggiunto questo:

self.trackedViewName = @"Main Menu Screen"; 

Tutto funziona bene, ma per qualche ragione 3 su 20 schermi non si stanno inviando a Google e non ho la minima idea del perché. Ho cercato su tutta la rete, ma nessuno ha trovato questo problema. Ho capito che se qualcuno ha familiarità con questo problema, è in overflow dello stack.

Per favore aiutatemi. Grazie!

risposta

4

Il problema è stato risolto nel modo più semplice.

Il codice che ho scritto, è per il AppDelegate.Dopo che il tracker è stato inizializzato una volta con l'ID di tracciamento, devi solo chiamarlo in ogni vista che stai utilizzando. (Io non sono sicuro di questo, ma in ogni caso ha funzionato per me.)

Così, nel 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]; 

All'interno dei controller di vista viewDidLoad:

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

Dopo averlo fatto, ha funzionato perfettamente.

+1

Si noti che hanno aggiornato il proprio sdk. Nella versione 3 non funzionerà. Controlla questo thread: http: // StackOverflow.com/domande/16289581/gaitrackedviewcontroller-e-UITableViewController. – pbibergal

+0

Sì, ma ho pubblicato questa risposta 7 mesi fa. –

+2

Sì, lo so, ho scritto il commento per tutti coloro che proveranno la vostra soluzione con sdk 3. – pbibergal

19

Ho avuto lo stesso problema qualche tempo fa. Scommetto che non si chiama i seguenti metodi le sostituzioni:

  1. [super viewDidLoad] nel vostro -(void)viewDidLoad esclusione
  2. [super viewDidAppear:animated] nel vostro -(void)viewDidAppear:(BOOL)animated esclusione
  3. [super viewDidUnload] nel vostro -(void)viewDidUnload esclusione
  4. ... (prendere cura di tutti gli altri metodi che stai ignorando da GAITrackedViewController

Concretamente, i metodi dovrebbe essere simile alla seguente:

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

I metodi più importanti sono viewDidLoad e viewDidAppear: poiché soprattutto per il monitoraggio in tempo reale viewDidAppear: dimostra che questa visione è attualmente visibile.

MODIFICA: Dalla versione 3.0 dell'SDK di Google Analytics la proprietà screenName deve essere impostata prima di chiamare il metodo viewDidLoad di super.

+0

Ho risolto il problema semplicemente facendo '[GAI sharedInstance] defaultTracker];' e di chiamare '[self.tracker sendView: @" Qualche nome "];'. Dopo averlo fatto, ha funzionato perfettamente. –

+0

@ who9vy Grazie amico! Una cosa così ovvia quando ci pensi, ma è davvero facile non vederlo. Google dovrebbe davvero mettere questo nei loro documenti. – tobyc

+0

Grazie - quello era il biglietto. Basta scrivere uno script ora per trovare qualsiasi script (fatto | will) senza una super chiamata .. Doh! – earnshavian

2

Così, ho trovato la risposta a questo problema:

In intestazione aggiungere questo: #import "GAI.h"

Ora in viewDidLoad:

  1. Aggiungi self.trackedViewName = @"Some Name";

  2. Than fare questo: [GAI sharedInstance] defaultTracker];

  3. aggiungere anche questo: [self.tracker sendView:@"Some Name"];

Than che funzionerà bene.

15

Sto usando la versione 3.02 e ho riscontrato lo stesso problema. Il seguente fisso il mio problema:

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

    ... 
} 

Sicuramente si desidera chiamare super perché innesca l'invio dei dati ga. Mi sembra che lo screenName debba essere impostato prima di esso.

+0

Grazie! Questo ha funzionato per me dopo aver provato altri 10 metodi da qui. Sono su GAI 3.0, credo. – Micah

+0

Sì! Questo è il modo corretto per risolvere! Grazie! – skywinder

+0

Il debugging del monitoraggio automatico delle visualizzazioni GA è così frustrante! Questo ha funzionato anche per me (GAI v3.0.6 su iOS 7). Una documentazione terribile e fuorviante può farti impazzire. –

0

Quindi .. Questo è per i noobies là fuori .. (me compreso) ..

Questo potrebbe essere una cosa stupida da pensare, ma per me è stato mettere la stupida Super View si è presentato [super viewDidAppear: animazione]; dopo aver chiamato per impostare il nome dello schermo.

Per inciso, sono solo un utente iOS, ma quando ho guardato in gaitrackedviewcontroller.h, l'ultimo nome di schermo da impostare è, beh, screenname non trackviewname. Quindi, questo è ciò che il mio sembrava:

  • (void) viewDidAppear: (BOOL) animato {

    "Login Screen"

    self.screenName = @;

    [super viewDidAppear: animato];

}

Good Luck. Spero che questo aiuti chiunque. Stay Classy.

0

In ambiente 3.10, ho avuto un problema simile. Ho provato l'altro modo, ma nessuna speranza. Alla fine, ho trovato che la risposta è al di fuori delle istruzioni ufficiali.

Dopo aver aggiunto due righe, funziona.

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

Le istruzioni ufficiali non indicano che è necessario registrare kAllowTraking nei valori predefiniti.

Problemi correlati