Discussion and help from anything related to RevenueCat.
Recently active
I state that both with iOS Device and Android Device everything works fine. As for the Android emultor I can regularly test the in app purchase (emulators with Google play services), with the iOS emulator (with iOS 14.0) I have difficulty making it work with the storeKit. I followed the explanations to configure it but it shows that I have done something wrong. One step that I didn't understand is that of duplicating the Configuration.storekit. Why is it necessary to duplicate it if you can select the first one in the next step? If you have any advice on mistakes that other users have made previously that prevented the emulator from working properly with storekit, I welcome it.
Hi, We see different behaviors regarding aliases and we would like to know more about how it works.Here are the different behavior that we see:1- If we set a user id, sometimes the alias is set as the App User ID, sometimes the App User ID stays the RCAnonymous id but the alias is there when we look at the user aliases. What is the logic?2- If we set multiple aliases, how RevenueCat decide which one to use as the App User ID? Thank you,
Hi,I’ve configured RevenueCat & AppsFlyer as it should be, but still can’t see any Media Source params in events that RC sends to AF. I do see the value set by the app in the ‘Customer Profile’ page on RC, but but in event JSON which is sent from RC to AF they are still missing and AF thinks that it was organic purchase.Any idea whats wrong or what I’m missing? (iOS SDK)
As the title suggests, I am having trouble purchasing a non-renewable product on my app.Here is an overview of my current setup:Flutter app (with products that can be purchased via app store or play store) Web app (with the same products that can be purchased via Stripe) Server (acts as the backend, is used for authenticating users on login)The non-renewable product is specific to each user. In other words, if user A logs on to the app and purchases the product, then any privileges associated with that non-renewable product will be granted to user A. Then, if user A logs out of their account and user B logs on to the app using their own account on the same device, user B should not have access to those privileges. In order to test the scenario mentioned above on my Flutter app, these are the steps I took:Log on to app using account A Purchase non-renewable product Verify that privileges are granted Log out of app Log on to app using account B Purchase non-renewable product Verify that
Hi, what happened to the very very good tutorial here https://support.revenuecat.com/hc/en-us/articles/360041793174 about troubleshooting empty product list? Now it redirects to a very short post of the forum with missing images and with very few informations The previous article was very good, at least fix the missing images.
We’re trying to display the duration of a subscription using Swift and the IOS SDK but the locale isn’t honored and the duration is always return in english, e.g. “1 Year” instead of “1 Jahr” for german with “de” locale. Does anyone have the same issue?We’re trying to access the localized duration like so:package.product.subscriptionPeriod?.durationTitle.localizedLowercaseAny tipps?
Can you please explain how the unsubscribe_detected_at field is populated?I have some users who have opted out of auto renewal, but their unsubscribe_detected_at field is null. And some users who don’t have it as null.The only difference I see is that users in the latter group re-subscribed after opting out.
A common issue in my app has been that 1: The customer got charged2: The purchase does not reach RevenueCat3: The customer reaches out to support.4: I ask them to restore purchases and everything is synced correctly. I did read the article here: But it doesn’t contain much details on how to detect the error. I also reached out to support about this issue and got a pretty unhelpful response from support (and did not get any comment on my follow up emails).“Restoring transactions is our recommendation here. Unfortunately Apple and Google's in-app purchase process makes this a necessity. Beyond that, we don't have any general recommendations.…... Are users are complaining about not getting an entitlement after purchasing? Maybe an action item here is to show UI recommending the user to restore purchases if no entitlements are detected after a purchase. You can get creative here but outside of restoring purchases there's not much else to do..”Is there a way to detect if the user purchased,
When setting up your Play Store service credentials, it can take up to 36hrs+ for your credentials to work properly with the Android Developer API. You will see "Invalid Play Store credentials" errors and be unable to make purchases with RevenueCat until this happens. Any changes to these credentials will also take up to 36hrs+ to fully propagate. If the Google Play Android Developer API has not been used in your project before or it is disabled, you can enable it by visiting APIs & Services in your Google Cloud Platform. Service Credentials Not Populating under API accessThis is a rare case, if your service credentials are not populating under Google Play Console > 'API access', be sure to check if the service credential email address is in the "IAM" tab in Google Cloud Console. To navigate to this page, go to Google Cloud Console > IAM & Admin.If you do not see your service credentials under this tab, select the "+ ADD" button at the top of the page and copy the email f
What is best practice for using Revenuecat Public API keys in Xcode? Are they 'public enough' to just use in source files?
Hi, I’m new to RevenueCat and I’m in the process of refactoring a piece of code using the ‘allowSharingAppStoreAccount’ function. The documentation says:allowSharingAppStoreAccountDEPRECATEDConfigure behavior through the RevenueCat dashboard instead. I’ve looked everywhere in the dashboard, but can’t find any setting that would seem to relate to this?Also, I’m unsure exactly what this function does: is it for instance in case someone creates several accounts in the app with, say, different email addresses, but has a single App Store account? Thanks to anyone who takes the time to help!
I’m following the supplied examples and was able to list packages and buy one product. Although the process do not reach the end because of a raised error, but the error is very general, and not clear at all. Also it does not have any error code as it was supposed to according to the docs here (https://docs.revenuecat.com/docs/errors#android-errors).My Code:try { const offerings = await Purchases.getOfferings(); if (offerings.current.lifetime !== null) { const currentOffering = offerings.current.lifetime; const { purchaserInfo, productIdentifier } = await Purchases.purchasePackage(currentOffering); if (typeof purchaserInfo.entitlements.active[ENTITLEMENT_ID] !== 'undefined') { console.log("Purchase Success"); } }} catch (e) { if (!e.userCancelled) { console.log(e); }}Let me be clear that the native android purchase popup is correctly shown int the device (real device, not simulator), and the process is succeed by Google.The error object returned is simply this:[Error: There is a
Hey,I’m using react-native-purchases library and found some issue in Xcode logs. Every time initialise my app is initialised I send identifiers using:useEffect(() => { Purchases.collectDeviceIdentifiers()}, [])RevenueCat is returning error and complaining that IDFV cannot be modified. Am I doing something incorrectly? Below I’m also attaching log. Thank you
Hey,Currently, I’m experiencing a strange behavior when the user has one google account and logged in on two different devices and also the user has two accounts in my app.When the user is purchasing a subscription on one device this subscription is applied to both accounts of my app.I'm expecting that it should be applied to one of my accounts and the second account shouldn't see this subscription.Can someone help me with it?didn’t find an answer for this issue on the forum =(
I've setup the Facebook and the Stripe integrations for my Android app, but the fb_mobile_purchase i setup as a target event doesn’t get any events.
I’m continuing the discussion from spectrum here:@ryan your docs don’t make any distinction between iOS and Android when it comes to whether the Facebook SDK should be installed, so I assumed it had to be installed on both platforms. If not, that would be a great thing, as the SDK is huge.
Hi, I have the following questionIn your documentation, under the Subscription Status tab, it clearly states that the subscriptions field is a collection (array) that stores Subscription objects within it. And this response I expect from the REST API. But as far as I noticed, making request to API "subscriptions" is an object that stores fields in itself - so it is not a collection. And this can be seen in the "Rest API endpoints" documentation where in the "Get or Create Subscriber" request the example "subscriptions" is just an object instead of a collection. Could you please clarify this inaccuracy for me? Because when I currently make a request to the API in "sandbox" mode, I also get the subscriptions{...} object instead of the subscriptions[...] array.Thanks in advance.
Using RevenueCat for Unity, I am receiving json return values from RC in response to GetOfferings, RestorePurchases, etc. They usually come in the form of a PurchaserInfo object. I can’t find any documentation anywhere on the exact details of what is in this object.Specifically the date values look like this:"originalPurchaseDate":1626733276,"latestPurchaseDate":1626733275EDIT: Ohhh, these Ints are just the values shown by the XCode debugger, in C# the object contains dates in DateTime type. I was looking at the raw json data and wondering what those date numbers stood for. Still trying to find in-depth docs for the C# Type PurchaserInfo, what all is in it and how it behaves.What are these integers and how does one make them into a date? Does any documentation exist detailing the return values from RC calls?Thanks!
Background: In my flutter app it is possible for a user to sign out and another user to sign in without restarting the app. To support this feature the app calls Purchases.init whenever a user logs in. If the transition is non-sub to sub this works as expected IE the latter user sees their subscription. But this does not work if transition is sub to non-sub. In this case RC fails to update to non-sub and the non-sub user appears to have a subscription until they restart the app and the sub is gone.Fix: reset all data when Purchase.init is called.
NSInvalidArgumentException *** -[__NSCFConstantString stringByAppendingString:]: nil argument This class of crashes occurs when the Purchases SDK is unable to find certain keys in NSUserDefaults, usually due to clearing NSUserDefaults. The Purchases SDK uses NSUserDefaults to store information. By default, standardUserDefaults are used, but you can configure a different instance of NSUserDefaults. To do this, set the userDefaults parameter in configure:guard let revenueCatUserDefaults = UserDefaults.init(suiteName: "com.myapp.revenuecat") else { fatalError("can't create user defaults for RevenueCat domain")}Purchases.configure(withAPIKey: <your-api-key-here>, appUserID: <the-app-user-ID>, observerMode: <observer-mode>, userDefaults: revenueCatUserDefaults) NSInternalInconsistencyException after clearing NSUserDefaults The Purchases SDK uses NSUserDefaults to store information. By default, standardUserDefaults
Logs for the Flutter SDK will appear in Xcode and Android Studio rather than in the standard Flutter logs.
If you have an active subscription that should unlock an entitlement but it doesn't, make sure that subscription's product is added to the entitlement in your dashboard.
Check out our new and improved walkthrough guide! If you're still testing in sandbox, it's most likely a configuration issue that's preventing the products from being retrieved from Apple/Google. Your product identifiers are set in RevenueCat, but the actual products that your users purchase can only be retrieved directly from Apple/Google. Because this communication happens between your app and the stores, RevenueCat doesn't have any visibility into the API requests, however there are some common requirements to go through.iOS and AndroidThe product identifier set in RevenueCat matches exactly with the store You're testing on a physical device and not a simulator The bundle ID in Xcode [iOS] or package name [Google/Amazon] match what's in App Store Connect or Google Play/Amazon Developer console. If you have both development and production environments for your app, be sure to double check you are using the correct bundle IDs [iOS] or package names [Google/Amazon]. You’ve set the pro
Multiple subscriptions? How?Although rare, it's possible for a user to have multiple active subscriptions. On iOS, this could be done by accident if a user has multiple devices using different Apple accounts and purchased on each one. On Android, a user may have tried to upgrade/downgrade a subscription but instead purchased a duplicate. If using RevenueCat to make purchases on Android, you need to specify in the purchasePackage method whether it is an upgrade/downgrade, or else it will be treated like a regular purchase.If neither of the above cases apply, or you see a lot of subscriptions on the same user in RevenueCat, you may have hardcoded an App User ID instead of using a unique identifier for each user. Each subscription is actually associated with a different Apple or Google account, but each one is tied to the same hardcoded App User ID in RevenueCat. In order to separate these users out, you should release an update to your app that clears out the hardcoded App User ID, then
If you feel like a subscription or trial should have expired, but you see that it’s still active, then that subscription is likely in a grace period.For example, this user signed up for a 3-day free trial of the 1-month subscription on May 5, 2020 which should have converted on May 08, 2020. However, the dashboard shows the expiration date as May 24, 2020. This is because Apple applied a 16-day grace period due to some billing issue. Apple will continue attempting to bill the user until they successfully do so or reach the end of the 16-day grace period, at which point the trial will no longer be active.
Already have an account? Login
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.