1

Any tips on how to implement a trialware model for Android apps? I plan to release my app as a free app that expires after 30 days unless the user buys the license via an in-app purchase.

I can use the Android Market API to tell if they bought the license, so my main question is how to prevent the user from un-installing and re-installing my app every 30 days? Can I save something to their phone in a permanent and reliable way that will remain on the phone even if they uninstall? I know nothing will stop a determined hacker, I just want to stop the average user.

I am also open to different approaches to going trialware on Android.

Thanks in advance,

Barry

Barry Fruitman
  • 12,316
  • 13
  • 72
  • 135
  • @Michael That's isn't what he's asking. He's asking if there is a way of leaving behind an indication the app was previously installed so people don't churn the free trial. To my knowledge, the answer is no, not reliably. – Earl Aug 11 '11 at 16:09
  • Thanks for all the tips! Does anyone have a non-network-enabled solution? – Barry Fruitman Aug 11 '11 at 16:55

3 Answers3

3

Have you read the documentation on Application Licensing? Specifically, have a look at Implementing a Policy

I also have found this resource very helpful in determining the best way to get a unique ID for any one device. Android - Identifying App Installations -- They discuss pros/cons to the different approaches -- Straight from the developer's mouths!

Leah
  • 41
  • 2
  • Yes I looked at the licensing API and it applies only to paid apps. My app is technically a free app since there is no up-front charge. Thanks for the other link I'll check it out. – Barry Fruitman Aug 11 '11 at 16:53
2

I would avoid leaving unwanted remains of the application on their phone.

Instead, you can take some unique identifier of the device, and send it to your server, if this ID was not registered before, send it activation code, if it was, don't send it.

Store this activation code in some shared preferences etc. and when the application starts, check if the activation code is there and if it is valid.

Community
  • 1
  • 1
MByD
  • 135,866
  • 28
  • 264
  • 277
  • This is exactly what I did. For me specifically, my app REQUIRES Bluetooth, and Internet. I use the BT Mac Addy as the ID (because the other methods provided for getting ESN/IMEA are not dependable). I initially post the id to my server, if the id is not in the DB, I request a new trial license. For my application I make a call to the DB to check the trial status each run. This may not fit your needs, but now I have the ability to extend trials as needed :). And unless they purchase a new phone, they cannot just re-install to get a new trial. – Jack Aug 11 '11 at 16:14
1

They don't even have to uninstall, just clean app data. You can save something to an obscure location on the SD card, but that's also fairly easy to circumvent, even easier if they read this forum :) Your best bet is to have the app call home to your server and check if licensed periodically. That of course comes with it's own problems: do you allow it to run if network connection is never available, etc.

Nikolay Elenkov
  • 52,576
  • 10
  • 84
  • 84