在代码中设置屏幕名称
Setting screenName in code
我正在为 Android 使用 Google 分析,我这样创建我的跟踪器:
GoogleAnalytics analytics = GoogleAnalytics.getInstance(context);
tracker = analytics.newTracker(context.getString(R.string.ga_tracking_id));
tracker.enableAutoActivityTracking(true);
对于不同的配置,我有不同的 trackingIds,所以我无法从 xml 中扩充跟踪器(因为我无法从 xml 中引用字符串资源)。
我在代码中启用了自动 activity 跟踪,但我找不到任何 API 来自定义将出现在我的报告中的屏幕名称。相反,我在报告中看到了完整的 activity 个名字。
有 Tracker.setScreenName 方法,但似乎暗示手动 activity 跟踪。
如何在代码中模仿来自跟踪器 xml 文件的屏幕配置?它通常看起来像这样:
<!-- The screen names that will appear in reports -->
<screenName name="com.mycompany.MyActivity">MyActivity Screen Name</screenName>
Google Analytics v4 API 不提供在使用自动 activity 跟踪时在代码中设置屏幕名称的方法。您需要禁用自动 activity 跟踪 tracker.enableAutoActivityTracking(false)
并从 onActivityStarted()
调用 GoogleAnalytics.reportActivityStart(activity)
并从 onActivityStop()
回调调用 GoogleAnalytics.reportActivityStop(activity)
。
这是应用程序 activity 生命周期回调的 link:
http://developer.android.com/reference/android/app/Application.ActivityLifecycleCallbacks.html
您的代码将如下所示:
public class MyApp extends Application {
private final String TRACKER_ID = "UA-12345678-1";
private static GoogleAnalytics analytics;
private static Tracker tracker;
public static GoogleAnalytics analytics() {
return analytics;
}
public static Tracker tracker() {
return tracker;
}
@Override
public void onCreate() {
super.onCreate();
analytics = GoogleAnalytics.getInstance(this);
// analytics.getLogger().setLogLevel(Logger.LogLevel.VERBOSE);
tracker = analytics.newTracker(TRACKER_ID);
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {}
@Override
public void onActivityStarted(Activity activity) {
tracker().setScreenName("My Activity");
tracker().send(new HitBuilders.ScreenViewBuilder().build());
analytics().reportActivityStart(activity);
}
@Override
public void onActivityResumed(Activity activity) {}
@Override
public void onActivityPaused(Activity activity) {}
@Override
public void onActivityStopped(Activity activity) {
analytics().reportActivityStop(activity);
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {}
@Override
public void onActivityDestroyed(Activity activity) {}
});
}
}
我正在为 Android 使用 Google 分析,我这样创建我的跟踪器:
GoogleAnalytics analytics = GoogleAnalytics.getInstance(context);
tracker = analytics.newTracker(context.getString(R.string.ga_tracking_id));
tracker.enableAutoActivityTracking(true);
对于不同的配置,我有不同的 trackingIds,所以我无法从 xml 中扩充跟踪器(因为我无法从 xml 中引用字符串资源)。
我在代码中启用了自动 activity 跟踪,但我找不到任何 API 来自定义将出现在我的报告中的屏幕名称。相反,我在报告中看到了完整的 activity 个名字。
有 Tracker.setScreenName 方法,但似乎暗示手动 activity 跟踪。
如何在代码中模仿来自跟踪器 xml 文件的屏幕配置?它通常看起来像这样:
<!-- The screen names that will appear in reports -->
<screenName name="com.mycompany.MyActivity">MyActivity Screen Name</screenName>
Google Analytics v4 API 不提供在使用自动 activity 跟踪时在代码中设置屏幕名称的方法。您需要禁用自动 activity 跟踪 tracker.enableAutoActivityTracking(false)
并从 onActivityStarted()
调用 GoogleAnalytics.reportActivityStart(activity)
并从 onActivityStop()
回调调用 GoogleAnalytics.reportActivityStop(activity)
。
这是应用程序 activity 生命周期回调的 link: http://developer.android.com/reference/android/app/Application.ActivityLifecycleCallbacks.html
您的代码将如下所示:
public class MyApp extends Application {
private final String TRACKER_ID = "UA-12345678-1";
private static GoogleAnalytics analytics;
private static Tracker tracker;
public static GoogleAnalytics analytics() {
return analytics;
}
public static Tracker tracker() {
return tracker;
}
@Override
public void onCreate() {
super.onCreate();
analytics = GoogleAnalytics.getInstance(this);
// analytics.getLogger().setLogLevel(Logger.LogLevel.VERBOSE);
tracker = analytics.newTracker(TRACKER_ID);
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {}
@Override
public void onActivityStarted(Activity activity) {
tracker().setScreenName("My Activity");
tracker().send(new HitBuilders.ScreenViewBuilder().build());
analytics().reportActivityStart(activity);
}
@Override
public void onActivityResumed(Activity activity) {}
@Override
public void onActivityPaused(Activity activity) {}
@Override
public void onActivityStopped(Activity activity) {
analytics().reportActivityStop(activity);
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {}
@Override
public void onActivityDestroyed(Activity activity) {}
});
}
}