Discussion and help from anything related to RevenueCat.
Recently active
Hello, We noticed that all our users on RevenueCat dashboard have “Transfer to new App User ID” as a transfert behavior, is it normal?I’m wondering if we are doing something wrong here. Thank you for your help!
How do I process pending transactions using revenue cat? When a transaction is pending, does revenue cat handle it automatically or do I have to do something special? Can someone help?
I’m using the following to purchase inapp using revenue cat if let offerings = offerings { for offering in offerings.all { let packages = offering.value.availablePackages if let indexOfItem = packages.firstIndex(where: { $0.storeProduct.productIdentifier == productId }) { let package = packages[indexOfItem] Purchases.shared.purchase(package: package) { (transaction, customerInfo, error, userCancelled) in if customerInfo?.entitlements["sumizeit_premium"]?.isActive == true { Task { await self.purchase (vc: vc, productId: productId, product: productId) } } } } } } Is that the correct code to make purchases? When I use that code I’m able to purchase, but apple server notifications do not work. I don’t get an apple server notification and the forwarding does not work. Can someone help please?
I use Webhooks to register purchases and unlock premium features for the account that purchased the product. I have made a purchase with one Account, lets call it User A. After the subscription expired, I logged in with a different Account, lets call it User B. Of course I called Purchases.logIn(UserB.id) in my app. I then purchased the subscription again and confirmed that it uses User B’s id as the app_user_id in my app. However in my Dashboard and my Webhook it still shows that User A made the purchase.This happend in a Sandbox environment and I used the same Apple Id for both purchases. My RC Project uses the Restore behavior “Block restores”.Can someone explain this behavior to me? I had expected that the Customer Id in my Dashboard is always the app_user_id that makes the purchase in the frontend. Is that not the case? I’m really confused and couldn’t find anything about this behavior in the docs.
My understanding is that while there is a concept of sandbox versus production purchases, there is no concept of a development versus production users. And since we can’t filter by custom user attributes, stats that involve factoring in the total number of users, like subscription rate, will be off in charts and experiments.Off the top of my head, some solutions might be:Mock RevenueCat outside of prod. Delete development/test users when I’m done with them. Accept that some metrics will be off. Perhaps use a separate analytics service for those.Is my understanding correct? And is there an official recommendation for how to handle this?
Hi there,I saw a post 6 months ago saying customising fonts for Flutter Paywalls was on the list and can see that it is an option in the paywall editor, just not accessible/working for Flutter. Is this now updated? I can’t seem to customize my fonts for my paywall at all
We’re working on migrating our in app purchase code to StoreKit 2 and to stop using “receipts” for purchase verification on iOS. We manage this ourselves so we can update information in our backend when a purchase is made. But I want to send the transaction to RevenueCat. The documentation for `v1/receipts` is not 100% clear to me. Does the `fetch_token` support both the legacy receipt and a `jwsRepresentation`?
According to the Firebase Integration, it uses an event name called “purchase” as the default. This is different than the GA / Firebase event name that is used as default “in_app_purchase”. Is this correct?Are they in fact distinct events?
I’m curious to see what the RevenueCat folks, as well as other users, make of Apple’s just-announced change in policy regarding directing users to make purchases on the app’s website: https://developer.apple.com/support/storekit-external-entitlement-us/ I think that this change has something to do with recent anti-trust lawsuits, possibly involving the Fortnite people. But, if you read through the article, it sounds like Apple is not only making a lot of demands on how to make use of the new policy, but they are also expecting developers to continue giving them a cut of the sales, including the ones made on the app’s website, if users clicked a link to the site from within the app (although I don’t know how they plan to enforce that). Thoughts?
“RC doesn’t automatically cancel a subscription if a user purchases a different IAP (e.g., lifetime package). For Apple, though, developers aren’t allowed to change a user’s subscription, so you should instead notify your user to cancel their annual subscription if they purchase lifetime as well.”Sorry for the long post but with the above context, but I have some questions around my iOS App.Do you mean we should detect the above activity after user has purchased and then notify them to cancel?Can we notify the user about this when the user is about to buy an IAP inspite of having a subscription and vice-versa? If we are using the configurable paywall v2 - presentPaywallIfNeeded - will this case be handled automatically? Apple servers are down today so unable to check this scenario.I have gold monthly, gold yearly, and platinum lifetime, all configured under 1 entitlement and showing up on the paywall and I am relying on the configurability of the paywall to handle this type of scenario
I have two customers showing up in my sandbox customer list but I can’t delete them.When I click on them, they don’t pull up but they still show up in the list.How do I contact support to help me delete these customers that refuse to go away?Another post says it could take up to an hour but it’s been over a day.
We’ve integrated Customer Center (Flutter SDK 8.6.1) in our Flutter app, and about 40% of the time the app crashes when it’s invoked. Also, the Cancel subscription function doesn’t work (at least not with Sandbox purchases). It just keeps saying Cannot Connect.
Can I create a horizontally moving component?Right now, it can only scroll up and down.Is it possible to add horizontally scrollable cards between these lists?
I’ve been finalising my paywall and after too much time stewing over the hero image, finally tried to upload it. I followed the guide that the image should be below 5MB and 2:1 ratio for Siamese template.No image appeared.I then tried it in my app, just in case it was a Preview bug - still nothing, just solid black.Different bit depths and original image sizes made no difference - I wasn’t seeing any errors in the web editor.Finally tried exporting a jpeg and it’s accepted. Failing png Bigger failing png Working jpeg
I saw this post in which RC says that paywalls generated by RC must always be swipe-down-able, or dismissible.That means it’s not possible to use a RC paywall as a hard paywall that cannot be dismissed?I’m sorry but that’s whack.Can you please change this and allow paywalls to exist as full screen experiences that cannot be dismissed?
Hello team!I’m configuring a Paywall with the new v2 version. For iOS I’ve managed to make it work perfectly.Now, on Android it seems to be all correct, but the paywall shown is not the one I have configured, it seems a basic default one.I’ve checked and I have the correct Products and Offerings, as I always check it with the getOfferings function in the app.What I can do, do you know what could be the problem?Thanks!
I want to generate codes that offer a free year of subscription and use Web Billing for this. Is this possible?
In my Android Jetpack Compose app I am using com.revenuecat.purchases:purchases 8.14.0 and com.revenuecat.purchases:purchases-ui 8.14.0. The paywall is displayed like this: import com.revenuecat.purchases.CustomerInfoimport com.revenuecat.purchases.models.StoreTransactionimport com.revenuecat.purchases.ui.revenuecatui.Paywallimport com.revenuecat.purchases.ui.revenuecatui.PaywallListenerimport com.revenuecat.purchases.ui.revenuecatui.PaywallOptions...Paywall( PaywallOptions.Builder({}) .setListener(object : PaywallListener { override fun onPurchaseCompleted( customerInfo: CustomerInfo, storeTransaction: StoreTransaction ) { if (customerInfo.entitlements.active.containsKey(ENTITLEMENT_ID)) { setShouldPaywall(false) } } override fun onRestoreCompleted(customerInfo: CustomerInfo) { if (customerInfo.entitlements.active.containsKey(ENTITLEMENT_I
setAppsflyerID(AppsFlyerLib.getInstance().getAppsFlyerUID(context))The source code above is used to set the AppsFlyer ID.But it only works the first time. Consider the use case below:The user install the app and open it. The setAppsflyerID is executed, setting the ID to "AAA-AAA" The user uninstall the app The user install the app again The setAppsflyerID is executed, setting the ID to "BBB-BBB"From now on, on AppsFlyer the user is "BBB-BBB", but since the set does not work on RC, it stays as "AAA-AAA", making any type of integration between platform impossible, because they are referring to different users. Does anyone else have the same issue? For some reason is this the expected behavior? If so, what will happen for the use case I mentioned? *The same behavior happens on Android and on iOS.
What would be the best way to give the user a free month if they are already had a subscription? We want to implement a referral reward system in our app and the user can redeem multiple free months separately so we would want them to stack if possible.I’ve seen that both iOS and Androids have Promo Codes we could give to users but those seem to be for new users:https://docs.revenuecat.com/docs/ios-subscription-offershttps://docs.revenuecat.com/docs/android-promo-codesI did see that RevenueCat has an API to extend this as well, but wasn’t sure how that would work. Is RevenueCat that one that tells Apple or Google to charge for the subscription again? If not does it tell Apple or Google to not charge until a certain time? Do they stack? Here is the url to the API:https://docs.revenuecat.com/reference/grant-a-promotional-entitlementThanks for the help!Asher
Is there a way to add user info when they purchase, like email for example?
HiI implemented RevenueCat in my Flutter app. Now I am testing on my real Android device. It usually works, but sometimes not as expected.My greatest concern is that sometimes SandBox data and Play Store data aren’t synchronized. I made a purchase and it renewed 5 times as I can see on Play Store, but on Sand Box Revenue data it says it renewed only 2 times (once it was 4 times, and in other occasions it was 5 times as it should be). What does this mean? If user renews subscription, user will see he is subscribed on Play Store, but he won’t have premium access since I only rely on RevenueCat regarding someone is premium or not. How is this possible to not have full synchronization? This is major bug.
I am integrating Stripe with the Pricing Table component for subscription management, but I’m facing an issue: this component doesn't allow passing metadata during the checkout process. Currently, we store the app_user_id value in the metadata of the Stripe Customer.Is there a way to pass this app_user_id or other identification values to RevenueCat after the subscription is created via the Pricing Table? We want to ensure that RevenueCat associates the purchase with the correct user using this data.
I just started using the Paywall editor to test the new Paywalls, and even though I have set text color of white in multiple instances (CTA button, text inside Paywall), the text has different color when I test it in the android emulator. I am using the Paywall composable as suggested by the docs (code is in kotlin for Kotlin/Compose multiplatform projects). Is this an SDK problem? Does anybody know? val options = remember { PaywallOptions(dismissRequest = { navigator.pop() }) { shouldDisplayDismissButton = true } } Paywall(options)I want to include an “Edit Text Field” where the user can type a discount code, and activate therefore another offering by clicking a button after they have typed the correct code. Is there a way to do that with the Paywall SDK?Thank you.
Hi guys,Our Google Cloud API usage by service credential given to RCis very high and we are trying to figure out how to optimize this.The first thing we notice from our Google Cloud dashboard is that RC is calling two similar APIs but with different versions:androidpublisher.SubscriptionPurchasesService.Getandandroidpublisher.SubscriptionPurchasesV2Service.GetThe failure rate of the first one is 100% and we are getting over 100k requests of this per day.How can we turn this off?If not, then is there a good reason for having this?
Already have an account? Login
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.