While we are currently implementing RevenueCat for our (currently free) app, we found following articles.
Due to platform limitations, purchases will be transferred as soon as you call `configure`
https://www.revenuecat.com/docs/restoring-purchases#google-play-on-android
the subscription will be considered inactive since the app stores weren't able to charge the customer for a renewal.
https://community.revenuecat.com/general-questions-7/how-does-revenuecat-manage-ios-subscription-events-such-as-entered-grace-period-entered-new-billing-retry-renewal-from-billing-retry-and-so-on-484
when the renewal comes in, the SDK posts the receipt to our backend, but at this point, you’re an anonymous user. So the backend is transferring the receipt
https://community.revenuecat.com/sdks-51/app-ids-transferring-subscriptions-to-anonymous-users-1171
From these, we imagined following scenario. (Later I found out that similar case has happened and posted in Android app, but had no replies at all: https://community.revenuecat.com/sdks-51/subscription-not-transferred-when-using-another-device-with-same-account-1559)
- User 1 installs and starts an app on one’s iPhone with Apple ID
A1. - RevenueCat SDK
configurecreates anonymous app user IDrc1. - User 1 signed up. User 1’s account has unique user ID,
c1. - RevenueCat SDK
logins with custom app user IDc1.c1andrc1is now merged. - User 1 subscribes monthly plan with
A1.c1now has active product = entitlement = subscription and receipt fromA1. - A month later,
A1is under a billing issue, failing to make renewal. c1Enters New Billing Retry, and receipt fromA1is now inactive.- User 1 installs and starts the app on one’s iPad. Of course this iPad is paired with Apple ID
A1. - RevenueCat SDK
configurecreates anonymous app user IDrc2. - At this point, User 1’s billing issue on
A1has resolved. - User 1 signs in with
c1.
(“Transfer if there are no active subscription” is selected.)
I believe following will happen in iPad:
- RevenueCat SDK
configurewill create anonymous app user IDrc2. - RevenueCat SDK gets updated receipt from
A1. It has Renewal From Billing Retry event. - RevenueCat SDK will report new receipt under
app_user_idrc2. - Since its last state was not active, The receipt from
A1will be transferred fromc1torc2. - When User 1
logins withc1, receipt inrc2cannot be re-transferred (blocked by “transfer if...”) nor merged (c1has one alias already). Subscription is gone. - The only way to resolve this issue is to manually transfer entitlement from
rc2toc1(but how?)
Am I correct?
If I am correct, I don’t think this is some extreme edge case. Billing Retry period is 60 days, anything can happen. Actually you don’t even need additional iPad to reproduce this: just reinstalling or resetting the app from iPhone and not-signing-in until renewal will be enough.
What can I do to prevent this?
