Android库模块中的Google Analytics跟踪器文件

时间:2016-02-13 09:38:46

标签: android google-analytics

我正在尝试将我的Google Analytics代码拆分为一个单独的模块(包com.abc),来自我的主应用程序(包com.xyz)。我正面临着这些问题:

  1. 我应该为app模块或库模块生成跟踪器吗?
  2. 我应该在哪里放置此跟踪器 - 应用程序或库模块?
  3. 我的目标是通过一些接口在库模块中创建和处理所有Analytics。我也希望将这个库用于其他项目;所以我不想把跟踪器文件放在库模块本身。有没有办法可以在库模块中初始化跟踪器,但是将XML文件保存在app模块中?
  4. 我尝试过(并且失败了):

    1. 我为com.abc和com.xyz
    2. 生成了跟踪器文件
    3. 我已经尝试了两个模块中两个文件的所有排列;但库模块无法解析R.xml.global_tracker。作为Google Analytics新手,我不知道是否必须复制/粘贴任何跟踪器文件。在我创建库模块之前,R.xml.global_tracker在主模块中自动解析。

2 个答案:

答案 0 :(得分:2)

而不是使用R.xml.global_tracker。您可以在Application类中使用此代码。

const string json = "{\"option1\":{\"field1\":true,\"field2\":false}," +
                    "\"option2\":{\"field1\":true,\"field2\":false}}";

var result1 = JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, bool>>>(json);
Console.WriteLine(result1["option2"]["field1"]);

dynamic result2 = JsonConvert.DeserializeObject(json);
Console.WriteLine(result2.option2.field1);

并在活动/片段中使用它:

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

这可能会解决您的问题,但未针对您的情况进行测试。

答案 1 :(得分:0)

在使用2个模块(主应用模块和库模块)实施Google Analytics时,我遇到了类似的问题。通过Java Reflection有一个解决方案如何在库模块中获取GA跟踪器。

  1. 为您的主应用模块生成跟踪器。
  2. 将跟踪器添加到Google GA Guide
  3. 之后的主应用
  4. 为您的图书馆项目添加Google Play服务的相关性:compile 'com.google.android.gms:play-services-analytics:9.0.0'这是在图书馆模块中使用分析类所必需的。
  5. 最后,您将在主应用模块中使用GA配置。您可以按照指南中的说明使用它:

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

    对于库模块从自定义Application类获取跟踪器,您可以使用反射:

    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跟踪器,并在主模块中进行配置。