Search code examples
androidgoogle-analyticsgoogle-analytics-firebase

Google Analytics Tracker Not working for android app


I have included Google analytics in my app. But when i create an object of Tracker the tracker does not work

Code in one of my activity

    @Override
protected void onStart() {
    // TODO Auto-generated method stub
    super.onStart();
    try{
        tracker=((GoogleAnalyticsConfig)this.getApplication()).getTracker(GoogleAnalyticsConfig.TrackerName.APP_TRACKER);
        tracker.setScreenName("HomeActivity");
        tracker.send(new HitBuilders.AppViewBuilder().build());
    }catch(Exception ex)
    {
        ex.printStackTrace();
    }
}

Now with this code i don't see the app in Realtime tracking but if i change the above code with this

@Override
protected void onStart() {
    // TODO Auto-generated method stub
    super.onStart();
    try{
        GoogleAnalytics analytics = GoogleAnalytics.getInstance(this);
        analytics.reportActivityStart(this);
    }catch(Exception ex)
    {
        ex.printStackTrace();
    }
}

I can see that one user is active in Realtime

Code for GoogleAnalyticsConfig

  public enum TrackerName {
    APP_TRACKER, // Tracker used only in this app.
    GLOBAL_TRACKER, // Tracker used by all the apps from a company. eg: roll-up tracking.
  }

  HashMap<TrackerName, Tracker> mTrackers = new HashMap<TrackerName, Tracker>();
// The following line should be changed to include the correct property id.
private static final String PROPERTY_ID ="UA-XXXXXXXX-1";

public synchronized Tracker getTracker(TrackerName trackerId) {
    if (!mTrackers.containsKey(trackerId)) {

      GoogleAnalytics analytics = GoogleAnalytics.getInstance(this);
      Tracker t = analytics.newTracker(PROPERTY_ID);
      t.enableAutoActivityTracking(true);

      mTrackers.put(trackerId, t);

    }
    return mTrackers.get(trackerId);
  }

Can any one tell me why tracker is not working?Also not only realtime but also in all the screens where i have included the tracker its not showing in App Overview section of Google Analytics ,even after 48 hrs.


Solution

  • in res folder create xml folder with below three xml file

    app_tracker.xml

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    
    <!-- Replace placeholder ID with your tracking ID -->
    <string name="ga_trackingId">XX-XXXXXXXX-X</string>
    
    <bool name="ga_autoActivityTracking">true</bool>
    <bool name="ga_reportUncaughtExceptions">true</bool>
    
    <string name="ga_appName">Serivce</string>
    <string name="ga_appVersion">1.1.3</string>
    
    <bool name="ga_debug">true</bool>
    
    <item name="ga_dispatchPeriod" format="integer" type="integer">120</item>
    
    <string name="ga_sampleFrequency">90</string>
    
    <bool name="ga_anonymizeIp">true</bool>
    <bool name="ga_dryRun">false</bool>
    
    <!-- Percentage of events to include in reports -->
    <string name="ga_sampleFrequency">100.0</string>
    
    <!-- How long a session exists before giving up -->
    <integer name="ga_sessionTimeout">-1</integer>
    
    <string name="com.example.ui.MainActivity">MainActivity</string>
    

    ecommerce_tracker.xml

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
     <integer name="ga_sessionTimeout">60</integer>
     <!--  The following value should be replaced with correct property id. -->
     <string name="ga_trackingId">XX-XXXXXXX-1</string>
    </resources>
    

    global_tracker.xml

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    <!-- The following value should be replaced with correct property id. -->
    <string name="ga_trackingId">XX-XXXXXXX-1</string>
    
    <integer name="ga_sessionTimeout">300</integer>
    
    <bool name="ga_autoActivityTracking">true</bool>
    
    <!-- the Local LogLevel for Analytics -->
    <string name="ga_logLevel">verbose</string>
    
    <!-- how often the dispatcher should fire -->
    <integer name="ga_dispatchPeriod">30</integer>
    
    <!-- Treat events as test events and don't send to google -->
    <bool name="ga_dryRun">false</bool>
    
    <screenName name="com.example.ui.MainActivity">MainActivity</screenName>
    

    create java file with AnalyticsSampleApp.java and register this file in menifest like in application tag with android:name="com.example.ui.AnalyticsSampleApp"

    public class AnalyticsSampleApp extends Application {
    
    // The following line should be changed to include the correct property id.
    private static final String PROPERTY_ID = "XX-XXXXXX-1";
    
    public static int GENERAL_TRACKER = 0;
    public enum TrackerName {
        APP_TRACKER, // Tracker used only in this app.
        GLOBAL_TRACKER, // Tracker used by all the apps from a company. eg: roll-up tracking.
        ECOMMERCE_TRACKER, // Tracker used by all ecommerce transactions from a company.
    }
    
    public HashMap<TrackerName, Tracker> mTrackers = new HashMap<TrackerName, Tracker>();
    
    public AnalyticsSampleApp() {
        super();
    }
    
    public synchronized Tracker getTracker(TrackerName trackerId) {
        if (!mTrackers.containsKey(trackerId)) {
            GoogleAnalytics analytics = GoogleAnalytics.getInstance(this);
            Tracker t = (trackerId == TrackerName.APP_TRACKER) ? analytics.newTracker(PROPERTY_ID): (trackerId == TrackerName.GLOBAL_TRACKER) ? analytics.newTracker(R.xml.global_tracker): analytics.newTracker(R.xml.ecommerce_tracker);
            mTrackers.put(trackerId, t);
    
        }
        return mTrackers.get(trackerId);
      }
    }
    

    in MainActivity onCreate put below

        Tracker t = ((AnalyticsSampleApp)this.getApplication()).getTracker(TrackerName.APP_TRACKER);
        t.setScreenName(TAG);
        t.send(new HitBuilders.AppViewBuilder().build());