Setting screenName in code

I'm using Google Analytics for Android and I create my tracker like this:

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

I have different trackingIds for different configurations so I can't inflate the tracker from the xml (since I can't refer to a string resource from xml).

I have enabled auto activity tracking in code, but I can't find any API to customize screen names which will appear in my reports. Instead I see full activity names in my reports.

There is Tracker.setScreenName method but it seems to imply manual activity tracking.

How do I mimic screen configuration from tracker xml file in code? It usually looks like this:

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

Upvotes: 1

Views: 958

Answers (1)

djabi
djabi

Reputation: 5767

Google Analytics v4 API doesn't provide a way to set the screen names in code when using automatic activity tracking. You need to disable automatic activity tracking tracker.enableAutoActivityTracking(false) and call GoogleAnalytics.reportActivityStart(activity) from onActivityStarted() and GoogleAnalytics.reportActivityStop(activity) from onActivityStop() callbacks.

Here is a link to the application activity lifecycle callbacks: http://developer.android.com/reference/android/app/Application.ActivityLifecycleCallbacks.html

Your code will look something like this:

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) {}
        });
    }
}

Upvotes: 2

Related Questions