Luckily, Unity has released a huge set of statistics for Mobile Devices, and there’s some very interesting details.
You can find the main blog post below:
A couple interesting points here for sure:
The takeaway points for me are that it is not really worthwhile to spend a ton of efforts on supporting the older hardware such as iPad 1 and 3GS. On the other hand, iPhone 4 is an extremely important demographic and you must make sure your apps run flawlessly there.
It’s also quite impressive to see the mobile upgrade stats, with 98% of iOS user’s running iOS 5.1 or higher. That is great news for the HTML dev’s in the room. The general performance characteristics of the iOS userbase remain pretty high as well, with nearly 60% rocking an extremely powerful device (iPad 2 or higher, iPhone 4s or higher).
The Androiod stats also reveal some very positive numbers:
Here we’re seeing Android 2.x begin to twindle down. 4.x is now occupying 70% of all devices, this is awesome news for Android Dev’s across the board as it significantly reduces fragmentation. I’m not sure how to reconcile these numbers with my own though. My numbers from the Android Dev Console show 2.x being much higher…
The next most interesting thing for me, is Samsung’s utter domination of the Android market. We all knew this was the case, but I didn’t realize it was this huge of an ass-whooping:
For a full breakdown of all the stats, check out the root page here:
]]>Over at TreeFortress we’ve put together a massive dev update for our upcoming game Bardbarian. To read all about it, check out the TreeFortress blog!
http://treefortress.com/dev-update-2-bardbarian-treefortress/
If you’re not familiar, Bardbarian is an iOS/Android game, built with Adobe AIR and the Starling Framework, and is slated for a Spring/Summer release in 2013. Follow them directly if you’re interested!
]]>With the cancellation of ASNext, Adobe has left the Flash/AIR in an unfortunate spot where the script execution is the prime bottleneck in GPU rendering across almost every single device. The AS3 VM is not built to handle all the of computations required to push a ton of Vertex data to the GPU, the overhead is just too high.
Philippe Elsass has written up a great solution which would require a very simple API and should be quit easy for Adobe to implement.
http://philippe.elsass.me/2013/02/what-should-adobe-do-to-save-air/
This is a really exciting point in my career. I’ll be making games pretty much fulltime, with total creative control! We are hoping to bring some really awesome stuff to a mobile device near you soon. The Artist on the project is Mike Gaboury, who is just insanely talented and one of the most hardcore gamers I’ve ever laid eyes on. You can check out more of Mike’s stuff on his tumblr: http://mikegaboury.tumblr.com/. The entire initiative is supported by my employer and all around great company, gskinner.com.
Our first project is coming this Spring, and is called Bardbarian:
I you like what you see, please follow us at our blog, http://treefortress.com/. Thanks for stopping by!
]]>This is good news for anyone deploying games to the browser, the so-called “Speed Tax” is gone, huzzah!
For more details see here:
http://www.adobe.com/devnet/flashplayer/articles/premium-features.html
The basic idea is that your app registers for certain events types, and then it will be opened whenever an event of that type occurs. This has endless applications, the obvious ones are sharing text or images between apps, but it can be used for any type of data.
For example, lets say you’re writing a Twitter client, you would register for “bb.action.SHARE”, and then, when user’s select the “Share” option witin BB10, your app and it’s icon, will show up in the Share Menu. When the app is opened, you’ll receive a small data packet which contains the text they want to share!
It’s similar to Android Intents, or the “charms” bar in Windows 8, but in many aways much more powerful. The InvocationFramework differentiates itself in a few ways:
I have to give a hats off to Blackberry on this API, I haven’t dug super deep, but from what I’ve seen they’ve created a very slick system here that will blossom extremely quickly. It’s true they had the benefit of coming last, and they seem to have made good use of it.
For my purposes, I needed to allow my apps to handle Shared Images, here’s how that works.
Step 1: Declare your intentions!
The first step is to edit your blackberry-tablet.xml file (or whatever the kids are callin it these days…), and add the declaration for the types of InvokeEvents your app can handle.
Open up the XML file, and add the following:
<invoke-target id=”com.yoursite.YourApp”>
<invoke-target-type>application</invoke-target-type>
<filter>
<action>bb.action.SHARE</action>
<mime-type>image/png</mime-type>
<mime-type>image/jpeg</mime-type>
<property var=”uris” value=”file://”/>
</filter>
</invoke-target>
For more information on what these fields mean, and the different options, check out the docs: https://developer.blackberry.com/air/documentation/bb10/receiving_invocation.html
Step 2: Listen Up
The other half of this equation is to listen for incoming Invoke Events. This is super simple.
First, open up your document class, and register for the event with the InvokeManager:
0 1 2 | public function MainConstructor(){ InvokeManager.invokeManager.addEventListener(qnx.events.InvokeEvent.INVOKE, onAppInvoke); } |
Then check out the invokeManager.startupRequest to access any incoming data:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | protected function onAppInvoke(event:qnx.events.InvokeEvent):void { //Regular Launch...do nada. if(InvokeManager.invokeManager.startupMode == InvokeStartupMode.OPEN){ return; } //Invoked by another app if(InvokeManager.invokeManager.startupMode == InvokeStartupMode.INVOKE){ //Check to see there's a valid StartupRequest var request:InvokeRequest = InvokeManager.invokeManager.startupRequest; if(request && request.uri){ //Load the passed image! loadImage(request.uri); } } } |
That is basically all there is too it, and you are now integrated into the Core OS, handling any images sent your way
]]>This is usually stored in the Capabilities.os string, and BB10 is no different. To check whether you’re on BB10 you can run the following check:
0 1 2 | //Capabilities.os is 'qnx 8.0.0 blackberry 10' var os:String = Capabilities.os.toLowerCase(); var isBB10:Boolean = ( os.indexOf("blackberry") > -1); |
Here’s an example of some production code I use for all devices:
0 1 2 3 4 5 6 7 8 9 10 | _deviceName = defaultDevice; var os:String = Capabilities.os.toLowerCase(); if(os.indexOf("playbook") > -1 || os.indexOf("blackberry") > -1){ _deviceName = BLACKBERRY; } else if(os.indexOf("iphone") > -1){ //iPhone OS 4.3.3 iPad2,1 _deviceName = (os.indexOf("ipad") > -1) ? IPAD : IPHONE; } else if(Capabilities.manufacturer.toLowerCase().indexOf("android") > -1 || os.indexOf("android") > -1){ _deviceName = ANDROID; } |
In addition to changing the lives of my entire family and giving us near financial freedom, this has given me some pretty neat data for the year, allowing some good comparisons of sales and promotional opportunities across the various stores.
I think some of the results might surprise you…
As you can see iOS dominated the competition, bringing in over 3/4 of all my total revenue. Google was a distant 2nd, with Blackberry and Amazon neck and neck.
Surprisingly, Amazon and Blackberry are actually pretty close to Google Play, despite Play’s massive install base advantage. It’s especially impressive for Blackberry, which is essentially just coasting off of dying Playbook sales. This is probably due mainly to the great promotions I receive on Playbook (PicShop is regularly featured), but the Playbook userbase has always had a voracious appetite for apps. The Amazon numbers are due basically to a freak couple months in Nov/Dec.
Here you can see a monthly break down of relative sales for all market places which reveals more data about the curves of each market:
Each dashed line in the graph represents $10k in revenues. At it’s peak, iOS pulled in close to $40,000 in one month, and you can see that the ‘little’ bars are still pulling in a healthy $2000-3000/month each. I told you it was an insane year!!
In order to analyze the ‘others’ a little better, I took Apple out of the picture:
Sales Curve
iOS showed a pretty steady curve throughout the year. After PicShop sales took off, it maintained those revenues throughout the year. As in last year, I saw a big spike in the Summer months, a decline into the Fall, and then a massive holiday spike.
Promotions
PicShop was featured multiple times by Apple as “What’s Hot”, which lead to nice increases in sales each time it happens. It seems every few weeks it gets cycled into place in some countries.
I purchased a FAAD promotion early in the year which resulted in a huge sales boost for PicShop, and afterwards was approached by a number of free competitors like AppGratis and AppTurbo, which ran even more promotions on the app, this time for free.
In retrospect, running FAAD was one of the best decisions I ever made, as it snowballed everything, and resulted in a ton of new promotional oppotunities.
Later in the year I ran another FAAD, campaign, this time it was a complete flop and my sales actually declined. I’m not sure what happened, but perhaps the service is declining in popularity, or their userbase was just saturated with my app already.
Sales Curve
The revenue curve for Android is pretty much just flat, it sort of just plods along at the same rate every month. I rarely see any spikes, and I have yet to really gain any serious traction in this market place.
So far, Android is proving, by far, the hardest market to penetrate in the top lists. It seems that any app that hasn’t existed for 4+ years has little chance of ranking highly.
It’s still a good revenue source, don’t get me wrong, but it should be alot higher.
Promotions
Google is impossible to talk to. Any attempt I’ve ever had in contacting google’s promotional team has been stone-walled. I just can’t find any way at all to speak to a person.
I have a beautifully tablet-optimized app, when they are desperately in need of them, and yet they have no clue my app even exists, or any seeming interest in promoting it.
I have only ever been featured once by them, as a featured “Photo Editor” and it doubled my daily sales for the duration, and then dropped off. So I made $200/day instead of $100, nothing to write home about.
The Blackberry Playbook sales curve shows strong sales for the first half of the year (coninciding with a big pricedrop on the Playbook), then a major decline in the summer months as Playbook sales slowed to a crawl. December saw a pretty huge resurgence though, apparently RIM was moving some hardware!
Promotions
AppWorld has (by a country mile) the best promotional team amongst any of the major App Stores. I have developed a fairly close relationship with a number of people on the AppWorld team, they reach out to me often for joint promotions/sales, and they have even sent me a couple of BB10 Dev Devices so I can prep for upcoming BB10 launch.
I really can’t express how awesome this team has been, there’s always someone to talk too, and they couldn’t be friendlier.
As an example, I was contacted early Dec to run a combined sale on PicShop, ColorUp and TouchUp for Xmas, I marked all my apps down 50%, and RIM featured them as the primary App of the Day for Dec 23. My revenues basically tripled, how cool is that!?
Sales Curve
This sales curve is really hilarious to look at. Talk about all your sales being loaded into one shopping period! After a really strong Dec, 2011, Amazon sales stepped off a cliff in January. Anemic all through the year, they suddenly surged starting on Black Friday, and had a massive December, launching them up to nearly 3rd spot on my revenue list.
Promotions
Amazon App Store is a funny place. They promote your app, but they are going to do it their way, with or without your knowledge. Often I’ll go to the Amazon App Store and see that my app is 50% off for the day, or my description has been re-written by someone. Amazon does this at their discretion, and they do know a thing or two about running an online store. Still, it’s weird not to have complete control over your own product and promotions.
The other promotion Amazon offers you is the Free App of the Day promotion. Basically, one day you’ll get an email out of the blue, with a long list of conditions, and you must agree to it. Once you do that, Amazon might, someday, maybe, feature your app as App of the Day. It happened a few times for PicShop, TouchUp and ColorUp, the results are nothing amazing, but it will get you into the top of the charts pretty quickly. I’m hopeful this will pay off alot more in 2013.
]]>
The first step is prepping FlashBuilder 4.7 to export to BB10. This is a bit confusing, as I expected it to just work like it did in 4.6, but there’s a couple additional steps.
This is explained fairly well in the docs, but the link is extremely buried, for your covnenience, here she be:
https://developer.blackberry.com/air/documentation/bb10/install_bbtos_sdk_fb47.html#mah1354047470595
Essentially you just:
With that you are now kicking out builds to your brand new BB10 dev device. They’ll install, but they probably won’t run…
You can use any recent AIR SDK, but you need to add some options to force it to target 3.1
The final step is to add all the ANE’s provided to us by BlackBerry, giving access to a wide range of device specific features.