How to identify if someone has previously installed (and removed) your app

Hi all!

I believe it’s customary to ask for your patience and forgiveness upfront as I am quite the newbie.

However, just 4 weeks in and I’m loving Corona so far and making slow-but-steady progress towards completing my first app.

I’m having trouble though with one aspect. The payment model I want to employ is that my game is free and comes with one “life”. It’s quite hard to die, but if you do, I want additional lives to be a separate purchase.

I face two problems. Firstly, I’ve not encountered much about how to set this up, although I’m not too worried as I see there are whole tutorials regarding in-app purchases, which I haven’t tackled yet.

What I’m really stuck on is how can I stop users who waste their free life, uninstalling the app, redownloading the game and getting another free life on their fresh install? I figure there has to be some persistent way of identifying the user, but maybe not with privacy/data concerns these days?

Any and all help will be hugely appreciated.

Many thanks!
Andrew [import]uid: 132606 topic_id: 24319 reply_id: 324319[/import]

From the top of my head, the first time the user runs your app you could send the device ID to a server you control and then each time the app is restarted you could send a request to the same server with the device ID to see if there’s a match. This has the problem of requiring internet connection though.

OR

You could just change the way your game works by making sure the user gains nothing by uninstalling and installing it again. He will loose his score, progress, whatever. [import]uid: 61899 topic_id: 24319 reply_id: 98227[/import]

Thanks for the lightening-quick response!

I’ve given a lot of thought to just changing how the game works as that appeared to me also the simplest option but “dying” in the game is conceptually quite an important element.

If I store the device ID on my server, am I right in thinking I would only need to cross-check this once when they first open the freshly installed app? If that’s the case, I imagine requiring internet connection is fairly non-problematic as odds are they’ve just downloaded the app using an internet connection.

Or is your concern that this extra permission sounds invasive to the user and might put them off downloading in the first place?

Thanks again for your help. [import]uid: 132606 topic_id: 24319 reply_id: 98231[/import]

Yes, you could store a field in your settings called “firstRun” that stores either true or false and then check that before making any requests.
The current iOS EULA states that some personal anonymous information regarding the device or the user may be collected, and you can write your own EULA for Android with a similar provision in case you’re worried about legal issues. You can even take an extra step and use a hashing function to scramble the device ID before sending it to your server. That way the ID is never transmitted in the clear and no one is going to be able to see the actual ID, including yourself. I don’t think anyone will be put off by that. Just by running a Corona app the ID is being transmitted anyway.

I can see a scenario where a user downloads and installs the game but doesn’t run it straight away and then, when he runs it for the first time there’s the possibility of him being offline. [import]uid: 61899 topic_id: 24319 reply_id: 98234[/import]

Thanks again for your quick and helpful response!

I can see a scenario where a user downloads and installs the game but doesn’t run it straight away and then, when he runs it for the first time there’s the possibility of him being offline.

That’s a very good point. I’ll bear that in mind. [import]uid: 132606 topic_id: 24319 reply_id: 98236[/import]

This may not be the best option but maybe make users register an email address or account.

Or maybe on first run force them to play through a tutorial. Many users will not want to do that over and over.

Just off the top of my head. You don’t want to take away from the player’s initial experience so this can be tricky. [import]uid: 31262 topic_id: 24319 reply_id: 98255[/import]