4.0.1
🩹 Fixed
- [iOS] Native iOS SDK pinned to an exact version 4.0.0.
Full Changelog: 4.0.0...4.0.1
4.0.0
⚠️ Major release with breaking API changes. The "paywall" concept is generalized into flow; mostPaywall/paywallsymbols are renamed toFlow/flow, and previously deprecated aliases are removed.
🚀 Flow — the successor to Paywalls
4.0.0 introduces Flow, which replaces the Paywall as the core unit of presentation and analytics. A flow can contain multiple screens, with its rendering, navigation, and analytics driven by the new flow runtime.
👉 Read more about Adapty Flow Builder.
👉 See the migration guide to move from 3.x.
📦 Requirements & installation
- Minimum Flutter 3.32.0 (Dart 3.8.0).
- [iOS] Minimum deployment target is now iOS 15; requires Xcode 26+ (the native iOS SDK uses Swift tools 6.2).
- [iOS] CocoaPods support dropped — the iOS native SDK is now distributed via Swift Package Manager only. Apps on Flutter 3.32–3.43 must enable SPM once with
flutter config --enable-swift-package-manager; Flutter 3.44+ enables it by default.
💥 Breaking changes
- Paywall → Flow rename.
AdaptyPaywallis split intoAdaptyFlow(+AdaptyFlowPaywall);AdaptyUIPaywallView→AdaptyUIFlowView;Adapty().getPaywall(...)→getFlow(...)andgetPaywallForDefaultAudience(...)→getFlowForDefaultAudience(...);AdaptyUI().createPaywallView(...)→createFlowView(...);logShowPaywall(...)→logShowFlow(...). - Events observer renamed.
AdaptyUIPaywallsEventsObserver→AdaptyUIFlowsEventsObserver(setPaywallsEventsObserver→setFlowsEventsObserver); allpaywallViewDid*callbacks →flowViewDid*. The separate rendering-failure callback is folded intoflowViewDidReceiveError. AdaptyPaywallViewConfigurationis no longer exposed; the view configuration is now opaque.- Removed APIs deprecated back in 3.x:
Adapty.setFallbackPaywalls()(usesetFallback()),AdaptyConfigurationBuilder.withIdfaCollectionDisabled()(usewithAppleIdfaCollectionDisabled()),AdaptyFlow.placementId/AdaptyFlow.revision(useplacement.id/placement.revision),AdaptyPurchaseResultSuccess.jwsTransaction(useappleJwsTransaction), andAdaptyUIFlowView.paywallVariationId(usevariationId). - Dismissing a flow or onboarding view now releases it from memory by default; a dismissed view can no longer be re-presented — create a new one instead.
- [Android] The system back button no longer dismisses a flow by default. Handle
AndroidSystemBackActionin your events observer if you want it to close the flow.
🆕 New
AdaptyUISystemRequestsHandler— handle flow system requests (OS permission prompts and App Store review requests) triggered by flow actions. Register viaAdaptyUI().setSystemRequestsHandler(...).AdaptyUIObserverModeResolver— drive purchases and restores initiated from flows while running in Observer Mode. Register viaAdaptyUI().setObserverModeResolver(...).flowViewDidReceiveAnalyticEvent— receive customer-facing analytic events emitted by a flow.Adapty.openWebPaywallandAdapty.createWebPaywallUrlnow accept anAdaptyFlowPaywallin addition to anAdaptyPaywallProduct.setFlowsEventsObserver/setOnboardingsEventsObservernow acceptnullto detach a previously set observer, so the SDK no longer retains it (useful for cleanup).
⚠️ Deprecated
- The Onboarding feature is deprecated; migrate to Flows.
AdaptyOnboarding,AdaptyUIOnboardingView,AdaptyUIOnboardingPlatformView,AdaptyUIOnboardingsEventsObserver, the onboarding state / input / analytics models, and the relatedAdapty/AdaptyUImethods (getOnboarding,getOnboardingForDefaultAudience,create/present/dismissOnboardingView,register/unregister/setOnboardingsEventsObserver) are now annotated@Deprecated.
Full Changelog: 3.17.1...4.0.0