2016-02-13 6 views
8

Sto provando a dividere il mio codice di Google Analytics in un modulo separato (pacchetto com.abc) dalla mia app principale (pacchetto com.xyz). Sto affrontando questi problemi:File di Google Analytics Tracker nel modulo libreria Android

  1. Devo generare il tracker per il modulo app o il modulo libreria?
  2. Dove devo inserire questo tracker - modulo app o libreria?
  3. Il mio obiettivo è avere tutta la logica di creazione e gestione di Analytics nel modulo della libreria attraverso alcune interfacce. Voglio usare questa libreria anche per i miei altri progetti; quindi non voglio mettere i file tracker nel modulo stesso della libreria. C'è un modo per inizializzare il tracker nel modulo della libreria, ma mantenere il file XML nel modulo app?

Quello che ho cercato (e fallito): i file Tracker

  1. ho generati sia per com.abc e com.xyz
  2. ho provato tutte le permutazioni di entrambi i file in entrambi i moduli; ma il modulo della libreria non è in grado di risolvere R.xml.global_tracker. Essendo nuovo di Google Analytics non so se devo copiare/incollare qualsiasi file tracker. Prima di creare il modulo della libreria, R.xml.global_tracker veniva automaticamente risolto nel modulo principale.
+0

Sono anche molto interessato a una risposta a questo.Hai già trovato qualche soluzione? – binnyb

+0

Anche interessato a un setup simile per le applicazioni iOS dove ci sono più target - ogni target che utilizza un ID bundle differente (quindi necessitano di un plist di servizi google diverso ...?) – binnyb

+0

non è necessario creare R.xml.global_tracker più. questo è super facile da installare GA per il tuo progetto. https://developers.google.com/analytics/devguides/collection/android/v4/#set-up-your-project segui questo. – kimkevin

risposta

0

Ho riscontrato problemi simili durante l'implementazione di Google Analytics nel progetto con 2 moduli (modulo dell'app principale e modulo libreria). C'è una soluzione tramite Java Reflection su come ottenere il tracker GA nel modulo della libreria.

  1. Genera tracker per il modulo dell'app principale.
  2. Metti il ​​tracker sull'app principale seguendo lo Google GA Guide.
  3. Aggiungere una dipendenza per Google Play Services al progetto della libreria: compile 'com.google.android.gms:play-services-analytics:9.0.0' Questo è necessario per utilizzare le classi di analisi nel modulo della libreria.

Infine, avrai la configurazione GA nel modulo dell'app principale. Si può usare come descritto nella guida:

// Obtain the shared Tracker instance in main module 
AnalyticsApplication application = (AnalyticsApplication) getApplication(); 
mTracker = application.getDefaultTracker(); 

Per modulo di libreria per ottenere inseguitore dalla classe di applicazioni personalizzate è possibile utilizzare la riflessione:

public Tracker getGATracker(Application application) { 
    Tracker tracker = null; 
    try { 
     Method m = application.getClass().getMethod("getDefaultTracker", (Class<?>[]) null); 
     Object result = null; 
     if (m != null) { 
      result = m.invoke(application, (Object[]) null); 
      if (result != null) { 
       tracker = (Tracker) result; 
      } 
     } 
    } catch (Exception e) { 
     Log.w(TAG, "Can't get GA tracker: ", e); 
    } 

    return tracker; 
} 

Utilizzare il metodo di cui sopra con questo frammento:

// Obtain the shared Tracker instance from main module 
Tracker tracker = getGATracker(getApplication()); 

Quindi è possibile utilizzare GA tracker nel modulo della libreria e avere configurazione nel modulo principale.

2

Invece di utilizzare R.xml.global_tracker.È possibile utilizzare questo codice nella classe dell'applicazione.

/** 
* @return tracker 
*/ 
synchronized public Tracker getDefaultTracker() { 
    if (mTracker == null) { 
     GoogleAnalytics analytics = GoogleAnalytics.getInstance(this); 

     // To enable debug logging use: adb shell setprop log.tag.GAv4 DEBUG 
     analytics.setLocalDispatchPeriod(1800); 
     mTracker = analytics.newTracker("Tracker code"); 
     analytics.setLocalDispatchPeriod(1); 
     mTracker.enableExceptionReporting(true); 
     mTracker.enableAdvertisingIdCollection(true); 
     mTracker.enableAutoActivityTracking(false); 
    } 
    return mTracker; 
} 

e utilizzarlo nell'attività/frammento in questo modo:

MyApplication application = (MyApplication) context.getApplication(); 
    Tracker mTracker = application.getDefaultTracker(); 
    mTracker.setScreenName(name); 
    mTracker.send(new HitBuilders.ScreenViewBuilder().build()); 

Questo potrebbe risolvere il problema, non testato per il vostro caso però.