Question

I am developing the monetization model for my iOS app and need some help on related technical questions.

Current application workflow is the following: users do some actions which require heavy use of the cloud resources (for which I am paying). These resources are quite expensive so I don't want my users to load them for free. I can imagine two possible options in such situation:

  • The app in AppStore is free and provides very limited functionality, users must buy in-app (auto-renewable subscription in fact) to get access to cloud resources.
  • The app is not free and when users buy the application they get free subscription for the first e.g. 30 days - after that they must pay monthly.

I know how to implement the 1st solution, but there are problems with the second one. How do I know that the user JUST bought my application (not re-installed it)? Is there a way to do this?

Was it helpful?

Solution

One approach to your 2nd option could be for the app to register the current device with your service upon first launch. If (and when) that device had been registered previously, deny access to cloud functionality. UIDevices identifierForVendor will be sufficient for the task.

This would still allow the user to use the free month a second time on another device he owns though, or if he switches to a new device.

As an alternative, you could require the user to set up an account with your service, but of course there would be no way to prevent a user from creating multiple accounts.

A combination of both approaches may be able to reduce missuse, but it is unlikely you'd be able to completely suppress such attempts.

If you need to rule missuse out as far as possible, you probably need to stick to your first approach. For your second option you might want to try to factor potential losses from fake accounts / secondary devices into your pricing scheme.

The bottom line answer to your question however is: You can't know for certain if a user has reinstalled your app on a device other than the one he fist installed your app on.

Edit: Turns out I missed the fact that the value returned by identifierforVendor won't persist. Unfortunately, that means you'll either need to stick to your first approach or rely on an account system to which the user needs to register. On second thought that may be the better approach - depending on the kind of content the user will be able to store in he cloud, the user might be reluctant to use several accounts anyway since the data in the cloud is tied to the account. Thus, multiple accounts may actually be a non-issue (just like it is impractical to keep multiple dropbox accounts).

So the answer to your question is actually: You can't tell if the user is re-installing your app.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top