Search code examples
androidin-app-purchasein-app-billing

Android in app billing: If in app purchase is controlled by primary device account then how to prevent passing accounts


Lets say there is an app that offers in app purchases, If user A came and bought item X from the app then I think from what I understand that his/her primary device account will remember what user A bought (assume the primary email is : userA@gmail.com).

So that now userA@gmail.com knows that item X is a purchased item.

If user A gave user B his/her primary account (userA@gmail.com with the password) then user B will add this email as his primary account, and user B will simply access item X and this is the same for any user that might happen to know user A.

My question:

If user purchases are remembered by their primary account, then how to prevent users to pass their accounts to each other and access things for free?

Any ideas?

Thanks.


Solution

  • This is normal, as you can give your password to another person. In this case, the user remains the same, only the device changes. In-App billing associates a product (consumable/non-consumable) to a userID. The question here is not on the in-app billing side, but in how the game actually handles the item consumption.

    Let's put things in another perspective: you buy something on device A, with account X. Then you try to login on device B, with account X. Your stuff will remain there (sometimes games have a "refresh purchases button", that in fact just call the in-app billing services to retrieve the products/items associated with that userID, so that the game can refresh the items in-game), but if you login with an account Y, that never purchased anything, even on device A, the in-app billing will retrieve nothing (because you never purchased anything in on account Y), so you will see nothing purchased in your app/game.

    You can purchase stuff, and pass your account to other people, but they will not be able to "move" or "trade" items from your account into theirs.

    EDIT: However you can try and add the getPurchases() method, so that it can retrieve the non-consumed items of that userID, after the login.