28 December 2011

Check the certificate of an APK

Following previous post, if you lost your certificate file, you have 2 problems
1/ you won't be able to update your APK on the market anymore
2/ you are unable to retrieve details about the certificate used

While there is NOTHING to do for the first problem, there is a way to retrieve the certificate information.

Coming with jdk, you should use jarsigner :
jarsigner.exe -verify -certs -verbose <app>.apk

For each file of the apk, it will give you something similar to
X.509, CN=WillNa, OU=, O=, C=FR
[certificate is valid from 19/12/10 08:38 to 19/12/35 08:38]

this is the certicate details available.

Retrieve information from your p12 certificate

Some days ago, one of my distributors asked me a package with a 30 years long certificate. I was pretty sure my current package was long enought but I didn't remember how much so I looked for a way to get it from this cryptic p12 file.


Be sure you have a jdk and not a jre installed else keytool won't be available.
The command to read information from a .p12 certificate is
keytool -list -keystore <certificate_file>.p12 -storetype pkcs12 -v

the magic option is -v
This way you could see the full informations

My p12 was 25 years long, it seems Google asks 30 years long now

Warning : it's not possible to update the certificate, the only way is to create a new one with the same informations and 30 years validity.
Sadly, doing this cancels the update system of Android.
Current users won't be able to update your app with the previous certificate, they have to delete and redownload it.

So backup and double backup your certificate !

23 December 2011

Monetize 'cheap' apps

Interesting post on InMobi's blog

It tries to explain you how much you could win in releasing ads based apps vs paid apps.
Of course, you shouldn't forget it for CHEAP apps only !

The side note of this post is that you have 2 ways to monetize your apps : ads or update your sell price ;)

Another even more interesting thing of this post is the linked Excel sheet : it allows you to quickly find if you will earn more advertising your app.

I made a test myself:
* for apps will a small number of downloads, the answer is defintly "NO"
* for 1M+ downloads, the answer is "YES"
Like for money, the more download you have, the more download you'll get !

16 October 2011

Android Market v2 not for publisher

I'm using the new Android Market for some weeks now...
Google successfully made a market...worst than the previous one!

I won't talk about the (un)usability (category on left, search....) but only of a point which affects publisher :
I'm still looking for the old 'new free app' and 'new paid app', I only found top and best value

I don't see how your new released game/app could be a success if people don't even know it was released !
Does it mean you have to made some advertising ? Does it mean you have to rely on (very badly working) keywords, users will so 'discover' you app by chance/mistake ?

So yes, I dislike the new market. The only option I see is to use AppBrain to browse apps and Market to buy and update them....
It's a solution for myself as an user, not a solution as a publisher

Adobe did again...sadly

Some days ago, Adobe released Flash Player 11 for Android.
Great, no ? Enhanced player, 3D support etc....

Well, yes and no, Adobe made (again) the mistake to release an heavy app without App2SD support....
On my HTC Desire, it needs 17M of internal memory, almost as much as AIR (which at last support App2SD now)....
It's not a problem on my Nexus S but I had to remove 2 or 3 apps on my Desire to install FP11...
At this rate, for the next version, I'll finish with a Desire with bundled apps + AIR and FP only...
(yes, Google Earth, Map and Market are just too heavy also)

Does it mean my Desire is now a obsolete smartphone ? Does it mean Adobe optimized their player for speed nor for size ?
I don't know but if you read the comments (at least here in France) on the market, it's only complaints about the size, not the new capacities... Not very good....

10 September 2011

Poor fill rate for Asia, sadly

While working on AIR's UserAgent bug, I noticed a LOT of Korean are actually playing my games...

It's a good news and I'm happy I recently was able to sign an agreement with a korean market to distribute Penguinoid.

The bad news is I'm currrently not winning a penny from Korea : the several ads network I use don't support Korea or very poorly ( 1 or 2% fill rate, even with a working user agent )

He! Advertisers! What are you doing ?! I could tell you korean are using Android a lot RIGHT NOW!
And it seems Taiwan is coming too....

Learn Dari on Android thanks to AIR

Some weeks again, I finished an app I personnaly use : Dari AlefBe
This app help you to learn the Dari's alphabet.
What is Dari ? Wrongly called Farsi or persian, tt's one of the 2 main languages in Afghanistan.
Mainly in the north part of Afghanistan, including Kabul.

This app was made using Flex 4.5 and its mobile version.
It's my first app using Flex for mobile since my games use pure AS3.
I must say I'm not totally happy with Flex 4.5 Mobile.
The way they defined the skins according dpi, the default navigator, the buggy BACK key handling are some of the reasons why I not totally like it. I probably blog about these soon.
You could also add the fact they changed the defaut mobile skin from the beta : it is no longer Android-like, so I had to redefine almost every skin of the component I used.
Hopefully, gesture and effects are working very well. It was easy to make the Flash Cards !

How to (not) win money with AIR for mobile

Last week, I analized the ads fill rate for my games on several market.
I was very surprised to find a poor 8% max for my Android games while almost 25% for the WillNa website and Poulpytris Flash Lite.

So I tried to find the difference, using my own ads request log....and found it:
This is the UserAgent I receive from some guys on Poulpytris
 mozilla/5.0 (android; u; en-us) applewebkit/531.9 (khtml, like gecko) adobeair/2.7
When you look first, nothing strange...but then I looked at my log about WillNa.com and found this one
Mozilla/5.0 (Linux; U; Android 2.2; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1

Well, it seems there is a lot of differences, no ?
For whatever reason, AIR use its own UserAgent.
It wouldn't be a problem if it didn't use a partial UserAgent!
In AIR default UserAgent, no android version, no device ID.
These 2 points are a MAJOR problem when you monetize your app throught ads : Ads network use these info to give you the ads ! No info, no ads or a basic one times to times.

Hopefully, there is a solution : you can override the defaut UserAgent with URLRequestDefaults.userAgent = newUA;
Now, we need to find a solution to detect the AndroidOS version and device ID.
And again, AIR failed to help us to make money : there is NO way to get these values using AS3 !

After some googleing, I find someone who made a fantastic discovery : these values are available on an .ini file !
Using his NativeDeviceInfo class, I updated my apps everywhere, hoping users will update them quickly.

It's been a week and about half of them update it.
For them, I saw a BIG increase of the ads fill rate which confirm the problem's origin : user agent !

A big thanks to Sidney for his class so !
and another buggy feature for AIR to report, helas ...

16 June 2011

AIR for Android (almost) on SD

From Alessandro, AIR 2.7 for Android was released 2 days ago...
The main changement I quickly jumped to was the ability to AT LAST move the runtime to the SD Card.

I was about to post about the real problem of this runtime : its size.
I made a quick stats on the french Android Market and about half of the comment are something like "too heavy and don't know what it is needed for so... deleted!"
On the other half, half (so 1/4 of the total comment) claimed they use a custom ROM (the infamous Cyanogen) to move the runtime on the SD.
You see the point : about 3/4 of the comments are talking about the size of the runtime. It also means 1/2 of users deleted the runtime...and so won't install it anymore even if you publish an awesome (air) app/game.
Note I don't know if it's the same in US or UK, I only talk about France.

So, I was more than happy when reading the news 2 days ago!
Hélàs, my happiness was equal to my sadness when I finally updated AIR on my Desire : of the 16Mo of the runtime, ONLY 5Mo are moveable to the SD card....
Come on! It's better but far to solve the "too heavy" criticism!

I think you could argue Google Maps is almost the same size...but I think you can't compare this because Google Maps is Google Maps (people want it) where AIR is ... what? (1/3 of people don't even know what the need for!)

16Mo for the runtime plus x Mo for any basic app generated with Flex 4.5
The more I use this solution, the more I think it's not the good way....
AIR shouldn't be needed and the apk generated should be (translated) native code.
I finally found a middleware which do so... I'll give it a try next month I think.
Note Adobe is able to do this, look at Wallaby (Flash to HTML5) for example....

05 April 2011

All you need to know about icons

If you plan to use AIR to generate Iphone or Android apps, you should bookmark this page ! It will help you to find which size of icons is needed for which version.

17 March 2011

Can't use Amazon to generate money on mobile ?!

I'm finishing an application for Android.
Since it's about the Wii, I thought it could be valuable to include affiliate links to Amazon to generate some money.

Unfortunatly, to avoid in legal issue, I (re)read yesterday Amazon's Associates Program Participation Requirements and noticed this point

7. You will not, without our express prior written approval, use any Content or Special Link, or otherwise link to the Amazon Site, on or in connection with any site or application designed or intended for use with a mobile phone or other handheld device, or any television set-top box (e.g., digital video recorders, cable or satellite boxes, streaming video players, blu-ray players, or dvd players) or Internet-enabled television (e.g., GoogleTV, Sony Bravia, Panasonic Viera Cast, or Vizio Internet Apps).


or, cleaned,

7. You will not [...] use any Content or Special Link [...] on [..] any [...] application designed [...] for use with a mobile phone or other handheld device, or any television set-top box [...] or Internet-enabled television[...].


It's just...awesome!
so I have to delete my Amazon lib from my app and find another way (ads again...) to get some money...

10 March 2011

AIR for Android, Market and Motorola Droid X

Thanks to great guy at FlashGameLicense.com, I discovered my games weren't available to Droid X users.
Why ? Thanks to a small tweet of suzalex from Motorola in October, I found the culprit :

a <uses-configuration> tag with android:reqFiveWayNav set true market filters your app off


Lesson learned : only set configuration, requirement, permission you REALLY need ;)
Beware, Burrito fills some you don't really need while Flash CS5 don't.

06 March 2011

Poulpytris on Market

Following Penguinoid, I published Poulpytris on Market



I hope it will be a success

Penguinoid on Market

It was hard but I finally managed to upload a fully working version of Penguinoid to the Android Market.



If you read my previous posts, you understood my main problem was key handling....
It's now fixed (I hope) so let's the game spreads all over the mobile world...

See you in some months for the full analysis of the results

BUG : changing stage.displayState break key listener

If you ever call
stage.displayState = StageDisplayState.FULL_SCREEN
on your game, this will break any listener you added throught

NativeApplication.nativeApplication.addEventListener(KeyboardEvent.KEY_DOWN,
onKeyPress);

I tried to re-add it listening to FullScreen event, without success...

It's not needed on AIR app, but I share the same code for Web and AIR version.
It's handy when you're online and the player get back to game.

So... only call it if (Capabilities.playerType=="PlugIn") !!

Really Intercept Back key

Following previous post, it seems this way is not fully working on Flex app
It works on AS mobile project but not fully on Flex mobile project.
To make it works, you need to follow the steps defined in SWFHead's post

To resume, you have to override backKeyHandler and provide your own back handling (throught popView)

Grrr.....

08 February 2011

NEVER use Count with SQLite

Let be honest, Flex on Android isn't synonym with "Speed"
Even with a paged array (I won 10sec with it), I was fighting for 2hours with a 15 sec(!) delay before filling a list.

FYI, I'm using a 3000 rows table and id is a key...

If i use
(sql) SELECT COUNT(id) as count FROM mytable
and
(as3) return stmt.getResult().data[0]["count"];
this tooks 15 sec...

If I use
(sql) SELECT id FROM mytable
and
(as3) return stmt.getResult().data.lenght
this tooks 0.4 sec

so NEVER use COUNT!
Google it, you'll find COUNT isn't optimized at all on SQLite

05 February 2011

My games were stolen !

I today discovered a new kind of piracy...

1 month ago I published my (android) games on GetJar.
I planned to publish them on Android Market later (because of the fees).
It's just now impossible :
someone (Jasminstory or his clone integrixx) published my games (which he downloaded from GetJar) on the market, using the same name, the same screenshots, the same icons and even the same UIDs !

Yes, Jasminstory was able to publish air.com.willna.poulpytris from his own...
So, in the future, publish your game ANYWHERE you want to publish them at the SAME time...else someone could do it for you...

You could say "what's the matter? he paid the fees and publish it for you"...but
1/ he was SELLING my free games
2/ he was discovered and so I can't publish my games now, even if they were removed from the market
3/ the air.com.willna.xxx are now with a low profile on the market, few chances to be on the "Top" or "Try them" list now ....

I hope Google will help to solve this issue but it's now clear I won't earn a cent with these games...
so bad...
Nokia bullshit (more on this soon) and now that...
It's not my year, it seems...