Skip to main content
Question

iOS introductory offer: not sure about expiration dates, prices, texts [Flutter]

  • June 8, 2025
  • 1 reply
  • 12 views

Forum|alt.badge.img

Hi,

I just wanted to get to know, what to implement additionally in my Flutter App for iOS introductory offers. I am not using the RC Paywall, but my own screens inside the App and I have already implemented IAP subscriptions for my App & the App is active inside the AppStore.

The plan is to have a trial period of 3 days before the full price is charged. My app uses an App Extension that needs to know the expiration date and refers to the in-app-purchase page of my Flutter App if a subscription expires. Therefore I absolutely need to make sure that I get the Trial Period from RC:

My expectation would be that when the User subscribes and is eligible for the trial period, I get a price of 0.0 USD for the product and an expiration date of 3 days from RevenueCat. Additionally, the introEligibilityStatusEligible flag is returned, so I can show a corresponding text to the user.

Is this correct ? Do I additionally also get the effective price that is charged after the Trial period ends ?

How is that for TestFlight users ? My monthly subscription renewals flow in after 1 days, what can I expect happens to these introductionary offers periods via TestFlight ? Can I reset these for my user in TestFlight ?

If I reset the purchase history of a Sandbox User, are the introEligibilityStatusEligible flags also sent again for the same sandbox user after that ? What is the trial period time for Sandbox users ?
 

I am targeting only iOS versions > 16
 

Thx in advance,

Daniel.

guilherme
RevenueCat Staff
Forum|alt.badge.img+4
  • RevenueCat Staff
  • June 11, 2025

Hey ​@daniel-s-296ea8 ,

Regarding introductory offers, it’s configuration(s) and trials, there are a few things to consider:

  • Introductory offers (e.g like a 3-day free trial) must first be configured in App Store Connect.

  • RevenueCat’s SDK will automatically apply the offer when the user is eligible. No extra setup is needed on the Flutter side beyond the existing IAP/subscription configuration.

  • Important: the offer is applied at the App Store level and not by RevenueCat. If the offer isn’t applied, check:

    • the user hasn't used an intro offer for this subscription group;

    • you’ve allowed up to 24h for propagation after product changes

Once the subscription is purchased, RevenueCat will:

  • contain/update the CustomerInfo (context here) object includes the accurate expiration date, whether it includes a trial or not. Your extension can depend on this.

  • the post-trial price is shown in the regular price field.

  • the introductoryPrice (documentation reference here) will contain:

    • price: e.g. $0.00

    • period: e.g. P3D

    • cycles: 1

  • Use checkTrialOrIntroDiscountEligibility() to check for eligibility and show “3-day free trial” UI where appropriate.

As for trial duration and their behavior in Sandbox and Testflight, you can reference:

Sandbox is best for repeat able trial tests, but make sure you use the “Clear Purchase History” toggle in device settings. As for TestFlight, trials are applied only if the Apple ID is eligible and eligibility does not reset between installs or builds.

Things to lookout for:

  • Don’t expect a product price = 0.0 in the StoreProduct. The “free” trial is in introductoryPrice, but the base price is the post-trial cost.

  • Trial eligibility is store-determined. RevenueCat’s introEligibilityStatus is best-effort and may not always match the App Store’s logic.

  • If a user has used a trial in this subscription group, they will not be eligible again—even if switching products.

  • Make sure you've uploaded your In-App Purchase Key to RevenueCat. It’s essential for accurate StoreKit 2 behavior and expiration data tracking.

I hope this helps! You can find some extra details and context in our documentation - I recommend giving it a look to make sure everything lines up for your specific use case, but this should help you get started.

Extra context:

Best,


Reply


Cookie policy

We use cookies to enhance and personalize your experience. If you accept you agree to our full cookie policy. Learn more about our cookies.

 
Cookie settings