Friday, November 28, 2014

Can Google Play Services introduce bugs to my apps without code update?

Here's a short list of FC bugs I think Google Play Services introduced remotely to my apps:

Wednesday, September 3, 2014

Removing app from Amazon App Store

Few years ago I had few apps published on Amazon App Store. Since the performance on that market wasn't impressive I didn't update them over time. Few weeks ago I decided to unpublish those apps.

Problem: No way to unpublish apps from the Amazon App Store.
Solution 1: Contact Amazon support and ask them to remove the app. They might want reasons and such.
Solution 2: Limit app distribution to the smallest market you can find on their list.

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());