Get help with your SDK implementation.
Recently active
Don’t know what to make of this since I haven't really changed my code… Everything was working fine until I committed my code and added another package to work on a new feature. A few minutes later I remember seeing an Xcode warning that ‘Checking for new offers is disabled’ or something like that. I just restarted Xcode and they were gone. Now trying to get offers results in the following error: Error fetching offerings - The operation couldn’t be completed. (RevenueCat.OfferingsManager.Error error 1.)Underlying error: There was a problem with the App Store. This could also indicate the purchase dialog was cancelled.2022-12-13 23:06:38.153794-0800 Almanac[76548:6649488] [Purchases] - ERROR: 😿‼️ There is an issue with your configuration. Check the underlying error for more details. There's a problem with your configuration. None of the products registered in the RevenueCat dashboard could be fetched from App Store Connect (or the StoreKit Configuration file if one is being used). I’v
If you want to run Experiments with new subscriptions that are released with a new app version, what will RevenueCat show for “old” apps if the SDK decides to classify that user to the new group?
Hello all! Our team is developing a feature that will result on giving away around 50k+ users a free 30-60 days subscription on a monthly basis.We were wondering if we are going to find any technical limitations with the Grant a Promotional Entitlement API? or if grating that amount of subscriptions concerns RavenueCat in any way?Thank you!
I have struggled for TOO long trying to figure out why my RevenueCat could not find my Android subscriptions. It seems that RevenueCat’s documentation has not kept up with the Google Play changes. I realize you are struggling to support the new changes in Google Play. But, you need to support other new users that are dealing with the new Google Play subscription setup and how to integrate with RevenueCat.tldr; The secret seems to be: You must use the legacy method of defining subscriptions in Google Play Store.For each RevenueCat "Product" you must define ONE Google Play Subscription that has a SINGLE base plan. It is the Play Subscription "Product ID" that must match to the RevenueCat "Product" IdentifierThe RevenueCat provides a link in the error messages (https://rev.cat/why-are-offerings-empty) that after a redirect end up to the closed topic WITHOUT ANY MENTION of this issue! I hope this helps someone out there.
I am using real device for testing apk , the code directly goes inti catch and gives this error -There is an issue with your configuration. Check the underlying error for more details. The same code works fine with apple packages for ios .This issues occurs in android
I might be misunderstanding how RevenueCat is supposed to work, but... We used to use SwiftyStoreKit to handle our pending transactions. RevenueCat states that:Remove the SwiftyStoreKit completeTransactions() method, and replace it with the Purchases SDK configure()method. Our workflow is: User makes a purchase, after the purchase is confirmed we call our backend to inform that this user has unlocked a product, then after a successful confirmation, we manually invoke the complete transaction, so that the user can be billed.If there were any transactions that were not successfully communicated to the backend, they would be retried in the background.Given the description above, provided by the documentation, it seems like there is no way to handle this.What are we missing here? How can we ensure that purchases are only finished once our backend is informed? Thank you
Hi! Simple question to understand the full scope of Block Restores, and what the support flow would require in this scenario. Say a user cannot login, maybe the user does not even remember what account used to sign up, so a user is only holding a Receipt. Based on the Receipt, we want to try to reset things. We can do that if we can somehow obtain the original User ID from our side, but to do so we need to store some field from the Receipt or from the Rev Cat Subscriber that we could use to link both. Question is, what field would you recommend to use? Should we try to find an original_transaction_id? The receipt itself as token?Thanks!
Hi, I have a problem am trying to test my in-app purchase using Revenue cat on flutter, there is a problem occurs when I try to subscribe again with an already subscribed apple id, and an error box appears from apple, said: You're currently subscribed to this ....., but Revenue cat server act like the purchase is made and hee give the new user the entitlements while he shouldn't
We’ve been using RevenueCat forever and recently updated to 4.13.1 and instrumented the app properly so this behaviour might have been present in the past but we wouldn’t have known it.About 20% of our users who attempt purchase fail due to RevenueCat returning a nil package. We’re not sure what could cause such a large percent of them to fail and if that’s normal (i.e. 20% of users are launching our app for the first time without Internet connectivity?). Has anyone else seen those failure rates that high?
my app working fine in ios and android but from yesterday i have a issue in ios failed to get offerings None of the products registered in the RevenueCat dashboard could be fetched from App Store Connect (or the StoreKit Configuration file if one is being used).This could be due to a timeout, or a problem in your configuration.my app is in production from many month . i didn’t change thing in revenuecat or apple Store .
Let’s say we have a 3 month offer in the App Store for a monthly subscription.From the documentation, it seems clear that the `offer_code` field will be present on the webhook that corresponds to the first purchase made where the offer code was redeemed (the first month in my example above).What is not clear is whether the following two renewal webhooks will have `offer_code` populated as well, since they would be discounted due to the redemption of the offer code.So to visualize it, I’m wondering if it would look like:Month 1 (offer code redeemed) - `offer_code` is presentMonth 2 (discounted renewal) - `offer_code` is presentMonth 3 (discounted renewal) - `offer_code` is presentMonth 4 (renewal at full price) - `offer_code` is not presentORMonth 1 (offer code redeemed) - `offer_code` is presentMonth 2 (discounted renewal) - `offer_code` is not presentMonth 3 (discounted renewal) - `offer_code` is not presentMonth 4 (renewal at full price) - `offer_code` is not presentCan anyone tell m
We would like to receive App Store Transaction IDs when calling the REST API https://api.revenuecat.com/v1/subscribers/app_user_idI have seen other posts where developers request this, and the response from ReveneCat has been to use the Webhook.I am aware that the ID is provided in the Webhook and we are using this, however, this is not a completely satisfactory solution.Issue 1: Missed Webhook CallbacksIf for whatever reason our server does not receive/process the webhook callback then we will never know the transaction/order ID. We have logic in our app and on our backend servers that calls the RevenueCat API’s to refresh/sync user’s subscriptions. Without a transaction ID we cannot guarantee the uniqueness of a subscription.Issue 2: Legacy MigrationWe are migrating from native implementations of our app to Flutter. In that effort we identified RevenueCat as a great solution. However, we still have legacy customers and our backed depends on using the transaction Id’s from the App Sto
Hello, I am upgrading a pretty old project build on Ionic/Cordova/Angular with latest packages, and I am encourteing an issue on Android.I upgraded my project to ionic 6 and Angular 14. I also upgraded all plugins with @awesome-cordova-plugins. RevenueCat plugins are also updated.package.json:```"@awesome-cordova-plugins/purchases": "^6.2.0","cordova-plugin-purchases": "^3.3.3",``` Everything works fine on iOS. I ran into an issue when I try to build for Android I upgraded minSdk to 31, and installed JDK 11.Ionic documentation says we must use JDK 8, but I can’t build anything too because it needs sdk >= 31. config.xml:``` <preference name="android-minSdkVersion" value="22" /> <preference name="android-targetSdkVersion" value="31" /> <preference name="android-compileSdkVersion" value="31" />``` terminal:```[cordova] /Users/user/Sites/project/ionic/platforms/android/app/src/main/java/cc/fovea/PurchasePlugin.java:386: error: cannot find symbol[cordova]
Hiya! Our paywall screen has a “[currency]0.00” — free option, with the currency based on offering?.availablePackages.first?.product.priceFormatter?.locale. With StoreKit 1, this properly returns the expected, matching locale, like Optional(en_US@currency=INR (fixed))But now that we’re starting to test out StoreKit 2 support, we get back Optional(en_US (autoupdatingCurrent))...when using a .storekit file with the storefront changed via Editor > Default Storefront. We can also reproduce this on device. It’s unclear to me if this would be a RevenueCat or a StoreKit 2 bug?
Hi there!I’m trying to update cordova-plugin-purchases to a version that uses Google Billing Library version 4, as I can no longer submit to Google Play with my current version.I removed 2.1.1 that I was using and tried to install 2.4.2 with the following result:src-cordova % cordova plugin add cordova-plugin-purchases@2.4.2Installing "cordova-plugin-purchases" for androidInstalling "cordova-annotated-plugin-android" for androidSubproject Path: CordovaLibSubproject Path: appSubproject Path: CordovaLibSubproject Path: appInstalling "cordova-plugin-purchases" for iosPlugin dependency "cordova-annotated-plugin-android@1.0.4" already fetched, using that version.Dependent plugin "cordova-annotated-plugin-android" already installed on ios.Running command: pod install --verboseFailed to install 'cordova-plugin-purchases': Error: pod: Command failed with exit code 31 at ChildProcess.whenDone (/Users/XXXXXX/quasar/tptk2/src-cordova/node_modules/cordova-common/src/superspawn.js:136:25) at
After upgrading Xcode I have this error and build failed.“Stored properties cannot be marked potentially unavailable with '@available' “Error is in BeginRefundRequestHelper.swift,ProductsManager.swift,PurchasesOrchestrator.swiftIs there any solution please?
I’m implementing 2 promotional offers, and have been following the official documentation. I tried to add the source code in the docs to obtain the promotional offers, like this:if let discount = package.storeProduct.discounts.first { Purchases.shared.getPromotionalOffer(forProductDiscount: discount, product: package.storeProduct) { (promoOffer, error) in if let promoOffer = promoOffer { // Promotional Offer validated, show terms of your offer to your customers } else { // Promotional Offer was not validated, default to normal package terms } } } but I don’t know how to obtain ‘package’, which appears in the first line of the above code.
Hello,I have a bug where my Yearly package is missing in Release builds (but works in Debug and App Store, fails in TestFlight and App Review). My Lifetime and Monthly packages are returned file, and my Monthly package is part of a subscription group with the yearly I have checked:All IAPs are Approved All agreements are signed and active I am not using a StoreKit configuration file I have read the Why are offerings or products empty? help article, and verified everything.App Review has returned both Error 2 and Error 9 I will copy and paste the identifiers from both App Store Connect and RevenueCat here:Lifetime Package:ASC: com.willbishop.Simmer.simmeprolifetimeRevenueCat: com.willbishop.Simmer.simmeprolifetime Monthly:ASC: com.willbishop.Simmer.simmerpromonthlyRevenueCat: com.willbishop.Simmer.simmerpromonthly Yearly ASC: com.willbishop.Simmer.simmerproyearlyRevenueCat: com.willbishop.Simmer.simmerproyearly They are all a part of an offering called “Pestle Pro”, and are fetched like
Hello,I am in the process of migrating one of our apps to Jetpack Compose which is using RevenueCat for processing purchases. Earlier, the code to make the purchase was inside the Fragment and hence I was able to pass the Activity Context while calling the purchasePackageWith() function. However, now the code to make the purchase is moved to the repository where I am injecting the Context using Dagger Hilt. Since, the injected code is an Application Context I am unable to call the purchasePackageWith() function. I tried getting the Activity Context using the below code but it doesn’t work. fun Context.findActivity(): Activity? = when (this) { is Activity -> this is ContextWrapper -> baseContext.findActivity() else -> null} I can pass the Activity Context from the composable screen to the repository via ViewModel but that may leak the activity. So, is there any proper approach to do the same?
User John Custom App ID: 8EFA Android Device A Android Device B Goole Play Account: John Goole Play Account: TomScenario:John logs in RevenueCat device A(John account) with custom ID(8EFA) and purchases Subscription $5 monthly Item. John logs in RevenueCat with the same custom ID(8EFA) device B(Tom account). Click the $10 monthly subscription Item.Expected Result: Pop up Message “The current Google Play Store account does not match the account you paid for” and link the managementURL deepLinkActual Result: Purchase process again. What I have done:I read this question. and Idea with Google Play Developer APISave play store account ID after purchase(using billingFlowParam?? or receipt) When subscription event fire, check current play store account and saved store accountHere is the questionHow to know current Google Play account Is it accurate above idea? or I would love to better idea
Hey! I have added the revenue cat uri on my project for server notifications on apple connect but it still does not trigger when it should. I added the revenue cat uri to both production and sanbox as version 2.When trying my subscription and the webhooks on play store it works as expected, but ios does not trigger until i open the app or like 15 min+ after it should. Any ideas why it does work or why it does not trigger?
Hello!Would it be feasible as a feature suggestion to have a “dynamic” observer mode setup? Use case: we have existing non-consumable IAP transaction handling code we would prefer not to touch, but subscriptions would be newly added, and handled entirely via the SDK. It would be nice to allow adding a callback in the form (StoreProduct) -> Bool to be able to split transaction management duties between the SDK and our own PaymentObserver. We will probably just migrate it to RC, but I think it makes sense as a feature request nonetheless. Best regards,Rafael
After successfully activating a subscription in the sandbox, subsequent calls don’t appear to contain updated subscription info (the user’s subscription is still inactive)Is this the expected behavior in the sandbox environment?
Hello! Thanks for the awesome job on RevenueCat!I’m adding local StoreKit Testing support for quick device/simulator purchases and edge case testing to an app. The Xcode IAP server generates transactions which have increasing numerical IDs, that are obviously not unique. I can see that when registering them on RC, the server side does some magic to make it look real (i.e it seem to have added the local certificate name + purchase date nanoseconds epoch + the fake Xcode transaction ID). "purchased_at_ms": 1669666772000, "store": "APP_STORE", "takehome_percentage": 0.7, "transaction_id": "StoreKitTest_Transaction_1669666772000_11"The transaction from StoreKit / RevenueCat SDK is actually just “11”I have reproduced that logic on my test code, but it would be cool for RevenueCat to abstract that and provide us with this modified ID instead of the raw one from StoreKit, even if it is an additional field on the transaction instead of replacing itBest,Rafael
I have one offer that contains two packages. One of them includes an introductory offer (1-week trial). I just need to retrieve the introductory offer's data programatically. Thank you.
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.