Get help with anything related to RevenueCat.
Recently active
Error 404 When I try to access the sample using android java
I’m submitting an update that add subscriptions. We offer full price, and sale price. A user only sees 1 at a time, controlled by our logic. So when Apple tests, they will only see full price.Do you have any advice how to get Apple to approve? I’m concerned that they will reject the subscription at the sale price that they won’t be able to see in the app. (This is an app that already has many approved IAPs.)Do I need to submit with 1 of the subscription IAPs, get approval, and then submit again with the other subscription IAP? (I can control server side which price point they see.)thanksMark J
Hello RevenueCat community!I work in a company where we are integrating RevenueCat in our React Native application. I have a scenario where a user are able to buy a monthly subscription, but also several products. At the moment a user adds items (can be consumables or subscriptions) in a cart and then does a checkout. This flow results in us looping over all items in the cart and using PurchasePackage(package) for each individual item in the cart, this flow causes one popup (on iOS) per item which in a UX world is quite annoying. My question is: Is there a way to do some kind of a bulk purchase so that the user only has to accept on the pop-up once instead of “times equal to products in cart”?Best regards,Emanuel
I’m building an iOS app with a backend providing user accounts. Not sure what the best practice to integrate it. Each user is supposed to have an active subscription (with a free trial in the beginning). I set this up in App Store Connect. The backend includes a webhook that is triggered by RevenueCat. When anything happens, I refresh the latest customer info and update the User table. In the iOS app, I use the RC API to retrieve the customer info and active subscriptions. I set the Transfer behavior to Block to make sure one subscription is good for one user account only. Whenever the user logs in, I updated the RC id with the proper user id. Do I miss something? How to properly handle Restore purchase?
I’m running on a real device connected to Xcode, and I’m getting this error when first launching my app:Invalid Product Identifiers - ( "rw_beta_elite_19_1m_2w0", "rw_beta_elite_99_1y_2w0")2021-09-05 17:43:04.367091-0400 Rewire Beta[29316:9415860] [Purchases] - DEBUG: ℹ️ 2 completion handlers waiting on products2021-09-05 17:43:04.367210-0400 Rewire Beta[29316:9415594] [Purchases] - WARN: 🍎‼️ Could not find SKProduct for ( "rw_beta_elite_99_1y_2w0", "rw_beta_elite_19_1m_2w0")There is a problem with your configuration in App Store Connect. I’ve verified that my identifiers match up to what’s in App Store Connect:https://share.getcloudapp.com/04uxEz42 I’ve also verified API key is correct, iTunesConnect App-Specific Shared Secret is correct, etc. Made sure the in-app purchase capability it enabled in Xcode for my target. Any ideas?
Hello everybody, How is handled the case where a user subscribe from platform A (i.e. iOS) and then login and subscribe from platform B (i.e. Android)? There’s any check we should do or recommendation we should consider to avoid that the same user subscribe and pay twice from 2 different platforms? Thank you.
I have an existing app (“Cameras”) with a subscription product and lifetime product that share the same entitlement. I’m creating a new app (“Lenses”) and I want to share subscriptions between them, but not lifetime purchases. I believe I can do this without having to make a new entitlement, and just checking the allPurchasedProductIdentifiers. For example, here’s what it might look like in the Cameras app:Purchases.shared.getCustomerInfo { (purchaserInfo, error) in if let allProducts = purchaserInfo?.allPurchasedProductIdentifiers { if allProducts.contains("com.grayhour.cameras.lifetimeaccess") { // lifetime access to Cameras was purchased at some point unlockContent = true } else if allProducts.contains("com.grayhour.cameras.monthlysubscription") && purchaserInfo?.entitlements["Full Access"]?.isActive == true { // subscription access to Cameras was purchased and is still active unlockContent = true } else if
Hi there,I’m not sure if this is even possible, but is there a way of associating some custom data with a product in RevenueCat, so when I load all my products in my app, we have that data returned?An example:We would like a short title, long title and description for each product. The short title is for displaying on buttons where space is limited. The long title and description for an information popup where people can find out more about each subscription option from within the app.Obviously we can hard code that info within the app, or pull it from our own online database, but it would be a lot easier if we could simply add it in RevenueCat so that everything was in one place and we were only pulling data from one source and not having to update the app whenever we made a change to some product information.Based on what I can see in the docs, I don’t think this is possible, but if anyone knows otherwise please shout. And if not, would love to see this as a potential future addition
We recently identified an issue with our users where their VPNs are blocking any connections with RevenueCat. We found this helpful article (https://community.revenuecat.com/featured-articles-55/revenuecat-and-ad-blockers-996) from a few months ago and we would like to know if there have been any updates about this?It was mentioned that you were thinking about exposing this error via the RC SDK, but that doesn't seem to be available yet. Is that still the plan? We'd love to have a way to measure and detect these cases, and handle it appropriately from our app.
Hi there, i am currently working on an app that have both consumable purchases and subscriptions, and i have implemented the subscriptions with revenue cat, but i have used another package for the consumables which has noting to do with revnuecat, so will revenue cat consider the consumable purchases made with my app to be revenue made with using revenue cat services, from the sandbox data that whats it looks like.
My app is available both on iOS and Android platforms, which means some of my users will be purchasing subscriptions on App Store and other users will be purchasing subscriptions on Google Play.RevenueCat’s documentation states the following in section “Sharing Subscriptions Across Apps and Platforms”Managing SubscriptionsA user can only manage their subscription on the platform it was purchased from. My doubt is: can I just redirect the user to either Google Play or App Store for him to manage his subscription at these stores manually? Or is it a requirement that my app should have a subscription management screen which allows the user to manage his subscription (downgrade, upgrade, cancel) from inside my app?I understand it would be much more user-friendly to allow the user to manage his subscription from inside the app, but I want to avoid as much implementation as possible for the first versions of my app, so that I can focus more on the required things and less on the improvements
Hi!I have this customer https://app.revenuecat.com/customers/ef084a7e/64164405which had BILLING_ISSUE and CANCELLATION events but no EXPIRATION event, although the "grace_period_expiration_at_ms" is passed. We are relying on EXPIRATION event to remove access.Can you check why there’s no EXPIRATION EVENT?
Hello! As the title suggests, I’m concerned about making purchases with “Block Restores” restore behaviour for our project. Our app requires an account to make a subscription purchase, and requires the user to be logged into that account to use any subscription entitled features. If a user under Account A makes a purchase of a subscription and cancels it some time in the future, then signs in to Account B - could it be possible for him to purchase a subscription again (under the same Apple ID), but now attached to Account B? I’ve only been able to try out this scenario in the Sandbox environment (which is full of its own quirks), so I’m really interested in how RevenueCat handles this case in production. Or will it still raise “there’s already another user using the same receipt” type of an error, regardless of any circumstances?
Hi, We are seeing a strange behavior with some users on our app: a user who has already a custom user id is getting at some point a new RCAnonymousId like it is a new user. How is it possible? Do you know what are the reasons this could happen? Here is an example: Thank you,
Hi,I've the above error message when testing on the simulator and I don't know what the reason for this error is. The API key should be correct. I've taken the Public API Key. The configuration looks like this here: Purchases.configure(withAPIKey: Config.getConfiguration(for: .revenueCatAPIKey))I don't know where the problem could be. I'm afraid that I've to reset my simulator to cancel the subscription. FYI: I don't use the sandbox testing from Apple. I just created the StoreKit configuration in my Xcode project and uploaded it to RevenueCat accordingly. For some reason, 0 products are also displayed here. Although when I click on it have deposited products there. Does anyone have any ideas what this could be? If there is more information missing please let me know.
Hello! I decided to start use RevenueCat for my android application (it is using flutter) instead of native in_app_purchase package. I tried to follow your Docs, but I still couldn't find the point I was looking for :( My app provide possibility to buy month/year subscription. I am using purchasePackage method to make a purchase. But as I see in Subscription section in Google Play Market this purchase is not complete. Do you have some API, to complete a purchase?Best regards, Roman.
Hi everyone, Is there a simple way that Revenue Cat can manage app discount codes? We’d like to share regular discount codes for specific groups to make the app free for some users. Thanks, Louise
Hello, In Stripe you have a product and a customer.Product has a one off payment, e.g. it is not recurring. Customer is created in advance in RC and also in Stripe with some metadata as app user id etc. I have a codeless solution in Integromat where I want to listen on Stripe event, then get app user id metadata for purchase from Stripe and create new Purchase in RC.However, in Stripe you have multiple ways how to charge users. The one I am interested in is that I go to Stripe, and create an invoice to existing customer that they should pay. Once it’s paid, they should be granted a lifetime entitlement in RC. This way user gets an email into their inbox with a direct pay link. The problem is that this method doesn’t create a checkout session, so there is no event for completing checkout session with session id to send to RC. Also, there is no subscription created in Stripe, because Stripe allows to create subscriptions only for recurring prices and this one is one off payment. So the
Hello, I’m going through the steps here: https://docs.revenuecat.com/docs/apple-app-store#ios-14-only-testing-on-the-simulatorAnd I’ve gone over it several times, and I think I’m doing everything right, but I keep getting [Purchases] - WARN: 🍎‼️ Invalid Product Identifiers - (I have the certificate in place. Double checked my identifiers are spelled right. And I get the products on the actual device, just haven’t gotten the StoreKit testing working on simulator.Thoughts?
Apologies if this is a newbie question, but I’m struggling with implementing what I consider a rather simple auto-renewable subscription offering consisting of two packages on iOS with SwiftUI:Annual Individual Plan (family sharing disabled) Annual Family Plan (family sharing enabled)When I create the second package, RC refuses to create it, because the ‘Annual’ identifier is already taken.I solved it temporarily with a custom identifier (“Annual Family”), but RC does not automatically recognise the subscription length (annual) and throws WARN: ⚠️ Unknown subscription length for package:default, ignoring.Any advice on how to implement the above scenario (two annual packages) is much appreciated, thank you!
Hi all,EDIT - found this post very useful - it doesn’t entirely answer the question I have but certainly sheds a lot more light on it.Apologies for the second post in a short time. It’s on a related topic, but not identical.Can someone explain why the following is occurring please?RevenueCat initialised and anonymous App User ID is created We create our own App User ID and call the logIn() function, passing that ID in We make a purchase When our Webhook runs, we receive the new App User ID (created by us) in the app_user_id field, but we receive the old, anonymous App User Id (created by RC) in the original_app_user_id field.In theory this shouldn’t be a problem and we should be able to ignore the original_app_user_id field as irrelevant information, but we need to use Block Restores to ensure that purchases are assigned to one Apple ID and one only. We don’t want to move them between different Apple accounts.But when I read the docs, it says this: Block RestoresUse with caution Return
Hi there.I’ve read various similar threads and whilst they *almost* cover our situation, I can’t find a specific answer to the scenario we find ourselves in. Thanks in advance for any help anyone can offer and let me know if any clarification is needed on any points. Apologies for the length!!Our Setup:We have an app that will be used in schools where multiple devices may be used to sign in. Our app asks for account creation before it can be used. Once an account is created, the user can purchase a subscription to access content, either as part of that initial signup process, or by logging in at a later date and completing the process. We store no data to the device itself - all data is saved to our servers, so that a user can sign in on any device they have to hand once they have a subscription. A subscription buys you a login for a certain number of students and if the subscription expires, that login is revoked. We create our own unique ID during registration, that we pass to Revenu
Hey all, I love the idea of RevenueCat being the single source of truth for payments, especially the subscription part.I am building an app that is cross platform(android, ios and web). I use Ionic capacitor, so the frontend is also fully cross platform. But I have quite a few different payment methods.I am adding both in app purchases and also stripe for web. But for web, I also support crypto(eth) payment. Now I know RevenueCat does not and most likely cannot support “all” payment methods. So I am not asking for Crypto payment method support, but it would be super nice if we could add a general customizable app in the project settings, where my backend can simply post new payment data created by some other 3rd party payment method(such as crypto) With this implemented, I can just check RevenueCat data to check if a user is subscribed to a specific plan, whereas now, I would have to check both RevenueCat and also check if a user is subscribed through Crypto, basically as soon as we ad
Hi!I have paywall in my app which provides different types of subscriptions. However there is an option for once time payment too.In AppStore I’ve configured this lifetime plan as non-consumable purchase and it works fine.In PlayMarket I’ve added the item to the “In-app products” section. “Allow users to purchase more than 1 of this product in a single transaction” option is OFF, tax is set as service. However on Android I get all my subscription-type offerings normally, but my “lifetime” offering returns as null.Of course both products, iOS identifier and Android identifier, are added to the dashboard and the proper “lifetime” offering item. What else I’m missing?Thank you in advance!
I’ve prepared my Amazon app to use RevenueCat for my app subscription and run into the following issue. (Details on the steps I’ve done are show below the description of the issue I am having) When trying to retrieve the offering in my app on an Kindle Fire Tablet, using Purchases.getSharedInstance().purchasePackage(SettingsSubscription.this,packageOffer1, new MakePurchaseListener() { @Override public void onCompleted(@NonNull Purchase purchase, @NonNull PurchaserInfo purchaserInfo) { } @Override public void onError(@NonNull PurchasesError error, boolean userCancelled) { // No purchase }});I receive the following error in the onError method.ERROR: Error fetching offerings - PurchasesError(code=PurchaseNotAllowedError, underlyingErrorMessage=Billing is not available in this device. DebugMessage: Billing service unavailable on device.. ErrorCode: BILLING_UNAVAILABLE., message='The device or user is not allo
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.