Thanks Kato,
I'm afraid there's not enough implemented to give an actual code/rules/data example yet, but perhaps the following helps understand where I see a problem:
Consider an app that allows all authenticated users to "post" something (while, for example storing their location or some other property of the post), but only users that have paid for it to "view" and "reply to" all posts matching a certain filter (say, all posts that have been made in a certain location).
I can check what posts a user should be able to view by doing something along the lines of
Bundle purchasedFilters = mService.getPurchases(...); //using Google Play's In-app Billing API
//show posts based on the filters the user paid for
Then, when the user replies to one of the posts shown, I do something along the lines of
FirebaseUser user = firebaseAuth.getCurrentUser(); //using Firebase Auth
//get userID, username etc. to build the reply data and store it with Firebase
The problem is that the first piece of code checks against the device account (the user's Google account, which they used to buy the app or in-app products), while the latter checks against the auth credentials the user happens to use with my app (which can be a Google account, but also Facebook or just password/mail - in any case different from the device account).
If I do just that, then non-paying user B could use the app installation of paying user A, log in with his own credentials (which are independent from the device account), and use functionality that he hasn't paid for himself.
If I use consumable in-app products, I can make sure that information about all purchased products are transferred to my database immediately, but in that case I think I can't make use of the subscription model Google Play offers.