We're currently implementing the auto-renewing subscriptions for Google (we started with non-renewing for Apple and implemented already deduplication and validation process on server-side) and the main question right now is the following case:
So the question would be what the expected state should be for Internal B? Basically, the play market (therefore Google BillingClient) will have information about subscription because it tied to Google account, but we expect the subscription to be in effect only for 1 internal account (and it will be because of deduplication process anyway). But in this case, the user has a strange situation when the subscription is already bought previously (when he was logged in with Account A), but not in effect and therefore he can't buy for Internal Account B.
I was trying to find the answer under the following link, but looks like they don't really have a good description of such cases: https://developer.android.com/google/play/billing/billing_subscriptions
It seems to me that we should just provide some UX for this situation, smth like: 'Looks like you've got the subscription, but you're in wrong account'. But would appreciate if anybody can answer this question of what Google/Apple review team expects in this case.
If you look at other big subscription apps, like Netflix or Spotify, you can get some UI ideas of how they manage this. If Internal Account A subscribes on iOS, then logs in on Android, you can show in the UI that the subscription is billed and managed through iTunes.
In the situation you described, if Internal Account B logs in, then the expected UI would be in the "non-subscribed" state. There are a couple edge cases to think about:
If Internal Account B tries to purchase a subscription from a device that's already purchased it, there will be an error that the subscription is already active.
Make sure Internal Account B can't restore purchases for a receipt that was bought by Internal Account A.
At RevenueCat, we store the receipt file and original transaction Id on the user record that made the original purchase, that way we can detect if a different user is trying to restore the same purchase (by the original transaction Id).
As far as policies. The only official policy is that users need a way to restore a previously purchased subscription. If they can do a restore by simply logging into Internal Account, then that is sufficient. How you want to handle the case of "app store account sharing" is up to you. Like most things with mobile subscriptions, it's a tradeoff of development complexity vs. risk.