1

我正在使用适用于 Android 的 Google Analytics,并像这样创建我的跟踪器:

    GoogleAnalytics analytics = GoogleAnalytics.getInstance(context);
    tracker = analytics.newTracker(context.getString(R.string.ga_tracking_id));
    tracker.enableAutoActivityTracking(true);

对于不同的配置,我有不同的 trackingId,因此我无法从 xml 中扩展跟踪器(因为我无法从 xml 中引用字符串资源)。

我在代码中启用了自动活动跟踪,但我找不到任何 API 来自定义将出现在我的报告中的屏幕名称。相反,我会在报告中看到完整的活动名称。

Tracker.setScreenName方法,但它似乎暗示手动活动跟踪。

如何在代码中从跟踪器 xml 文件中模拟屏幕配置?它通常看起来像这样:

<!-- The screen names that will appear in reports -->
<screenName name="com.mycompany.MyActivity">MyActivity Screen Name</screenName>
4

1 回答 1

2

使用自动活动跟踪时,Google Analytics v4 API 不提供在代码中设置屏幕名称的方法。您需要禁用自动活动跟踪tracker.enableAutoActivityTracking(false)以及GoogleAnalytics.reportActivityStart(activity)来自onActivityStarted()GoogleAnalytics.reportActivityStop(activity)来自onActivityStop()回调的调用。

这是应用程序活动生命周期回调的链接: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) {}
        });
    }
}
于 2015-01-20T16:37:28.723 回答