2016-02-13 27 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()); 
    

    这可能会解决你的问题,你的情况没有测试,但。

    相关问题