`syncPurchases` & non-consumable IAPs

  • 18 July 2022
  • 5 replies



Before integration with RC, we had only non-consumable IAPs, now we want to release auto-renewable subscriptions with RC SDK.

We added non-consumable IAPs to the entitlement with subscriptions. That seems to unlock a feature under that entitlement for customers with lifetime access.

So what is the benefit of performing `syncPurchases()` for users with lifetime access since they get the access the entitlement already?


Best answer by tina 20 July 2022, 23:29

View original

5 replies

Userlevel 4
Badge +10

Hey @Martin B 

When migrating purchases from a different subscription system into RevenueCat, we recommend calling syncPurchases once per subscriber programmatically the first time they open a version of your app containing RevenueCat. This method will take the existing device receipt and sync it with RevenueCat.


Hi @tina,

Thanks for the reply.

Still do not understand benefits of performing `syncPurchases()` for users with lifetime access to non-consumable IAPs.

I understand that it’s your recommendation and it syncs receipts with RevenueCat. And if we were using subscriptions then it would be important to do that. But we do not have any subscriptions, we only have non-consumable IAPs. We will introduce subscriptions but with a release that contains RevenueCat integration. So what if we do not sync non-consumable IAPs with RevenueCat? What do we loose?

Our current integration with RevenueCat:

  • we do not perform `syncPurchases()`
  • non-consumable IAP added to our entitlement
  • we use `customerInfo` to detect an access to the entitlement

everything seems to work fine:

  • users with non-consumable IAPs have access to the entitlement
  • and we see them in RevenueCat dashboard

That has been tested on Android.



  • and we see them in RevenueCat dashboard

Although, I’m not sure about the above part (we need to verify that)


Sorry for the confusion: it seems like on iOS `syncPurchases()` is required to check the access to the entitlement using RevenueCat SDK. Otherwise it returns no access to the entitlement.

Userlevel 4
Badge +10

Hey @Martin B!

The importance of syncPurchases here is to ensure RevenueCat has received the purchase, validated it with Apple / Google, and tracking it on our side. For instance, let’s say a customer is on a previous version of the app before the RevenueCat SDK was implemented and updated to a new version of the app with RevenueCat. Without syncPurchases, the following would happen (like what you observed on iOS):

  1. Launch app with RevenueCat
  2. App would check for an active Entitlement to provide the lifetime lock
  3. Since the purchases aren’t synced with RevenueCat yet, Entitlement would be false and customer does not have access to their purchase 

This isn’t a great customer experience here, which is why we recommend calling syncPurchases upon the very first launch when customers update their app to using RevenueCat SDK for the first time. 

The reason that not calling syncPurchases on Android works in this case is due to a behavior of the Google Play Billing Library. On Android, our SDK will automatically sync purchases once the SDK is configured.