Android库模块中的Google Analytics(分析)跟踪器文件
问题描述:
我试图将我的Google Analytics代码从我的主应用程序(package com.xyz)中分离出一个单独的模块(package com.abc)。我面临以下问题:Android库模块中的Google Analytics(分析)跟踪器文件
- 我应该为app模块还是库模块生成跟踪器?
- 我应该在哪里放置此跟踪器 - 应用程序或库模块?
- 我的目标是通过一些界面让库模块中的所有Analytics创建和处理逻辑。我也想把这个库用于我的其他项目;所以我不想将跟踪器文件放入库模块本身。有没有一种方法可以初始化库模块中的跟踪器,但将XML文件保存在应用程序模块中?
我曾尝试(和失败):两个com.abc和com.xyz
- 我已经生成的跟踪文件;但库模块无法解析R.xml.global_tracker。作为Google Analytics的新成员,我不知道是否必须复制/粘贴任何跟踪器文件。在创建库模块之前,R.xml.global_tracker在主模块中自动解析。
答
当使用2个模块(主应用程序模块和库模块)将Google Analytics实施到项目时,我面临类似的问题。通过Java Reflection有一个解决方案如何在库模块中获取GA跟踪器。
- 为您的主应用程序模块生成跟踪器。
- 将跟踪器放到Google GA Guide之后的主应用中。
- 将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跟踪器,并在主模块中进行配置。
答
而不是使用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());
这可能会解决你的问题,你的情况没有测试,但。
我对这个答案也很感兴趣。你有没有想出任何解决方案呢? – binnyb
也有兴趣为iOS应用程序提供类似的设置,其中有多个目标 - 每个目标使用不同的包ID(因此需要不同的Google服务plist ...?) – binnyb
您不需要制作R.xml.global_tracker了。这非常容易将GA安装到您的项目中。 https://developers.google.com/analytics/devguides/collection/android/v4/#set-up-your-project只需遵循此。 – kimkevin