Sunday 29 December 2013

Andlytics - A Nice Substitute to the Google Play Developers Console

I wanted to talk about this app Andlytics that I have been using since a while now. Andlytics provides stats for your app listed on Play Store in a clean and concise manner. For me it trumps the Google Play Developers Console because of the following:


  • Its an App - Duh.. all said and done the experience of clicking a button and watching data load on a native app is superior to opening a web page on your mobile, zooming in and making sure you click the right link.
  • Features Ratings/Comments for the Day - This is probably the biggest plus for me. I get to see how many ratings/comments I have received on a particular day. This data is impossible to get on the Developer Console unless you manually make note of the ratings and comments everyday.
  • Features Percentages - Andlytics divides stats into majorly 4 parts, comments, downloads, revenue and ratings. All of these feature a percentage feature which is missing in the Google counterpart. Eg, I know what % of my total downloads are active installs and how this % is tracking on a daily basis. Or what % of my total comments are 5 starts, etc.
It also lets you integrate your Admob a/c, which I honestly I do not find very useful. I still prefer going to the Admob html page to view my revenue.

All in all this is a very useful app if you have your app listed on the Play Store. This app cannot replace the Developers Console, because you get a lot more analytics there, but for frequent checking of data on your mobile phone, this app definitely is the best I have found.

You can download Andlytics from the Play Store.

Friday 6 December 2013

Create a Circular Progress Bar in Android

For my current project, BreakFree, I needed a circular Progress bar, and not the spinning kind. A progress bar that behaves like the horizontal one, but is circular. 

A circular one would fit my layout a lot better. I did not find a straight answer on the internet  but I did manage to put one together, so I thought I'd write a TUT for it. In case anyone decides on creating such a Progress Bar.

This is what the final result should look like (Ignore the number in the center):




Lets start with the steps to recreate this view.

1) You will need to create a drawable which defines your progress bar. Here you will give it the shape of a ring. Adjust the inner radius and thickness of the ring as you wish. I have also added a gradient starting from red, moving to yellow and then ending in green. You can play around with these settings.


<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@android:id/progress">
    <shape
             android:innerRadiusRatio="3"
             android:shape="ring"
             android:thicknessRatio="7.0"
             android:useLevel="true">
  <gradient
             android:startColor="#fb0000"
             android:endColor="#00FF00"
             android:centerColor="#fbf400"
             android:type="sweep" />   
</shape>
</item>
</layer-list>

2) In your layout xml, create a horizontal Progress bar. And set the progressDrawable to the drawable file created in step 1 (in my case I have named the file in step 1 circular_progress_bar.xml.

<ProgressBar
        android:id="@+id/progressBarToday"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="250dp"
        android:layout_height="273dp"
        android:layout_centerInParent="true"  
        android:indeterminate="false"
        android:max="48"
        android:progress="45"
        android:progressDrawable="@drawable/circular_progress_bar" />

3) Most of our job is done. Now the only problem is that since this is a horizontal progress bar, it is aligned horizontally and not vertically. So basically the start and finish is to the right of the circle and not at the bottom. To counter this I used RotationAnimation to rotate the Progress Bar by 90 degrees. This will rotate the progress bar and the start and finish will be at the bottom of the circle making it look realistic. Since I have not specified a duration the animation will happen as soon as the view is created.


ProgressBar pb = (ProgressBar) view.findViewById(R.id.progressBarToday);

Animation an = new RotateAnimation(0.0f, 90.0f, 250f, 273f);
an.setFillAfter(true);
pb.startAnimation(an);

I hope this helps.

Until next time.

EDIT: Lollipop onwards Android has changed the default value for useLevel from "true" to "false". Hence you now need to add android:useLevel="true" in the shape tag in the drawable.

Sunday 1 December 2013

November Income Report

Publishing my App Download and Income report for the month of November. 

Two updates launched for 'Fuel Buddy'. The major one being that the app now has in-app purchases implemented. I have added a pretty cool feature where the users can email their logs from within the app. And as with other features the email is fully customizable. I have added this an an in-app purchase. The initial sales were as expected. But then towards the end of the month the sales started to dry up. Not sure why.

In any case the numbers are much better than the October report. But still need to be better.

I have not been able to devote the time I would have liked to because I have been quite busy with the development of my third app. It should be launched in December. Will keep you guys posted.

My numbers are below:

November Download and Income report



Fuel Buddy



Downloads in November: 3359
Admob Revenue: $128.47
eCPM: $0.76
Requests:169,911
In-app: 16 Orders, $25






Pingy Pong



Downloads in November: 1247
Admob Revenue: $17.31
eCPM: $0.37
Requests: 48,083

Friday 29 November 2013

Create a Fade In/Fade Out Effect With Fragments Within a View Pager

So I am working on my new app, and from the start I wanted it to have a combination of Pager Tabs Strips and View Pager in my app (the kind you see in Play Store app)

What else I thought will be cool is to have a fade in/fade out effect as the fragments in my app are scrolled within the View Pager. I have not seen this being implemented in any other app, so thought I'll explain how I did it.

First, familiarize yourself with what a View Pager is here.

1) Create an adaptor and assign it to your instance of View Pager:

MyAdapter mAdapter = new MyAdapter(getSupportFragmentManager());

final ViewPager mPager = (ViewPager) findViewById(R.id.pager);

mPager.setAdapter(mAdapter);

2) Create an On Page Change Listener for you View Pager instance:

mPager.setOnPageChangeListener(new OnPageChangeListener() {

      @Override  
       public void onPageSelected(int position) {}

      @Override
      public void onPageScrolled(int position, float offset, int arg2) {}

      @Override
       public void onPageScrollStateChanged(int state) {}
}

3) The idea is to reduce or increase the alpha value of each fragments parent layout as you scroll in and out of the fragments. I have three fragments, each with one parent layout:
Fragment 0: achievementLayout
Fragment 1: dbLayout
Fragment 2: adHocLayout

Before you can increase/reduce the alpha levels on these layouts, you need to retrieve your layouts in the onPageScrollStateChanged method. I found it best to get the current page being scrolled in this method itself, using the SCROLL_STATE_DRAGGING event. The page being scrolled is being stored in temp_page. 

@Override
public void onPageScrollStateChanged(int state) {
       //define layouts once
       dbLayout = (RelativeLayout) findViewById(R.id.dbLayout);
       adHocLayout = (RelativeLayout) findViewById(R.id.adHocLayout); 
       achievementLayout = (RelativeLayout) findViewById(R.id.achievementLayout);

       //once dragging starts capture the dragged page
       if(state == ViewPager.SCROLL_STATE_DRAGGING){
              temp_page = mPager.getCurrentItem();
       }
}

4) Now that we have the page being scrolled and the layouts, we can start the fade in fade out. This will happen in the onPageScrolled method. 

@Override
public void onPageScrolled(int position, float pos, int arg2) {
        switch (temp_page){
        
             //Fragment 0 scroll
             case 0:
                  achievementLayout.setAlpha(1-offset);
                  break;

             //Fragment 1 scroll
             case 1:
                   //swiping to higher
                   if(temp_offset<pos){
                           dbLayout.setAlpha(1-pos);
                           adHocLayout.setAlpha(pos);
                  }
                  //swiping to lower
                  else if(temp_offset>pos){
                          dbLayout.setAlpha(pos);
                          achievementLayout.setAlpha(1-pos);
                  }
                 temp_offset = pos;

                 break;

           //Fragment 2 scroll
           case 2:
                 adHocLayout.setAlpha(offset);
                 dbLayout.setAlpha(1-offset);
                 break;
      }
}

Offset value starts from 0 and goes up to 1 when a fragment is scrolled from left to right, and vice versa when scrolled from right to left. Hence alpha is set either directly or by doing a (1-offset). The tricky part here is how to determine if the fragment is being scrolled left to right or right to left in the case of the middle fragment (Fragment 1). To overcome this, I used a temporary variable temp_offset to capture the offset value and compare it to the next offset value, if temp_offset is lower than the next offset, then the fragment is being scrolled from right to left and vice versa. 

There are a few other minor tweaks which you can make to smoothen the scroll and the flickering. But if you've understood the above piece, that is child's play.

Hope this helps.

Till next time.

Wednesday 20 November 2013

Achieve Higher Ranks and Better Downloads for your Apps

Before I start rattling off, let me make it clear that I do not have millions of app downloads against my name, nor do I advocate not marketing your app. I am just stating my experience below.

I have launched 2 apps in the Google play store and I have managed to achieve a better ranking resulting in a higher number of downloads. My Fuel Buddy app used to be ranked 350+ in the Play Store, this has now come down to 120. My downloads have also significantly increased, I used to get about 30 - 40 downloads a day for Fuel Buddy. I managed to get these up to 100 - 150. Let me share on how I managed this. Mind you my experience is only in Android and hence these points, as far as I am concerned, are only valid for Google Play Store.

1) Pay Attention to your App Title

The most important thing which will get your app ranked higher is keeping an intelligent title. Whatever is the functionality of your app, try to include that in the title. Google allows 30 letters, try to squeeze in some important key words in the title itself. Eg, I changed my app title to Fuel Buddy (Gas, Mileage Log)

2) Give Frequent Updates

I have observed that there is always spike in downloads for about a day or two after your update. So make sure you churn out updates for your app. This does not mean giving an update everyday, but at least try to stick to 2 updates a month. These updates could be simple bug fixes as well.

3) Release your App in Multiple Languages

This is an obvious one. More languages means a wider audience. And Android makes it pretty easy to do this (as long as you have parked your strings in the strings.xml). I get my translators from Fiverr.com. Its a pretty decent site. With most gigs starting at $5. So usually end up paying $10 for a translation, 5 for the strings in my app and 5 for my App description in Play Store.

4) Strive for more Ratings

You can do this by displaying a pop-up asking the user to rate your app and then re-directing him to your app store page. I display a pop-up after my app has been opened 10 times. The good part is that if the user has been using my app for that long he likes it and more often than not ends up giving a good rating.

5) Get Feedback

Giving the user an option to provide feedback will reduce your chances of getting a poor review. In case a user is unhappy with a feature, he'd much rather reach out to the feedback button than leave a bad review (unless you've managed to really piss him off!!). There are multiple Feedback services which you can implement in your app and they let the user drop his feedback in your mailbox. You can even reply to that mail and the user will receive a response within the app. If you do not want to implement these in your app, make sure to place your email link which the user can easily access.

If you guys have better ideas to achieve higher downloads and improve rankings please do give a shout out.

Adios.

Sunday 17 November 2013

Designing Your Mobile App

So I have been working on my new app, all guns blazing. Which is actually not a very good thing to do. I was very close to completing the app when a few people pointed out some glaring design issues. Though I argued and tried to convince them that what is built is right, I soon realized my mistakes. Even tough I always knew that there was a big loop hole in the app, I went ahead with the design which backfired (luckily before the launch).

So now I am in the process of re-designing the app. And I am trying the be very careful with what I am doing. So here are a few pointers I have come up with which I would like to share with you. And hopefully you guys don't make the same mistake I made.


1) Make sure the core functionality of your app is air tight

By this I mean that you have identified, very very clearly, what your app is meant to do for the user. If your app is solving a problem for the user, what is the problem, and how are you going to solve it. Leave out the peripherals. Think about the first impression your customer will get when he downloads your app

2) Start with a birds eye view

Since we are so excited to develop our idea into an app, we get caught up in the nitty-gritty details of the app. What should my menu button look like, how should I construct my 'About' screen... 
Forget about these things when you are designing the first draft of your app. Zoom out to 1000ft and worry about what your app should look like from up there. Many a times during the initial design phase we start thinking about these trivial things. At that time, remember to zoom out.

3) Design the main screen first

In my case the main screen is the first screen the user will be seeing. This may not be true for all apps. Initially I coded my second screen first, which is the more heavy duty screen, and later had to somewhat accommodate the main screen. This was a huge mistake and cost me almost 2 weeks of my work. So please be very careful while deciding what your main screen is and make sure you design that before all others.

4) Keep it SIMPLE... really simple

We may like to put in a lot of bells and whistles in our apps, and it may appeal to the user as well when he reads the app description, but believe me if he even has a hint of confusion while operating the app for the first time, he will uninstall it without thinking twice. This is because the consumers are spoilt for choice with the millions of apps available. They will not be wasting their time trying to learn your app when they know there are ten others available in the app store.

I hope the few points mentioned above help you out. 

Till next time.

Adios

Friday 1 November 2013

October App Report

Alright guys, as promised publishing my App Download and Income report for the month of October. 

I launched quite a few minor updates for 'Fuel Buddy' and fortunately the audience responded well to those. The downloads are slightly better than September. Not where I want to be but satisfied for now. Once I get time I will be working on including some major features which the users have been requesting, such as sending email reports, adding an option for services,  reminders, etc. I also want to add some in-app purchase components in the app. Hopefully I can get working on those soon.

I have left the Pingy Pong untouched. So understandably the downloads are less than the last month.


October Download and Income report



Fuel Buddy



Downloads in October: 2564
Admob Revenue: $81.06
eCPM: $0.67
Requests:120,610






Pingy Pong



Downloads in October: 1663
Admob Revenue: $17.30
eCPM: $0.33
Requests: 55,357

Wednesday 30 October 2013

My First day After I Quit my job

So yesterday was the unofficial last day of my corporate life. Over 9 years I have spent working in a cubicle, most of the time not interested in doing what I was doing. Yeah, I can say that now, but would not have admitted it last year. Now that I think about it, I should have taken this decision a long time ago. 

About 6 months ago, after a lot of coaxing from the Mrs. I finally mustered up the courage to call it quits and pursue what I have wanted to since quite a while now, build mobile apps. Ever since I was in college, I have wanted to build software for mobiles. Since the days of J2ME and Symbian  I tried my hand at those two but no one would hire for this skill set, so had to settle for what ever was the 'in-thing' then. 

Now that apps for IOS and Android are the real deal, I was like, what the heck, may as well give it a shot. I could give try out being an independent app developer for about a year or so. So, on the 1st of Aug I put in papers. My company has a notice period of 3 months (yeah, 3 freaking months).

Here is what my plan is for the next couple of months, I have an app called Fuel Buddy on the Play store already. Its getting some decent traction, about 100 odd free downloads a day. I plan to add an in-app purchase component to that after a few more updates. I am also working on a new app which I plan to launch early December on the Play Store. 

My goal is to reach a 1000 daily downloads among all my apps. I want to get here till March. That should give me some steady income from ads and in-app purchases. 

I will also be posting my monthly income reports.

Hopefully I can make this work.

Adios.