My Experience Making My First Android App (Posted on July 15th, 2014)
Like too many people these days I tend to spend a lot of time on my phone. It's a tough habit to quit. So is playing DotA, my favorite game. Allow me to take you back over the past 3 weeks of getting to know Android development (I'll try to skip through some of the boring parts).
The Start (3 weeks ago)
With the largest e-sports tournament to date kicking off in a few weeks I saw an opportunity to corner a market that's been begging for some attention in the mobile space. A few months prior Valve released an API endpoint to get real time data about league/tournament games going on. This endpoint returns a ton of data! You get player x,y coordinates on the map, what items they have, what hero they are, and much more. Basically, just about everything you need to watch a game without being at your main computer.
I got started out with what I know best, backend development. I build a Node.js/MySQL server to make calls to the Valve API and cache the requests for my app. Now it was time to dive in deep with Java and Android.
Getting Android Studio setup was fairly straight forward and turned out to be a great experience despite the software still being advertised as beta. Upon creating a project you get all setup with some boiler plate code and essentially a running app. Install a few versions from the SDK, create an Android Virtual Device, and you're off to the races.
When it comes down to it I really just needed to read in data from a JSON API and generate a view on the screen. Seems simple enough, right? As with learning any new language/framework I struggled for a bit but then I found a really great tutorial that did exactly what I needed! This post also pointed me to some really good libraries that Square has put out for Android development. I was able to integrate retrofit for http requests and Picasso for image request.
This made it simple to build an API request maker and before long I had data displaying on my screen. After many stackoverflow searches, Android doc scans, and annoying questions to my Android co-worker I was finally making some progress. With the big tournament kicking off on Tuesday I needed to get my app in the hands of users by Monday in order to get some sort of load/beta testing done. After a long Sunday of bug fixes and feature enhancements I finally hand over my $25 to Google to join the Play Store. After getting together a few screenshots and icons of different sizes I'm finally ready to launch!
The Launch (1 week ago)
Hitting the publish button on my app felt really satisfying. In just 2 short weeks I managed to have gone from 0 Android development experience to launching app. But wait just a second. After hitting the publish button I'm returned a link of where my app will be visible in a few hours. A few hours?! Ain't no one got time for that. After so much hype and anticipation I'm left in a waiting cycle. It's midnight where I am but no matter. I've spent so long working on this app I can't wait to see it when it goes live. After a few DotA games and many F5's my app is finally downloadable from the store. SO COOL!
After some much needed rest I setup my "press release" on the DotA2 subreddit. Send the link out to some friends who I know have been waiting to test this bad boy out and I'm off to the frontpage. I'm not the greatest product marketer in the world. My strategy usually just involves Reddit+Hacker News or bust. Luckily it worked out for me and about 2500 downloads later I'm left with a 4.99 rated app in the app store. One day in and I've got 100 reviews on this thing with all sorts of awesome feedback. Of course with all things there are some bugs and enhancements that needed to be made.
It was starting to become apparent though that my hardwork and dedication had paid off. Now it was time to start adding the features and making this thing a staple in every DotA fans' phone. A lot of the feedback requested more data on the live game screen which was slowly added in over the course of the week. Another DotA fan even made this awesome product to convert Twitch streams in to low bitrate audio. After reaching out to him for permission I got the stream working in the app.
I created a service to run the media player in the background which would stream the audio. For some reason I found it super cool to have my little app icon displayed in the notification bar while sound was coming out of it. Creating a foreground notification service actually proved to be pretty simple too. Props to the Android team for making the API so easy to use (though also easy to misuse aka background audio stream with no easy way to stop). I also deviated from my Square library stack and used EventBus to pass an event from my service to the app to let the app know the stream had asynchronously loaded.
Adding in an audio stream and doing a bunch of Android related stuff I had never used before at 2am on a weekday eventually did lead to some issues. On my way to work I noticed a bug in the app where refreshing a screen would could the app to try and re-register the event listener for when the stream was done. Unfortunately for me I had no easy way to fix this for the next ~10 hours. I committed a big nono, pushed a bad build. All day I had thought I was ruined. I just wasted the last 2.5 weeks of development. Eventually the Android developer console updated (why does this only update once every 24 hours?!) and showed that I had gained another few hundred installs and had only lost 47ish users. I still had a chance!
The fix proved to be easy and I was free to continue adding more features. Having to wait for google stats though can get kind of annoying. Maybe I should think about adding some sort of analytics. Well of course Google provides an easy way to get this done. Unfortunately it also requires adding a new permission which is one the big praises I got for my app, no permissions required. Perhaps the analytics could wait a bit. I still had other more important features to finish up and I didn't want to risk further version fragmentation before I got some of the new cooler features in. What I mean by further fragmentation is that of the ~10 versions to date I had people on every one. Luckily most users seem to be proactive in updating or auto-updating.
Off to adding more features to my backend to send over more data to my app!
So you may be wondering why I haven't posted a link to my app yet. Nothing wrong with a little shameless self promotion right? Well unfortunately my experience with Android development took a turn for the worse today. In my inbox today I found:
This is a notification that your application, DotA Companion, with package ID com.teamtol.dotacompanion, has been removed from the Google Play Store. REASON FOR REMOVAL: Violation of the intellectual property and impersonation or deceptive behavior provisions of the Content Policy. Please refer to the IP infringement and impersonation policy help article for more information.
Uh oh what did I do wrong? In my app description I gave fair notice that DotA was trademarked by Valve, just as every other DotA app on the market has done. All the data from my app is pulled from Valve's API. I have no ads and there is no charge for the app. I'm not really sure where I went wrong. In the e-mail Google provides a link to apply for an appeal. You're limited to a 1000 character appeal, but that's ok because I have no idea what I'm appealing since I have no idea what IP I'm infringing on. In my appeal I simply ask for further information so that I can get the proper permissions if needed.
After submitting my appeal I notice a little live chat button at the top. Whew, I'm sure I can get this resolved in a few minutes. I guess I should have known Google's technical support wouldn't be so great. After talking with one of their representatives he told me it was company policy to not discuss company made policy about why specific apps were removed from the store. Ok Google is covering themselves. Totally understandable for a company their size. I guess I'll just wait a few hours. Surely they'll get back to me shortly about such a pressing issue.
In the meantime I search around for other people having this issue and happen upon a DotA related thread. Apparently this is happening to other app developers in my area. What this doesn't explain is why there are still so many other DotA apps on the market. I have a hard time believing that Valve is reporting apps that use their APIs and fit to their webAPI policy.
After searching around I find it harder and harder to see how this is going to turn out well. Several people report that Google has not given them any information about their infringement when requested for it. Apparently just an automated response is returned of appeal accepted or denied.
The tournament this app was initially designed for is on break until Friday. Hopefully this issue can be fully resolved by then. With 3,500 users waiting for new features, here's to hoping for the best possible outcome!
P.S. If you or someone you know has any guidance on this issue I'd be happy to listen. Let me know.
Update: "We have reviewed your appeal and will not be reinstating your app. This decision is final and we will not be responding to any additional emails regarding this removal."