Discussion and help from anything related to RevenueCat.
Recently active
When my app ran, everything was fine. But with SwiftUI Preview, Revenue Cat can’t run. As it relied on the instance of `AppDelegate`, there is no `AppDelegate` in SwiftUI Preview.```Purchases.configure(withAPIKey: "api key")```Is there a way to set `Purchases.configure(withAPIKey: "api key")` in SwiftUI Preview? Currently I had to comment code so the preview could work.
Hello, Apple updated app store prices in Turkey on December 8.For example: The option of 8.99 Turkish Lira (Tier 1) increased to 16.99(Tier 1) Turkish Lira.I see updated prices in the App Store Connect Panel. There's no problem here. BUT IN MY APP, THE PRICES ARE OLD. coin_100 - SkuDetails: {"productId":"coin_100","type":"inapp","title":"100 x Coin (x)","name":"100 x Coin","price":"₺8,99","price_amount_micros":8990000,"price_currency_code":"TRY","description":"100 x Coin is defined in the account",
Do I create different products for Google Play Store and App Store? (for example, weezma_ANDROID and weezma_IOS). Or just one product for both platforms? (weezma).
Just wanted to give a shout out to the Revenue Cat team. @ 3:19 p.m. today Apple Review made first in-app purchase of my auto-renewing subscription and @ 3:24 p.m. I received email welcoming me to the App Store from Apple.I actually expected a lot more testing of the In-App purchase portion of the app because I know I spent a lot of time testing it and making last minute changes. But who am I to complain.Of course I got some rejections along the way for Rating, and Safety Guidelines but the In-App purchases flow went flawlessly thanks to the great staff Revenue Cat has assembled.I think back to my previous company where I did receipt validation locally (couldn’t afford a server backend staff) and thought it was crazy that every developer had to do this decryption validation of receipt. Even crazier was the verbose language you had to put on your paywall in a vertically challenged render space. I believe we got rejected six days in a row just for the wording on the paywall and the l
My test environments: Running XCode(Sandbox) and TestFlight. PRICES THAT LOOK WRONG I Have 9 consumable products. Prices I choose in Prices that the app store connect => appear in panel my app__________________ ____________________________________16.99 TRY(TİER 1) => But my on the application screen 8.99 TRY 34.99 TRY(TİER 2) => But my on the application screen 18.99 TRY 49.99 TRY(TİER 3) => But my on the application screen 27.99 TRY 119.99 TRY(TİER 7) => But my on the application screen 64.99 TRY 279.99 TRY(TİER 17) => But my on the application screen 159.99 TRY 829.99 TRY(TİER 49) => But my on the application screen 459.99 TRY Note: 1- Purchase works successfully. It's just the wrong price.2-) There is no problem with Google Play Store prices.3-) My app is not in publish mode,
Hi team. Today I was trying to check my dashboard and all of the API calls were failing. I was also unable to load any info in the app. I was able to trace the problem to my pi hole blocking all of the requests. I’ve had the pi hole installed for a while, so this is a new development. Either they’ve added Revenue Cat to their block list, or the APIs changed to something that gets blocked by them. I’ve already added an exception, so I’m set, but I wanted to let the team know in case you wanted to investigate.
My API get a list of my products (from my server) and display it on app. I'm using revenuecat only to do the subscription.The problem is that, for each country with his own currency, I need to display the right price, it means, my server doesn't know what is the users country to provide the correct price from Apple.There is a way on Revenuecat for me send the SKU and get the price based on the user's country?
In the sandbox environment, when I call Purchases.purchaseProduct or Purchases.purchasePackage (my product is auto-renewable), the payment sheet pops up for confirmation as expected. After I entered my credentials and pressed confirm, the payment sheet shows up again. I have to reenter my credential to confirm the purchase. This happens if the user does not have any subscriptions initially. Another big issue related to this is when the subscription expires, I cannot make a purchase to the same subscription because the payment sheet doesn’t show up at all, and the SDK console says it will not process because the purchase/transaction is a duplicate. TIA!
Hi!I have a social app for which I want to implement something like Twitter’s super-follows. Basically the flow goes like this:User A can apply via email for eligibility for super-follows. We manually set user A’s metadata to reflect that they can now be super-followed. When user B tries to super-follow user A, they have to buy a subscription to user A’s paywalled posts. As long as user B’s subscription is active, they can view user A’s posts. User B can buy an unlimited number of super-follow subscriptions to other users’ posts.Does this make sense? Can this be implemented via RevenueCat?I’m adding images of how this looks for Twitter for reference:Subscription screen Subscriptions screen in settings (note the custom text for that particular super-follow of the user)
All of the products I created before today are found with this request:await Purchases.getProducts(["white"], type: PurchaseType.inapp);But the requests for the products I added today, say “blue”, are returning empty.I set them up the same way in the Google Play Console: I use the same identifiers in revenuecat.Is there sometimes a delay in availability for new products? There was no delay in the past when I added products.
We are trying to support teams under a single subscription. The logic for checking is if anyone has a subscription then we give everyone in the team access to the premium version of the app.i.e.await Promise.all( [...memberIDs].map(async (memberID) => { const res = await fetch(`${baseUrl}/${memberID}`, options); const json = await res.json(); if (Object.keys(json.subscriber?.entitlements).length > 0) { hasSubscription = true; } }), ).catch((e) => { console.error('RevenueCat error: ', e); });But this isn’t working for some users mysteriously. I am wondering if revenuecat has a rate limit around how often a user can ping the server to check subscription status. I don’t see anything about this in the docs. Does anyone know if there is a better way to handle teams or if revenuecat does have a rate limit?
Hello! In the documentation, you mention that the cancellation webhook may be delayed up to 2 hours, but the rest of the webhooks typically deliver within 5-60 seconds.Let’s say that a user cancels a subscription, but then reenables it before the cancellation webhook gets sent. In that case, what types of webhooks would I get and in what order would they be in?e.g.would a cancel → resub result in a renewal → cancellation? Or does RC not send the Renewal, since as far is it knows the sub is still active?
The documentation includes sample queries for revenue, active trials, and active subscriptions but there are no sample query for churn. How to determine churn as shown in charts? And how to determine the active subscriptions per day that shows a deduction when a user unsubscribes?
Hi, how can i detect the iTunes pop-up cancel button clicked ? Is there any delegation methods or someting?
Hi,I’m StoreKit testing and subbing to my monthly or annual products works. Refunds also work. Switching between monthly and annual also works but… cancelling does not. I never seem to see willRenew == false., I do sometimes see this in the logs: 2021-12-19 18:29:19.582279+0000 Captionista Debug[85027:961458] [Purchases] - ERROR: The data object identifier couldn't be found on the receipt.2021-12-19 18:29:19.582382+0000 Captionista Debug[85027:961458] [Purchases] - WARN: /Users/marc/Library/Developer/Xcode/DerivedData/Captionista-dhlqkvltvxzowycfexhqwsaswlxg/SourcePackages/checkouts/purchases-ios/PurchasesCoreSwift/LocalReceiptParsing/ReceiptParser.swift-receiptHasTransactions(receiptData:): Could not parse receipt, conservatively returning trueAny ideas?Basically I can’t verify that cancellation clears the entitlement.isActive as it stays true when I cancel — no matter what time scale I use e.g. monthly sub with 1 month = 30 seconds.If I restart the app after waiting, the entitlemen
We exported all our customer data from the revenue cat customer tab. However under the sections first_seen_at, first_purchase, trial_start_at, etc it lists 13 digit numbers such as 1638562638000. How would we go about converting these timestamps into the date of the day?
Hi, We would like to know in Adjust which subscription the user has taken from the moment it starts a trial period. For now, we can try to guess it once the user has converted based on the revenue associated but it is not precise and if the user doesn’t convert, we have no way to know which subscription it was.Is there a way to identify the subscription clearly with every RC event sent to Adjust? Thank you for your help.
Hey,I currently have 20 products live on the App Store for my app that fetch the correct prices from the App Store Connect. However, I’m currently working on a new build and on sandbox mode some of the products consistently return incorrect prices. These can be $0 or an older price I set for the same product. I’ve attached an example. I’ve double checked that at the time of purchase the correct productID, locale and currency is being requested. Has anyone run into this issue before? Greatly appreciate any and all feedback. Gonenc
Hey,We are currently receiving an error fetching Offerings with the RevenueCat SDK on iOS (SDK Version - 3.13.0).From searching and reading the ‘Why are offerings or products empty?’ support document, we have confirmed we are seemingly matching all of the requirements:We have agreed to the latest App Store Paid agreement in App Store Connect. We have created a In-App Purchase Subscription in App Store Connect that is a 1-month auto-renewing subscription. This In-App Purchase Subscription status is marked as ‘Ready to Submit’ in App Store Connect. We have a matching Product created within RevenueCat, and have verified it’s identifier matches the Product ID in App Store Connect. Within RevenueCat, the Product is associated with the correct Entitlement, and the only Offering we have contains 1 Package with this Product. We are not using a StoreKit Configuration file. We have enabled the In-App Purchase capability in the Xcode project settings. We are testing on device.After requesting the
Transfer event is triggered on the webhook on restoring purchase. But sometimes, in the “transferred_to” field, only the revenue cat initiated anonymous id is sent and the user id initiated by my app is missing. I have checked that the user id is being initiated before restore purchases is called to revenue cat sdk. Without the user id that the app has assigned, there is no way to transfer the purchase on my backend and the webhook fails to give the desired result. Example Event id - “997383F7-913F-4C2F-9987-91E78A514C05” in sandbox environment. Also, is there a way to hit call revenue cat API from the app to get the Transfer event details, as the webhook may be delayed and the backend needs to change the access level immediately.
The current setup we’ve got is:We receive a webhook from RevenueCat letting us know subscriber info has changed (e.g. setup or cancelled a subscription) We call the RevenueCat Node SDK to get the up to date entitlements for that specific user We update our database with this new information We currently have one entitlement. My understanding is that when we get a cancellation webhook request through, when we call out to the RevenueCat SDK, this should return an empty list of null. For some reason, when we call this after cancellation, it’s returning a list containing the entitlement that’s just been cancelled. Can anyone help me to understand why this is happening? This flow seems to work fine for setting up a subscription, but not for cancelling one.Note: This is testing in Sandbox and this is the case for both EXPIRATION and CANCELLATION events
Hello,We have a case where Stripe had a billing error, but after a few retries it managed to charge, however the RC customer panel shows contradictory information: the history reports as cancelled due to the billing error but the entitlements say it will renew.Stripe reports that the subscription will renew. So what is the truth here? 😅
For simplicity, suppose I'm running a subscription smoothie business only on the App Store. I'd like to set up IAP for weekly/monthly/yearly subscriptions for smoothies. In addition to the smoothies, users can mix-and-match subscriptions for premium upgrades, including fancy straws and glass mugs. With their smoothies some users want one, or the other, or both.Additionally, users can purchase consumable tokens for pretzels. Users would only subscribe to the premium upgrades of straws and mugs if they got a base subscription for smoothies. They also may start with a smoothies and upgrade later. It makes little sense for a subscription for a straw or a mug to renew differently from their smoothie subscription. Cancelling their smoothie subscription should cancel any straw & mug subscriptions.How do I structure my packages/entitlements/offerings/products to account for these while keeping it sane? The only way I see it, but seems too complex, is a single subscription group with prod
Are there downsides to calling Purchases.shared.login(<id>) several times?I don’t load the user id until the user has hit a shared TabBarController inside the my app after logging in through a third party. This call is reused whenever a user refreshes data or reopens the app.I’d like to call Purchases.login whenever user data is loaded. This can happen several times during a session, although typically it only happens once.This would be the simplest way to fill ids. I think it would also backfill existing users who won’t go through a login flow again.Thanks!
Hi there, My App is beeing rejected, because the tests by apple show that on an IPad Emulator the Offerings can’t be loaded… what can i do? I got through App Store Testing before without any problems and the same behaviour. has something changed? Thanks for any help? Cheers
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.