Monday, April 7, 2014

Upgrading Google Analytics for Android v2 to v4

I couldn't find a single place where all this information can be found, so here are the steps to upgrade Google Analytics for Android v2 to v4 (Google Play Services). This does not include the steps needed to integrate Google Play Services (some Manifest.xml & library includes):

  1. Move the analytics.xml from /res/values to /res/xml
  2. Add the following line to the Manifest.xml:
    <meta-data android:name="com.google.android.gms.analytics.globalConfigResource" android:resource="@xml/analytics" />
    
  3. Replace the campaign tracker in the Manifest.xml if need:
    <service android:name="com.google.android.gms.analytics.CampaignTrackingService" />
    <receiver android:name="com.google.android.gms.analytics.CampaignTrackingReceiver"
              android:exported="true">
       <intent-filter>
      <action android:name="com.android.vending.INSTALL_REFERRER" />
      </intent-filter>
    </receiver>
    
  4. Add the following code to the Application class:
  5. private Tracker mTracker = null;
    
    synchronized public Tracker getTracker() {
      if (mTracker == null) {
        GoogleAnalytics analytics = GoogleAnalytics.getInstance(this);
        mTracker = analytics.newTracker(R.xml.analytics);
      }
      
      return mTracker;
    }
    
  6. Activity tracking - replace:
    @Override
    public void onStart() {
      super.onStart();
      
      EasyTracker.getInstance().activityStart(this);
      mTracker = EasyTracker.getTracker();
    }
    
    @Override
    public void onStop() {
      super.onStop();
      
      EasyTracker.getInstance().activityStop(this);
    }
    
    
    with:
    @Override
    public void onStart() {
      super.onStart();
      
      mTracker = ((MyApplication)getApplication()).getTracker();
      GoogleAnalytics.getInstance(this).reportActivityStart(this);
    }
     
    @Override
    public void onStop() {
      super.onStop();
      
      GoogleAnalytics.getInstance(this).reportActivityStop(this);
    }
    
  7. Update events tracking to the new format:
  8. mTracker.send(new HitBuilders.EventBuilder()
      .setCategory(category)
      .setAction(action)
      .setLabel(label)
      .setValue(val)
      .build());