Search code examples
androidgoogle-analyticsgoogle-analytics-apigoogle-analytics-firebase

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>

Solution

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