Skip to main content

I’m new to RevenueCat and am looking into how I can migrate my existing app’s non-consumable in-app purchases to RevenueCat.

I know this type of question has been asked several times, but none of the answers really answered my question

So far, I’ve looked at using syncPurchases() but as stated in the documentation:

Google Play Store does not provide an option to mark IAPs as consumable or non-consumable. RevenueCat's SDK will consume all Android IAPs upon purchase.

To replicate the behavior of a non-consumable IAP for Android users, you must ensure your user will not offered the IAP after the initial purchase. Failure to do so will enable the user to re-purchase the IAP.

 

...and sure enough, in initial testing, as soon as I call syncPurchases() all of the user’s in-app products are consumed and the Google Play Billing client no longer sees the purchases.

Regarding the first paragraph, when using the Google Play Billing API, we have the option to consume, or not consume the in-app purchase. All of my in-app purchases are one-time payments for lifetime access (i.e. non-consumable).

When migrating to a new service (e.g. RevenueCat), it’s very risky to allow that new service to modify historical purchase data that stretches back (in my case) over 10 years, because what happens if I want to roll back to pre-revenuecat logic? Now I would have to change how I detect purchases (maybe looking at Purchase history instead of active purchases).

Surely I should be able to mark a product as non-consumable, so that when syncPurchases() is called the product is not consumed, and so Google Play purchase data is not touched?

Regarding the second paragraph, I don’t understand it.

As a workaround, I suppose I could avoid using syncPurchases() altogether and just using the Billing library to manually grant promotional entitlements instead?

Hello, please can anybody from RevenueCat confirm that on Android non-consumable in-app purchases are now handled? And does it work by:

  • specifying a product as “Non-consumable”
  • and using the Android SDK version 7.11.0 and up?

As described on the following page:

https://www.revenuecat.com/docs/getting-started/entitlements/android-products#add-non-consumable-products


If so, please edit this page:

https://www.revenuecat.com/docs/platform-resources/non-subscriptions#platform-support


@cody @Yousef , could someone at RC please pick this back up? 

This is still the currently stated status
 

⚠️Google Play Store IAPs

Google Play Store does not provide an option to mark IAPs as consumable or non-consumable. RevenueCat's SDK will consume all Android IAPs upon purchase.

To replicate the behavior of a non-consumable IAP for Android users, you must ensure your user will not be offered the IAP after the initial purchase. Failure to do so will enable the user to re-purchase the IAP.

 

I am not going to let RevenuCat consume years of in-app purchases, and am afraid I’ll have to ditch RC. 

 

@mark147 , @psof-676104, what did you settle on? 


I just ended up using my own backend to manage purchases.


Hi @jakob_is_a_cat,

Sorry about that, the documentation is actually out of date. You can indeed select if an Android product is “consumable” (meaning RevenueCat will consume it immediately as soon as it’s sent to our backend, including any old purchases) or “non-consumable” (meaning that RevenueCat will never consume these purchases.) There’s another page in our documentation that accurately describes this: https://www.revenuecat.com/docs/getting-started/entitlements/android-products#add-non-consumable-products I’ll update the page you shared to reflect this, but to get you started here’s a screenshot of how it looks in RevenueCat.

Note that non-consumable support is supported in Android SDK version 7.11.0 and up. In previous versions, the SDK will always consume the purchase.


Hi @sharif ,

Thank you for following up with the great news! This seems to effectively solve the problem then. Cheers! 


@sharif , does this mean that product will not be consumed on Google’s side too? If I remember correctly the problem we were having with the integration was that all existing products would be consumed on Google’s side.


@psof-676104 that’s correct. The way it used to work was RevenueCat would consume every purchase with Google as soon as they were sent to us. Now, you can choose which products should be consumed, and which shouldn’t. This means that the products that you mark as non-consumable won’t be consumed on Google’s side. Just make sure to update your SDK, I recommend testing it out with a sandbox user first before really going for it, to ensure all of your settings are correct.


That is great news, thanks for sharing!


I have a concern regarding consumable purchases in RevenueCat, particularly with the upcoming changes in Play Billing Library 7.
We have been handling non-consumable purchases through RevenueCat, and in our previous implementation, Android consumable products were automatically consumed. However, in Play Billing Library 7, Google has marked BillingClient.queryPurchaseHistoryAsync() as deprecated.
My questions are:
When this method is removed in the future, will RevenueCat still be able to restore consumed purchase information?
If restoration becomes impossible, this could potentially lead to a significant issue where many users might lose access to their non-consumable purchases that were previously configured in our system.
Could you please clarify how RevenueCat plans to handle this situation and what measures we should take to ensure our users don't lose access to their purchases?
Thank you for your assistance.


@Yoshinobu Ikeda Hi! Sorry for the delay on responding to your question, but we are working towards a solution on this that will allow you to track the consumables from RevenueCat’s end. We hope to have a beta by the end of March, and will share more information later on. 


Reply