appstack_plugin
Track events and revenue with Apple Search Ads attribution for Flutter apps. Supports iOS 15.0+ and Android 5.0+.
2.6.0
10K downloads/mo
#227 most downloaded on pub.dev
appstack-tech/appstack-flutter-sdk
What this package is like to depend on
Last release 11 days ago
12 Aug 2026
Ships fairly regularly
a new release about every 2 weeks
Nearly every release is documented
notes for 39 of 39 stable releases
5 versions withdrawn
withdrawn after publishing
10 months old
46 releases · first in 2025
46 releases in the last 12 months
see the full history below
Release timeline
46 releases · Oct 2025 to Aug 2026Releases
latest 46-
2.6.012 Aug 2026Release notes
Open source →Added
AppstackPlugin.setCustomerUserId(customerUserId)— sets or clears the customer user ID afterconfigure(), bridging the native iOS/Android setter of the same name. Use it when a login reveals the ID; callingconfigure()a second time does not work, as a repeatconfigure()is a no-op and ignores itscustomerUserId. Clear it on logout so the previous user's ID stops being attached to later events. Passingnull(or a blank string) clears the stored ID — unlikeconfigure(), which treats a blank value as "not provided" because it never clears. Safe to call at any time; last write wins.
Changed
- Updated the Appstack iOS SDK to 4.5.0 — on iOS,
getAttributionParams()no longer comes back empty: the map now always carries anappstack_match_statuskey reporting the attribution outcome (matched,matched_no_params,organic,skipped,failedornot_configured). Onlyfailedis worth re-reading later; the rest are settled answers. The Dart signature is unchanged — the result is still nullable, so existing null checks keep working — but code that read an empty result as "not attributed" should switch to the status key. Treat the key as iOS-only for now: Android 1.7.0 does not add it, so an empty map still means "nothing yet" there. Also fixed on iOS: asetCustomerUserId()call made immediately afterconfigure()is no longer overwritten by thecustomerUserIdpassed toconfigure(), and a blank customer user ID is treated as absent rather than sent as an empty string. - Updated the Appstack Android SDK to 1.7.0 — adds the native
setCustomerUserIdsetter thatAppstackPlugin.setCustomerUserId()bridges on Android. No new permission is required.
Release notes
Open source →Added
AppstackPlugin.setCustomerUserId(customerUserId)— sets or clears the customer user ID afterconfigure(), bridging the native iOS/Android setter of the same name. Use it when a login reveals the ID; callingconfigure()a second time does not work, as a repeatconfigure()is a no-op and ignores itscustomerUserId. Clear it on logout so the previous user's ID stops being attached to later events. Passingnull(or a blank string) clears the stored ID — unlikeconfigure(), which treats a blank value as "not provided" because it never clears. Safe to call at any time; last write wins.
Changed
- Updated the Appstack iOS SDK to 4.5.0 — on iOS,
getAttributionParams()no longer comes back empty: the map now always carries anappstack_match_statuskey reporting the attribution outcome (matched,matched_no_params,organic,skipped,failedornot_configured). Onlyfailedis worth re-reading later; the rest are settled answers. The Dart signature is unchanged — the result is still nullable, so existing null checks keep working — but code that read an empty result as "not attributed" should switch to the status key. Treat the key as iOS-only for now: Android 1.7.0 does not add it, so an empty map still means "nothing yet" there. Also fixed on iOS: asetCustomerUserId()call made immediately afterconfigure()is no longer overwritten by thecustomerUserIdpassed toconfigure(), and a blank customer user ID is treated as absent rather than sent as an empty string. - Updated the Appstack Android SDK to 1.7.0 — adds the native
setCustomerUserIdsetter thatAppstackPlugin.setCustomerUserId()bridges on Android. No new permission is required.
-
2.5.006 Aug 2026Release notes
Open source →Changed
- Updated the Appstack iOS SDK to 4.4.1 — attribution matching now includes additional network context to improve match diagnostics.
- Updated the Appstack Android SDK to 1.6.0 — attribution matching now includes additional device and network context to improve match accuracy, and the Play install referrer is now resolved before the match request so attribution can be determined deterministically. No new permission is required.
EventType.installis no longer sent when passed tosendEvent()— both native SDKs already track the install automatically, so sending it by hand previously double-counted installs. Such calls are now logged and discarded natively; the Dart call still succeeds.
Fixed
- Android: a remotely disabled app no longer fires the attribution match request — previously
enabled=falsesuppressed only the event POSTs, and a fresh install still called/attribution/match. A disabled app now makes no attribution network calls at all.
Release notes
Open source →Changed
- Updated the Appstack iOS SDK to 4.4.1 — attribution matching now includes additional network context to improve match diagnostics.
- Updated the Appstack Android SDK to 1.6.0 — attribution matching now includes additional device and network context to improve match accuracy, and the Play install referrer is now resolved before the match request so attribution can be determined deterministically. No new permission is required.
EventType.installis no longer sent when passed tosendEvent()— both native SDKs already track the install automatically, so sending it by hand previously double-counted installs. Such calls are now logged and discarded natively; the Dart call still succeeds.
Fixed
- Android: a remotely disabled app no longer fires the attribution match request — previously
enabled=falsesuppressed only the event POSTs, and a fresh install still called/attribution/match. A disabled app now makes no attribution network calls at all.
-
2.4.021 Jul 2026Release notes
Open source →Changed
- Updated the Appstack iOS SDK to 4.4.0
- Updated the Appstack Android SDK to 1.5.0
- Raised the minimum supported iOS version to 15.0 (required by iOS SDK 4.4.0). This applies to both integration paths — the Swift Package Manager package (
Package.swift) and the CocoaPods podspec.
Release notes
Open source →Changed
- Updated the Appstack iOS SDK to 4.4.0
- Updated the Appstack Android SDK to 1.5.0
- Raised the minimum supported iOS version to 15.0 (required by iOS SDK 4.4.0). This applies to both integration paths — the Swift Package Manager package (
Package.swift) and the CocoaPods podspec.
-
2.4.0-rc121 Jul 2026 pre-releaseRelease notes
Open source →Moving 'Publish - dry run' after 'Update version in files' broke publishing:
flutter pub publish --dry-runfails on warnings (exit 65) and treats the
dirty git tree left by the sed version edits as a warning ('checked-in files
are modified in git'). The dry-run must run on the clean checkout; the real
publish uses -f to force past the version-file edits. This restores the order
that worked for 2.1.0-2.3.0. -
2.3.021 Jul 2026 withdrawnRelease notes
Open source →- Update Android and iOS plugin configurations to remove deprecated parameters
- Upgraded Android SDK dependency to version 1.5.0-rc0.
- Refactored AppstackPlugin to eliminate
isDebugandendpointBaseUrlparameters from the publicconfigureAPI, now handled internally. - Introduced a new method to read the development proxy URL from the app's manifest for local testing.
- Updated documentation to reflect the removal of deprecated parameters and their effects.
- Adjusted sample app and tests to align with the new configuration process.
- Enhance integration workflows for Appstack SDK logging and event delivery
- Added log capturing for Appstack SDK during iOS and Android integration tests to improve observability of event traffic.
- Updated iOS workflow to start capturing logs and display them after tests, ensuring visibility of SDK activity.
- Modified Android workflow to capture logcat output and surface relevant SDK logs in the test results.
- Adjusted integration tests to skip event delivery checks when the APPSTACK_API_KEY is not set, preventing false negatives in test results.
- Refactor Android integration test workflow to improve log capturing and event visibility
- Moved log capturing and test execution logic from the workflow file to a dedicated script (
ci_android_integration.sh) to maintain shell state. - Enhanced the script to capture logcat output and surface Appstack SDK logs in the CI job output, improving observability during integration tests.
- Updated the integration workflow to call the new script, streamlining the process and reducing complexity in the workflow configuration.
-
2.2.224 Jun 2026Release notes
Open source →Update CHANGELOG for version 2.2.2 and upgrade Appstack iOS SDK to 4.3.1
-
2.2.2-rc124 Jun 2026 pre-release -
2.2.117 Jun 2026 -
2.2.005 Jun 2026 -
2.1.119 May 2026Release notes
Open source →Fixed
- Synced iOS native implementation across all integration paths (CocoaPods and SPM): the SPM source copies of
AppstackPlugin.swiftwere stale and missingcustomerUserId,wrapperVersion, and the attribution event channel, causing an undefined symbol error at build time.
- Synced iOS native implementation across all integration paths (CocoaPods and SPM): the SPM source copies of
-
2.1.019 May 2026Release notes
Open source →Added
wrapperVersionis now automatically passed to the native iOS and Android SDKs on configure, identifying the Flutter wrapper version (e.g.flutter-2.1.0). This is handled internally and not exposed to the public API.
-
2.0.624 Apr 2026 -
2.0.520 Apr 2026Release notes
Open source →Added
- New
getAttributionParamsWithCallback()method — retrieves attribution parameters via a push-style stream backed by a native background thread (SwiftTask.detachedon iOS,Threadon Android). The stream emits one value then closes. Use this as an alternative togetAttributionParams()when attribution retrieval time may vary.
- New
-
2.0.408 Apr 2026 -
2.0.308 Apr 2026 -
2.0.226 Mar 2026 -
2.0.111 Feb 2026 -
2.0.010 Feb 2026 -
1.6.208 Feb 2026 -
1.6.108 Feb 2026 -
1.6.004 Feb 2026 -
1.5.130 Jan 2026Release notes
Open source →Added
- Updated the Android SDK to 1.3.1
- Updated the iOS SDK to 3.5.1
- Add the support of customer_user_id in configure method
-
1.5.028 Jan 2026 -
1.4.115 Jan 2026Release notes
Open source →Added
- Fix some bugs linked to Apple Search Ads attribution (upgrade to iOS 3.3.1)
-
1.4.014 Jan 2026 -
1.2.015 Dec 2025Release notes
Open source →Added
- New matching method on Android (upgrade to 1.2.2)
- New securities on iOS (upgrade to 3.1.1)
-
1.1.009 Dec 2025Release notes
Open source →Added
- New
getAttributionParams()method to retrieve attribution parameters from the SDK - Updated iOS and Android SDK references to latest versions with attribution params support
- Added attribution params display in sample app
- New
-
1.0.404 Dec 2025Release notes
Open source →Fixed
- Updated the iOS SDK dependencies (SPM & Pods static files) to 3.0.2.
-
1.0.325 Nov 2025Release notes
Open source →Fixed
- Updated the way we are handling the methods on iOS to ensure we are avoiding crashes & threads hanging
-
1.0.217 Nov 2025Release notes
Open source →Fixed
- Updated SPM plugin code to use
parametersmap instead of deprecatedrevenueparameter insendEventmethod
- Updated SPM plugin code to use
-
1.0.117 Nov 2025 withdrawnRelease notes
Open source →Fixed
- Fixed iOS SDK version reference to use 3.0.0 instead of 2.5.0, resolving compilation errors with
sendEventparameters andisSdkDisabledmethod
- Fixed iOS SDK version reference to use 3.0.0 instead of 2.5.0, resolving compilation errors with
-
1.0.014 Nov 2025 withdrawnRelease notes
Open source →Changed
- BREAKING CHANGE: Modified
sendEvent()method to acceptparametersmap instead ofrevenueparameter - Updated iOS SDK reference to 3.0.0
- Updated Android SDK reference to 1.0.0
- Both SDK versions now use parameters dictionary for event data instead of separate revenue parameter
- Updated all examples and documentation to use the new parameters-based API
Migration Guide
// Old API (deprecated) await AppstackPlugin.sendEvent(EventType.purchase, revenue: 29.99); // New API (current) await AppstackPlugin.sendEvent(EventType.purchase, parameters: {'revenue': 29.99, 'currency': 'USD'}); - BREAKING CHANGE: Modified
-
0.0.1431 Oct 2025Release notes
Open source →Changed
- Modified
configure()method to returnFuture<void>instead ofFuture<bool> - Updated documentation and examples to reflect the void return type
- Add a method
isSdkDisabled()to see the value configured in the iOS or the Android SDK
- Modified
-
0.0.1329 Oct 2025Release notes
Open source →Added
- New
getAppstackId()method to retrieve the unique Appstack ID for the current user - Updated example app to demonstrate the new
getAppstackId()functionality - Comprehensive test coverage for the new method across all platform layers
- Retrieve IDFA automatically on iOS
Changed
- Updated iOS native implementation to expose
getAppstackId()from AppstackSDK - Updated Android native implementation to expose
getAppstackId()from AppstackSDK - Enhanced documentation with usage examples for the new method
- New
-
0.0.1217 Oct 2025Release notes
Open source →- IMPORTANT : Add the support to be able to install the SDK with CocoaPods
- WARNING : This support feature will be removed as soon as this ticket will be completed and we will go back to SPM usage to have a much cleaner repository (deprecation on flutter's side of cocoapods)
-
0.0.1116 Oct 2025Release notes
Open source →- Update the documentation to reference the SPM setup needed to make works the SDK
-
0.0.1015 Oct 2025Release notes
Open source →- Update the changelog for 0.0.9 and 0.0.10 to avoid having a reduced score on pub.dev
-
0.0.915 Oct 2025Release notes
Open source →- Update the iOS SDK reference to 2.5.0 (use the new automatic releases for iOS)
-
0.0.807 Oct 2025Release notes
Open source →Fixed
- Clean the bundling of the iOS Appstack SDK (using SPM / GitHub refs)
-
0.0.706 Oct 2025 -
0.0.606 Oct 2025 withdrawn -
0.0.506 Oct 2025 withdrawnRelease notes
Open source →Fixed - DEPRECATED
- Did some cleanup to do easier maintenances on the SDK
-
0.0.406 Oct 2025Release notes
Open source →Fixed
- Match in a better way what is expected for Swift Package Manager handling
-
0.0.306 Oct 2025Release notes
Open source →Added
- Example documentation necessary for pub.dev points completion
- Formatting using dart format .
- add Package.swift to handle Swift Package Manager
-
0.0.206 Oct 2025 -
0.0.106 Oct 2025Release notes
Open source →Added
- Initial release of Appstack Flutter Plugin
- Support for iOS (14.3+) and Android (API 21+)
- Event tracking with
sendEvent()method - Revenue tracking for purchase events
- Apple Search Ads attribution support on iOS
- Comprehensive EventType enum with standard attribution events
- Debug mode and custom log levels
- Custom endpoint URL support
- Simple, clean API following Flutter best practices
Features
- iOS Integration: Full support for Apple Search Ads attribution
- Android Integration: Google Play Store attribution support
- Event Types:
- Lifecycle: install, login, signUp, register
- Monetization: purchase, addToCart, addToWishlist, initiateCheckout, startTrial, subscribe
- Gaming: levelStart, levelComplete
- Engagement: tutorialComplete, search, viewItem, viewContent, share
- Custom: custom events with custom names
- Configuration Options: Debug mode, log levels, custom endpoints
- Documentation: Complete README and USAGE guide
Technical Details
- Minimum iOS version: 14.3
- Minimum Android SDK: 21 (Android 5.0)
- Flutter SDK: 3.3.0+
- Dart SDK: 3.9.2+
- Dependencies:
- iOS: AppstackSDK ~> 2.0
- Android: tech.appstack.android-sdk:appstack-android-sdk:0.0.12