While a new app user would have empty entitlements, a workaround would be to call syncPurchases
before manually checking eligibility as mentioned in Sharif’s comment.
@cody Do we need to call syncPurchases
if we call the logIn
method before checking entitlements? Or is this required regardless to make sure everything is re-synced with RevenueCat?
@Radu S @ghita What hack are you currently using to check for this at the moment?
Hey all,
While a new app user would have empty entitlements, a workaround would be to call syncPurchases
before manually checking eligibility as mentioned in Sharif’s comment.
This method will take the existing underlying purchases, re-sync with RevenueCat and transfer to the new user ID, and return CustomerInfo
with information about the previous purchases (which you can then use to manually determine eligibility).
This is very important for my client too, the app has explicit trial text in key areas and that info has to be accurate for our users.
L.E.: Just to clarify, I’m talking about the case mentioned above, with different app accounts but the same Google account in the Google Play app.
@sharif Can you please clarify how we are supposed to handle the case outlined by @ghita above?
If I delete the user from RevenueCat, then recreate a customer with the same Google account, but a new ID in RevenueCat, you will tell me that the user is entitled to trial because there are no entitlements or previously purchased products, but Google Play will say “Not eligible for trial” when we try to purchase a subscription with trial for that same user.
Is there any update on this?
I have one google account > I purchase a subscription > I make an app account > I cancel the subscription, I delete the app > I reinstall the app > (I have the same google account) > I present the user the available subscriptions without asking him to create an account :
→ the way suggested by @sharif will return me empty entitlements at this point, even if the same google play account had in the past a subscription. so, because of empty entitlements, I present to the user that he’s eligible for a trial subscription, but when the native google play dialog opens, user sees the message that he’s not eligible for a trial.
purchaserInfo.entitlements.all
→ will return the right entitlements only if you use the same app account, but users use the same google account but different app accounts.
Also in my case purchaserInfo.entitlements.all
is empty even though the user have already participated in the free trial. What to do @sharif ?
@sharif Wouldn’t purchaserInfo.entitlements.all
always return empty object if it is a new app user regardless if his Play Store account is eligible for free trial or not?
For example, a one time free trial was already used with Play Store account, but with different app account. As a result, by using this method we would display intro price and may confuse the user.
@sharif Any updates on this?
Since there’s no checkTrialOrIntroductoryPriceEligibility
method on Android, you have to manually check whether a product has been purchased before showing an intro offer.
If you attach your products to entitlements, this can be done by looping over the EntitlementInfos
found in the PurchaserInfo
(Kotlin and Java save you from looping by using the isNotEmpty()
method):
if (purchaserInfo.entitlements.all.isNotEmpty()) {
// user has had access to an entitlement which means they're not eligible for the offer
// remove offer messaging
} else {
// user has never had access to any entitlements
// show intro offer
}
If you want to check whether a user has ever had access to a specific entitlement:
if (purchaserInfo.entitlementse"your_entitlement_id"] != null) {
// user has had access to "your_entitlement_id" which means they're not eligible for the offer
// remove offer messaging
} else {
// user has never had access to "your_entitlement_id"
// show intro offer
}
If you don’t use entitlements, you’ll have to use the allPurchaseDatesByProduct
property of the PurchaserInfo
to check if a product has been previously purchased.
@sharif It seems that the Android wrapper (Unity SDK) is calling something when using the CheckTrialOrIntroductoryPriceEligibility method.
Is this not working or did it change recently?
With this method you can’t detect if an user was suscriber without use a trial/intro period. So this works only if all your suscriptions has intro/trial offer. What happens if the first subscription was without offer → Unsuscribe. If you send a trial offer this code wont show it, because the user had bought this entitlement before.
Since there’s no checkTrialOrIntroductoryPriceEligibility
method on Android, you have to manually check whether a product has been purchased before showing an intro offer.
If you attach your products to entitlements, this can be done by looping over the EntitlementInfos
found in the PurchaserInfo
(Kotlin and Java save you from looping by using the isNotEmpty()
method):
if (purchaserInfo.entitlements.all.isNotEmpty()) {
// user has had access to an entitlement which means they're not eligible for the offer
// remove offer messaging
} else {
// user has never had access to any entitlements
// show intro offer
}
If you want to check whether a user has ever had access to a specific entitlement:
if (purchaserInfo.entitlementse"your_entitlement_id"] != null) {
// user has had access to "your_entitlement_id" which means they're not eligible for the offer
// remove offer messaging
} else {
// user has never had access to "your_entitlement_id"
// show intro offer
}
If you don’t use entitlements, you’ll have to use the allPurchaseDatesByProduct
property of the PurchaserInfo
to check if a product has been previously purchased.