2016-02-13 66 views
8

我試圖將我的Google Analytics代碼從我的主應用程序(package com.xyz)中分離出一個單獨的模塊(package com.abc)。我面臨以下問題:Android庫模塊中的Google Analytics(分析)跟蹤器文件

  1. 我應該爲app模塊還是庫模塊生成跟蹤器?
  2. 我應該在哪裏放置此跟蹤器 - 應用程序或庫模塊?
  3. 我的目標是通過一些界面讓庫模塊中的所有Analytics創建和處理邏輯。我也想把這個庫用於我的其他項目;所以我不想將跟蹤器文件放入庫模塊本身。有沒有一種方法可以初始化庫模塊中的跟蹤器,但將XML文件保存在應用程序模塊中?

我曾嘗試(和失敗):兩個com.abc和com.xyz

  • 我試圖在這兩個模塊的兩個文件的所有排列

    1. 我已經生成的跟蹤文件;但庫模塊無法解析R.xml.global_tracker。作爲Google Analytics的新成員,我不知道是否必須複製/粘貼任何跟蹤器文件。在創建庫模塊之前,R.xml.global_tracker在主模塊中自動解析。
  • +0

    我對這個答案也很感興趣。你有沒有想出任何解決方案呢? – binnyb

    +0

    也有興趣爲iOS應用程序提供類似的設置,其中有多個目標 - 每個目標使用不同的包ID(因此需要不同的Google服務plist ...?) – binnyb

    +0

    您不需要製作R.xml.global_tracker了。這非常容易將GA安裝到您的項目中。 https://developers.google.com/analytics/devguides/collection/android/v4/#set-up-your-project只需遵循此。 – kimkevin

    回答

    0

    當使用2個模塊(主應用程序模塊和庫模塊)將Google Analytics實施到項目時,我面臨類似的問題。通過Java Reflection有一個解決方案如何在庫模塊中獲取GA跟蹤器。

    1. 爲您的主應用程序模塊生成跟蹤器。
    2. 將跟蹤器放到Google GA Guide之後的主應用中。
    3. 將Google Play服務的依賴項添加到您的庫項目中:compile 'com.google.android.gms:play-services-analytics:9.0.0'這對於在庫模塊中使用分析類很有必要。

    最後,您將在主應用程序模塊中具有GA配置。你可以使用它作爲指南描述:

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

    對於庫模塊從您的自定義應用程序類得到跟蹤,你可以使用反射:

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

    使用上述方法在這個片段:

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

    因此,您可以在庫模塊中使用GA跟蹤器,並在主模塊中進行配置。

    2

    而不是使用R.xml.global_tracker.You可以在您的應用程序類中使用此代碼。

    /** 
    * @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; 
    } 
    

    而且在這樣的活動/片段使用它:

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

    這可能會解決你的問題,你的情況沒有測試,但。

    相關問題