Get help with your SDK implementation.
Recently active
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
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.
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,
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,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.
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",
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,
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)
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?
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
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
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
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!
Hello,I implemented a subscription plan with 7 days of trial in my app using Flutter SDK version 3.2.2. Since I didn’t find an example for Flutter, I used this iOS code as a reference to implement the text for Trials period:https://github.com/RevenueCat/purchases-ios/blob/f2b25180ce5b65ec272a5144ed9f61dd135d5cee/Examples/SwiftExample/SwiftExample/SwiftPaywall.swift#L536 I currently see some strange behavior after the user started the trial and cancel it before the trial ended. When the user opens the subscription screen again after the trial ended, I’m using the getOfferings function to fetch the current offerings and I still get the introductoryPrice object. In the code example above I see that you check if the introductoryPrice object is not nil and based on this show to the user the introductory price text.So now, If the user cancels the trial, and then wants to subscribe again, It seems like the intro price is available but in fact, when he makes the purchase he will be billed imme
Anyone having this issue today ?Is there a server issue as my code has not changed ??
I’ve tried to use `-purchases:shouldPurchasePromoProduct:defermentBlock:` in Objective-C,But I don’t know how to call it in Objective-C. Please add the way to write it in objc to the docs?Thanks. https://sdk.revenuecat.com/ios/Protocols/RCPurchasesDelegate.html
Hi allI am using revenue cat in my app, And I configure my products and I set up the localization for them,However when I get my product they return always in english local, How I can change the local I want. I am using flutter SDK
Hi, I added RevenueCat iOS SDK to my app, but I already use in-app-purchase and I have paid customers, but when try callPurchases.shared.purchaserInfo { purchaseInfo, error in guard error == nil else { return }}I get purchaseInfo empty and don't have any purchase, can you please help me to fix this.Thanks.
Users of our Android app are seeing incorrect subscription information. Using SDK version 4.3.0. When debugging this issue we discovered that when calling Purchases.sharedInstance.getPurchaserInfoWith() the function sometimes returns incorrect data. It seems caching logic does not work correctly. For instance the function returns the PurchaseInfo object below when calling it now (nov 24th 20:53 GMT). The request date is 4 days off and there is no firstSeen date. We use these dates to verify trial status.<PurchaserInfo latestExpirationDate: null activeSubscriptions: {}, activeEntitlements: [], entitlements: [], nonSubscriptionTransactions: [], requestDate: Sat Nov 20 22:39:43 GMT+01:00 2021 >When querying the API directly with a GET request from within Postman the result is: { "request_date": "2021-11-24T20:02:28Z", "request_date_ms": 1637784148481, "subscriber": { "entitlements": {}, "first_seen": "2021-11-20T09:49:59Z", "last_
In my React Native I set subscriber attributes before I make a purchase. However in the “NON_RENEWING_PURCHASE” webhook the attributes are sometimes missing. Is this a race condition in your system? When I process the webhook I use the attributes to perform certain actions. What would you suggest is the most reliable way of making sure the attributes are synced correctly? Should I use the REST API within the webhook to fetch the attributes? Code snippet from my appPurchases.setAttributes(userAttributes)log.info('Set user attributed', userAttributes)await Purchases.purchaseProduct(productId, null, Purchases.PURCHASE_TYPE.INAPP) An example of the subscriber_attributes I am expecting back in the webhook are:{"subscriber_attributes": { "ability": { "updated_at_ms": 1637782170690, "value": "BEGINNER" }, "age": { "updated_at_ms": 1637781232715, "value": "24" }, "custom_group_id": { "updated_at_ms": 1637781232716, "value": "a
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.