Discussion and help from anything related to RevenueCat.
Recently active
Google Play won't allow me to add the subscription items to my product due to "Billing Permissions" in the bundle. The error message is:“To add in-app products, you need to add the BILLING permission to your APK” Team says this in our project and found that it is present in revenue cat sdk.
I tested several devices and tried to subscribe. All of them successfully subscribed using Google Play TEST CARD and it worked get subscription information from RevenueCat (offerings, entitlements, date time, etc.).But on the Customers page, all the customer sandboxes don’t show any value including active subscriptions, even though those users got the correct subscription information in the app. 1 I understand revenue will not increase but why is a subscribed user's entitlements also empty?2Is it because I subscribed using TEST CARDS?
I am working on a app which have tinder like functionality. App functionality1- User will have 2 type of plan, ruby and Gold.2- Each plan will have 3 package like 1 month, 6 months and 1 years.3- based on these plan users will get number of likes and super likes for each day.4- Plan will be auto renewed until user cancel the plan manually.5- App is a cross platform (Flutter) . So If user purchase the plan in iOS he should be able to access the benefits in android version as well. Question- 1- As we are managing the number of likes and super likes for the user on our server. So my question is how can we Check if user purchase, upgrade downgrade or cancel the Subscription. (is there any way revenue cat provide to do this)? 2- If user have purchased the subscription in iOS using apple account (auto renewable subscription). and then he again try to purchase the subscription in android device how this will get managed. Please help me out to understand these points.
i dont know how to fix this error,am getting like this in terminal D/[Purchases] - DEBUG( 6672): ℹ️ Found 0 unsynced attributes for App User ID: $RCAnonymousID:ea91c2a133b14d9e8a8f4837df463bb3D/EGL_emulation( 6672): app_time_stats: avg=4.59ms min=1.73ms max=25.40ms count=54D/[Purchases] - DEBUG( 6672): ℹ️ API request started: POST /receiptsD/[Purchases] - DEBUG( 6672): ℹ️ API request completed with status: POST /receipts 503E/[Purchases] - ERROR( 6672): 🤖‼️ There was a credentials issue. Check the underlying error for more details.I/flutter ( 6672): ---------I/flutter ( 6672): PurchasesErrorCode.invalidCredentialsError
The RC dashboard appears to be able to filter based on products, product duration, etc. However, a Stripe product may have multiple prices. How are we able to determine what stripe product was purchased and the associated price (and duration)? Should we separate out each price into it’s own product in Stripe?
We have had 3 instances where a user has been charged twice for a Consumable Product. We have noticed that this happens when the user receives an error (example of error response below) from the API method in React Native await Purchases.purchaseProduct(productId, null, Purchases.PURCHASE_TYPE.INAPP). Below is a snippet of how we use the API method in a try/catch block. try { setIapLoading(true) await Purchases.setAttributes(userAttributes) log.info('Set user attributed', userAttributes) await Purchases.purchaseProduct(productId, null, Purchases.PURCHASE_TYPE.INAPP) log.info('Purchase successful') navigation.navigate(ROUTE_SIGN_UP) } catch (e: any) { if (e.code !== '1') { log.error('IAP Error for Product: ' + productId, JSON.stringify(e)) setIsOpen(true) } } Error Response:{"code":"2","message":"There was a problem with the App Store.","domain":"RCPurchasesErrorDomain","userInfo":{"readable_error_code":"STORE_PROBLEM","readableErrorCode":"STORE_PROBL
Hello,We would like to report an issue we are facing with the RevenueCat framework.We are implementing the delegate to receive subscription status changes, as it’s recommended in the documentation: https://docs.revenuecat.com/docs/purchaserinfo#listening-for-purchaser-info-updatesQuite often, this delegate is called with invalid subscription information. For example, here is one callback from today, December 13th -- the app wasn’t launched since friday, and instead of fetching the new subscription status (which should be “expired”), it returned an active subscription from December 10th:delegate update info: <PurchaserInfo originalApplicationVersion: 1.0, latestExpirationDate: 2021-12-10 16:04:57 +0000 activeEntitlements: { PremiumAccess = { billingIssueDetectedAt = null; expiresDate = “2021-12-10 16:04:57 +0000"; isActive = Yes; isSandbox = Yes; latestPurchaseDate = “2021-12-10 16:01:57 +0000”; originalPurchaseDate = “2021-12-06 16:39
I just installed RevenueCat via CocoaPods, but after I build/run my app (iOS/macOS), I got 60 warnings for each target. PODS: - Purchases (3.13.1) - PurchasesCoreSwift (3.13.1)TARGETS: - macOS (11.0) - iOS (15.0)Xcode: - Version 13.0macOS: - macOS Big Sur (Version 11.5.2)
Hi there, we’ve been running an experiment with two different annual prices for over a month now:Variation A: $12/mth and $50/year Variation B: $12/mth and $60/yearWe noticed the following behavior:The test has always been close, but slightly favoring Variation B for the first 4 weeks Then after the first month was over and the first set of monthly subscriptions were renewing / churning the test completely shifted towards favoring Variation ASo now we are wondering what happened and whether we’d need to wait for 11 months more and once the annual subscriptions start to renew, the picture would look completely different again.How confident can we be that these results are reliable and we should get rid of Variant B now?Also is it possible to get some more insights into the breakdown of the collected data for the tests? Since those tests are very important and the prediction model is somewhat of a black box, it would be very nice to see how many monthly vs annual subscriptions were start
Hi, RevenueCat is working well for almost all of my users. There is a user where the subscription is not being updated in the RevenueCat system despite the user frequently opening the app. An example user is l6eLj1tGiTZfNUVA who started their subscription 2021-11-05 10:11 AM. The Google Play console shows they been rebilling every month since 2021-11-03 and was last billed on 2022-01-03 however this isn’t shown in RevenueCat so I have to manually check with GPLAY and extend his subscription each time. I checked and this user last opened the app at the start of 2022 so is missing the December billing event, they are also using the most recent version of the app which includes the RevenueCat Cordova plugin. Any help would be appreciated 🙏
Hello we are using Unity plugin and “GetOfferings” callback not get called in UnityEditor.
For IOS, we can create a subscription group with multiple products. For example, say we have a group with two products: Premium Monthly and Premium Yearly. The subscription group makes sure that the user can only have one at a time. Changing from one to another is a crossgrade.How is this supposed to be done with Android? I couldn’t find anything in the Google play console for subscription groups.Is it a correct assumption that if the user purchased Premium Monthly product, they cannot switch to Premium Yearly product in Android account since there is no such thing as subscription groups? They can only cancel their product?And does this mean that we would have to create a screen in our Android app to handle the situation if the user wanted to change from monthly to yearly? My app is react native. Is the functionality to do this in the react native purchases library or should I be using the RevenueCat’s API?
I’m not sure the best place to send feedback regarding the docs, but I’ve been following along and implementing the various SDK’s and noticed a few things that might need to be fixed. https://docs.revenuecat.com/docs/user-ids#provide-app-user-id-after-configuration@NotNull should be changed to @NonNull https://docs.revenuecat.com/docs/configuring-sdk#initializationv6.4.1 doesn’t seem to take a PurchaseConfiguration.Builder instead:Purchases.configure(this, "mykey"); It’s been a fairly smooth sailing following the docs and getting things implemented otherwise. If there is a better place to post feedback about the docs let me know.
Legacy Public API Key is not visible in project settings section under API Keys I created four projects and Legacy Public API Key is visible in only one of my projectand is not visible in the remaining three.i attached the pic below the location for Legacy Public API Key Please help me!!
We are using Flutter and have an Android user who paid for a monthly subscription Dec 9th and canceled, but their subscription should be active until Jan 9th. They were trying to restore their purchase several times but it seems like restoring just hangs after waiting up to 2 minutes. The success/failure toasts that normally appear don’t seem to be triggering for them. Other Android users have been able to restore their purchase successfully.Are there any known issues for when users have canceled but are in an active subscription state? Pasted our restore purchase code & attached a screenshot of our user’s Google Play subscription screen. Future<bool> restorePurchase(BuildContext context) async { final PurchasesErrorCode? code = await requestToRestorePurchases(); if (code == null) { triggerToast(context: context, text: 'Purchase restored!'); triggerHeavyHaptic(); return true; } else { triggerToast( context: context, text: 'Could not restore existing subs
We are building an iOS subscription based app where a user can:Access feature X with no active subscription Access features X & Y with active free trial Access features X, Y & Z with active subscriptionThe features are content based so it might be that the user goes through all content of feature X and Y earlier than the free trial ends and in order to access the following “Z” the user would have to either wait for the trial to convert to a subscription or force end the free trial and subscribe. Question is if there is a way and how to achieve this “force end trial and subscribe” logic. Thank you
I want to make a simple and reassuring statement about data/privacy in my app’s help screen and I’m wondering if data storage is the same regardless of whether a subscription is purchased or not. Is RevenueCat still collecting and storing data for a user who has not purchased a subscription?Thanks.
Hi,I’m developing on iOS and using StoreKit testing right now. I’m getting my offerings + packages from the RC API no problem now.However, the `packagetType` is `PackageType.custom`. I don’t understand where the package type is set or whether it should be automatic. The docs here list values for the type such as `ANNUAL`:https://docs.revenuecat.com/docs/displaying-products...but there’s nowhere to configure these in RC that I can find. So… presumably it is meant to be working this out from the App Store products… but isn’t because I’m using StoreKit?Either way, this seems very confusing.
I have worked for businesses where all their employees use the same google play account to install apps, how can you setup a subscription so one subscription allows one device rather than pay once and use the same app on 100 devices ?Im sure this question must have been asked before so I’m hoping this can be done.Many thanks
After installing the framework by using Carthage with XCFrameworks, some developers have run into an issue when debugging. The issue is that when using `po` to print objects, an error saying `Couldn’t IRGen expression` gets returned. The underlying issue has to do with the way that LLDB stores and looks up debug symbols, which get tied to the machine that originally built the framework. More information on the issue can be found in the following articles: https://steipete.com/posts/couldnt-irgen-expression/ https://darjeelingsteve.com/articles/Resolving-LLDB-%22Couldn't-IRGen-Expression%22-Errors-When-Building-XCFrameworks-Using-Carthage.htmlThankfully, this can easily be worked around:One solution is to pass --no-use-binaries to Carthage (making the overall command carthage update purchases-ios --use-xcframeworks --no-use-binaries, so that the machine that builds the framework is the same one that’s used to debug, thus solving the issue. However, this might not be useful to everyone,
Hi, I have purchased a sandbox subscription in app which is renewing every 5 minutes via Google Play Store. I am receiving the ‘INITIAL_PURCHASE’ and ‘CANCELLATION’ events but never the ‘RENEWAL’ event. Looking at the webhook logs this is also reflecting this. I can also receive test events. Any help would be much appreciated,Thanks
Hello,We’re using Carthage to consume Purchase.xcframework. It’s possible to download the pre-built xcframework within the release as described here. However, your prebuilt xcframework doesn’t contain dSYMs inside. I downloaded xcframework.zip from GitHub and discovered all the dSYMs outside .xcframework itself, in the separate folder. The RevenueCat official iOS SDK Installation guide suggests to run the carthage update with `--no-use-binaries` option which triggers a local build of xcframework. BTW this also might cause a problem such in my case where I don’t have swiftlint installed and getting this error on build:```Adding homebrew bin folder to PATH (/usr/local/bin)error: SwiftLint not installed in /usr/local/bin, download from https://github.com/realm/SwiftLintCommand PhaseScriptExecution emitted errors but did not return a nonzero exit code to indicate failure``` Question:Why not to contain dSYMs inside release pre-built `.xcframework`? Thus, we can run just `carthage update --n
Hi, if I understand the docs wel, we must do as soon as possible when the app starts do a Purchases.setup()And then when we have our own UID (after logging into our backend) we do a Purchases.logIn(our_ID)But when a user is logging out en back in again, another $RCAnonymousID is created and stored on the RC backend. That can add up and genereate a lot of unused $RCAnonymousID’s...or do I something wrong? logging;start the app for the first time.====> APP didMount(): after Purchases.setup(), getAppUserID: $RCAnonymousID:5cf2ccddfeb64208aca7e1c8a58ab9abhere we do in the app a login into our own backend and recieve our UID for this customer====> RC LOGIN: before Purchases.logIn(id), getAppUserID: $RCAnonymousID:5cf2ccddfeb64208aca7e1c8a58ab9ab====> RC LOGIN: after Purchases.logIn(id), getAppUserID: 615de0706b15db0ea9eb1555logged in customer goes to the paywall and purchase====> RC PAYWALL: before Purchases.getOfferings(), getAppUserID: 615de0706b15db0ea9eb1555====> RC P
Hi,I need to know if when I use Purchases.syncPurchases();and there is some to sync, a webhook is triggered?e.g. I have some users that used old App, that didn’t use RevenueCat or my own API, but the user update the App and now he can’t access the app because I’m using RevenueCat and controlling the status by server side, but Google or Apple knows that the user is a subscriber.in this case, if I use the sync method and when Revenue update a trigger will fired? Or I need to use the Rest API to know?obs. I’m using Flutter for the Apps.
I have been tasked with the above conversion for an existing iOS and Android paid app. Everything is set up in the Rev Cat, App Store and Google Play Store for one annual subscription with 1 week free. My first obstacle is my iOS app is in Objective C and I’m a stranger to Swift (which is used in the excellent walkthrough videos I have found as well as the demo app). I was wondering if any of you had had this issue and, if so, how you approached the problem?Did you bridge Swift view controllers to start up your app or work on translating into Obj C?Thanks in advance.
Already have an account? Login
No account yet? Create an account
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.