0

Android's in-app billing supports subscriptions with a free trial period:

... users [can] try your subscription content before buying it. The trial period runs for the period of time that you set and then automatically converts to a full subscription ...

This is attractive, but such a model is

  • open to abuse (e.g., a free magazine trial would allow a user to download all content)

and, moreover,

  • forces user commitment (i.e., users commit to a subscription, albeit, can make the effort to cancel).

Using the magazine example as an analogy, I'd rather

  1. allow the user to download 10 articles for free, and then
  2. offer the user the opportunity to subscribe.

Intuitively, (1) can be modelled by giving the user 10 items of credit and consuming an item of credit for every download. Once the free credit has been exhausted, (2) can be captured by offering the user a subscription. I can see expensive & insecure solutions:

  • An expensive (server) solution. synx (below) is right: I could setup my own server, but this is expensive.

  • An insecure (programmatic) solution. The app allows 10 downloads before offering a subscription (cf. https://stackoverflow.com/a/18674158/3664487), but a subscription can be avoided by clearing the app's data or reinstalling the app.

I cannot see a viable solution using the billing API. Can the billing API support this?

Community
  • 1
  • 1
user2768
  • 794
  • 8
  • 31

1 Answers1

0

Keep the checks and counter of usages on your remote server and once the limit has been reached don't allow to download anything by that user until subscription is paid. I can't see the problem there, you just have to implement it yourself.

Synx
  • 142
  • 1
  • 1
  • 9
  • Another option could be store the counter inside an app-independent file on the device. The file doesn't get removed after clearing the data or re-installing the app, but the user can find and edit this file or just delete it. In any case, if you store the counter locally it can be exploited no matter what. Without a server, it all relies on how hard you want to make it for the user to exploit it. – Synx Oct 01 '14 at 12:59
  • I understand that a server is required, but can it be a Google server, rather than my own? More precisely, can I use the billing API? – user2768 Oct 01 '14 at 13:08
  • For reference, "[to] store the counter inside an app-independent file on the device," you should probably use a "[file] that can be shared with other apps" (see http://developer.android.com/guide/topics/data/data-storage.html), since these files aren't deleted after clearing the data or re-installing the app. – user2768 Oct 01 '14 at 13:21