04-17-2010 10:20 AM
I've jumped the gun before figuring out exactly how Try and Buy works.
I've developed and application whos functionality depends on the license.
Inside the license I have embedded a pseudo date that allows me to expire the demo and not allow then the reinstall the application and receive another free 30 days. Which I thought was pretty clever .... however it seems that the 'trial' versions are determined by the lack of a licenses. So now I have no real way to determine how long this user has been using the demo.
So I was just soliciting opinions on how other people have solved the same issue.
04-17-2010 11:10 AM
We added an active check of our server for trial timeouts. When there is no license present, we ask the user if they want to allow authentication with the server. If they say yes, we send an HTTP POST to a php script which takes their PIN # and checks it against a database. If the record doesn't exist, it generates one with the current date/time as the activation. If the record DOES exist, it compares the current date/time to the activated date/time and determines if the trial is timed out or not.
This way everything is based on our server time and locked to their PIN, nothing is stored on the phone, so it doesn't matter if they change their date/time or get a new copy of the trial.
If they do not allow the authentication, or the trial is expired, we allow them to run a demo mode which has reduced functionality.
When the full version is activated with a license, we do not do any more server authentication.
If you want to take a look, you can grab our demo and get a feel for what we've done: http://www.lcamobile.com/download-demo
04-19-2010 03:04 PM
I simply count and track the number of times the primary algorithm for the app is called. If it's greater than X, then I validate whatever license key has been entered. Users could delete and reinstall the app, but I'm guessing that's too much hassle for the average user.
04-25-2010 09:00 PM
If you write a value to PersistentStore that is a native type (such as an Integer number of days since 1/1/2009 indicating when the app was first run), that value will not be erased when they uninstall the app. If they reinstall, you just look in the same spot for the date.