NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev
AppActor Flutter SDK — server-authoritative in-app purchase management for iOS and Android.
Last release 10 days ago
28 Sep 2026
Release timing varies
gaps range from 8 days to 2 months
Nearly every release is documented
notes for 26 of 26 stable releases
Nothing withdrawn
no release was ever pulled
6 months old
26 releases · first in 2026
One column per month.
Updated the Android native dependency to com.appactor:appactor-plugin:2.4.3. It verifies signed responses with Tink instead of BouncyCastle, which fix
Updated the Android native dependency to com.appactor:appactor-plugin:2.4.3. It verifies signed responses with Tink instead of BouncyCastle, which fixes two Android build failures:
android.enableJetifier=true on AGP 8.9.1–8.12.x failed with "Unsupported class file major version 69".Apps that added a packaging { resources { excludes += ... } } workaround for the first one can remove it.
Fixed: on Android, originalPurchaseDate was always null and latestPurchaseDate repeated purchaseDate. They now match iOS: originalPurchaseDate is the purchase date and latestPurchaseDate the last renewal.
Fixed: AppActor events went silent in the app when a second Flutter engine started in the same process. On Android that happens as soon as FirebaseMessaging.onBackgroundMessage is registered; on iOS when flutter_local_notifications runs a background notification action. The second engine took over the events, so onCustomerInfoUpdated, onDeferredPurchaseResolved and onReceiptPipelineEvent stopped emitting. Every engine that uses AppActor now receives them. An engine that never calls AppActor, such as the FCM background isolate, gets none.
Fixed: on iOS, a promoted purchase or win-back offer intent was lost if nothing listened to onPurchaseIntent when it arrived, for example when the app launched from the App Store and subscribes only on its paywall. Intents now wait for a listener (up to 10, each for the 5 minutes the native side keeps it), and reset() drops them.
Changed: on iOS, the plugin now detaches when its Flutter engine is destroyed (add-to-app); before, the engine never told it. When the last engine goes, the native SDK buys a promoted purchase itself instead of the intent being lost.
Changed, breaking for exhaustive switches: added AppActorProductType.nonRenewingSubscription. App Store non-renewing subscriptions used to come through as unknown. A switch over AppActorProductType that lists every case, without a default, stops compiling until it handles the new case. The value sits between subscription and nonConsumable, so the index of the ones after it moves up by one.
Changed, breaking: the minimum is iOS 16 and Android minSdk 26 (Android 8.0), as the native SDKs now require. An app with a lower floor fails to build
AppActorPlugin 0.2.1 and the Android native dependency to com.appactor:appactor-plugin:2.4.2. They carry the 2026-09-26 audit fixes and the 2026-09-27 re-audit fixes. They check signed responses against the app's API key, so a proxy that swaps in another project's key can't unlock premium.onCustomerInfoUpdated no longer emits unchanged info. The first emission after an identity change still comes.appactor_flutter 0.0.24
appactor_flutter 0.0.24
AppActorOffering.offeringKey (the dashboard lookup key), AppActorOfferings.getOffering(offeringKey) / offerings['key'] / allOfferings (current first), and AppActor.instance.getOffering(offeringKey) to fetch and look up in one call.AppActor.instance.getExperiment(key) returns an AppActorExperiment that is never null — isEnrolled, variantKey, isVariant(key), boolValue / stringValue / intValue / doubleValue(defaultValue:), and experiment['key'] for JSON payloads. getExperimentAssignment is unchanged underneath.AppActorOfferings.offeringByLookupKey — use getOffering(offeringKey) (a one-line rename).AppActorPlugin 0.1.13: the launch sweep now posts every unfinished StoreKit transaction and finishes each after the server accepts it, so older renewals no longer accumulate in Transaction.unfinished; unverified unfinished transactions are finished immediately. The native SDKs also gained the same offerings/experiments API.com.appactor:appactor-plugin:2.3.15 (same offerings/experiments API on the native side).appactor_flutter 0.0.23
appactor_flutter 0.0.23
com.appactor:appactor-plugin:2.3.14: Google Play subscription purchases that do not name an explicit offer now auto-apply the best eligible offer Play returns for the base plan (longest free trial, else cheapest introductory price, else the base plan) — matching RevenueCat / Adapty. The native SDK also now exposes the resolved offer's pricing phases so trial/intro pricing can be surfaced. iOS is unaffected.Updated the Android native dependency to com.appactor:appactor-plugin:2.3.13: a Google Play subscription that names a specific offer (e.g. a free tria
com.appactor:appactor-plugin:2.3.13: a Google Play subscription that names a specific offer (e.g. a free trial) now falls back to the base plan when Play omits that offer for a returning / trial-ineligible user, so the user is charged the standard price instead of being unable to subscribe. iOS is unaffected.Updated native dependencies to carry the cold-start improvements: iOS AppActorPlugin 0.1.12 and Android com.appactor:appactor-plugin:2.3.12 (cache-fir
AppActorPlugin 0.1.12 and Android com.appactor:appactor-plugin:2.3.12 (cache-first/offline entitlement seeding at launch; skipped redundant device-attribute sync).Release 0.0.20: bump native deps to AppActorPlugin 0.1.11 / appactor-…
Release 0.0.20: bump native deps to AppActorPlugin 0.1.11 / appactor-…
AppActorPlugin 0.1.11 (flutter-6 non-subscription original_transaction_identifier; ios-7 StoreKit product-cache TTL) and Android com.appactor:appactor-plugin:2.3.11 (android-7 receipt-queue quarantine; android-12 bridge threading; android-25 date dedup).Release 0.0.19 (android-plugin 2.3.10)
Release 0.0.19 (android-plugin 2.3.10)
com.appactor:appactor-plugin:2.3.10 (AppActorPaymentProcessor god-class decomposition; behavior-preserving, public API unchanged). iOS native dependency stays at AppActorPlugin 0.1.10.Release 0.0.18 (audit flutter-1/9 + native deps iOS 0.1.10 / Android …
Release 0.0.18 (audit flutter-1/9 + native deps iOS 0.1.10 / Android …
AppActorPackage.toPurchaseParams() and its deprecated toJson() alias. The purchase wire payload is built from package_id (plus optional offering_id / old_purchase_token / replacement_mode / quantity / placement); the native SDK resolves product_id / store / base_plan_id / offer_id server-side. (audit finding flutter-9)configure() no longer rejects the configure() Future after the core native configure has already succeeded. (audit finding flutter-1)15.1 (from 15.0).AppActorPlugin 0.1.10 and Android appactor-plugin 2.3.9, delivering the iOS/Android audit fixes (ios-2/3/16/17/19, android-3/4/6/10/19) to Flutter consumers.Updated native SDK dependencies to Android 2.3.8 and iOS 0.1.9 for Apple renewal coalescing cleanup hardening and current Android publication metadata
2.3.8 and iOS 0.1.9 for Apple renewal coalescing cleanup hardening and current Android publication metadata.Updated native SDK dependencies to Android 2.3.7 and iOS 0.1.8 for profile context identity-transition hardening.
2.3.7 and iOS 0.1.8 for profile context identity-transition hardening.Documented that native iOS/Android SDKs now automatically sync privacy-safe profile context during configure().
configure().collectDeviceIdentifiers() remains the explicit opt-in path for additional native identifiers.2.3.6 and iOS 0.1.7.Updated native SDK dependencies to Android 2.3.5 and iOS 0.1.6 for quiet syncPurchases parity and app-open renewal coalescing.
2.3.5 and iOS 0.1.6 for quiet syncPurchases parity and app-open renewal coalescing.syncPurchases() as the quiet sync API while keeping drainReceiptQueueAndRefreshCustomer() as the explicit queue-drain API.Release Flutter SDK 0.0.13
Release Flutter SDK 0.0.13
purchasePackage; null or blank placements are omitted from the native payload.2.3.4 and iOS 0.1.5 for purchase placement support.Updated native SDK dependencies to Android 2.3.3 and iOS 0.1.4 for attribution helper null-clear parity and Android quantity validation.
2.3.3 and iOS 0.1.4 for attribution helper null-clear parity and Android quantity validation.1 while keeping native platforms responsible for supported quantity limits.Updated native SDK dependencies to Android 2.3.2 and iOS 0.1.3 for polished customer attributes, integration identifiers, attribution helpers, and typ
2.3.2 and iOS 0.1.3 for polished customer attributes, integration identifiers, attribution helpers, and typed date payload parity.setAppsflyerID, setAdjustID, setMediaSource, and setCampaign.unsetAttribute, mixed arrays are rejected, and date values use a typed envelope.Updated native SDK dependencies to Android 0.1.3 and iOS 0.1.2 for queued transaction update source-intent parity.
0.1.3 and iOS 0.1.2 for queued transaction update source-intent parity.Updated native SDK dependencies to Android 0.1.2 and iOS 0.1.1 for source intent receipt classification support.
0.1.2 and iOS 0.1.1 for source intent receipt classification support.Updated native SDK dependencies to Android 0.1.1 and iOS 0.1.0.
0.1.1 and iOS 0.1.0.Updated the Android native dependency to 0.1.0.
0.1.0.price_amount_micros parsing for Android price visibility while leaving iOS payloads compatible.Updated native SDK dependencies to 0.0.9 on Android Maven Central and iOS CocoaPods/SPM.
0.0.9 on Android Maven Central and iOS CocoaPods/SPM.storeProductId while preserving public product identifiers.Updated native SDK dependencies to 0.0.8 on Android Maven Central and iOS CocoaPods/SPM.
0.0.8 on Android Maven Central and iOS CocoaPods/SPM.isConfigured() to match the native plugin contract. configure() is now the readiness boundary and returns after native bootstrap completes.configure(..., appUserId: ...) so Flutter can start with an explicit identity or let native reuse/create the anonymous user during bootstrap.configure() now sends canonical nested options.platform_info metadata to the native plugins.Updated native SDK dependencies to 0.0.4 (Android Maven Central + iOS CocoaPods/SPM).
quietSyncPurchases() and drainReceiptQueueAndRefreshCustomer() to match the new native plugin requests.syncPurchases() now follows native 0.0.4 behavior and drains the receipt queue before refreshing customer info.Updated native SDK dependencies to 0.0.3 (Android Maven Central + iOS CocoaPods/SPM).
AppActorVerificationResult enum — exposes server response signature verification status (notRequested, verified, verifiedOnDevice, failed).verification field to AppActorCustomerInfo and AppActorOfferings.getCustomerInfo() — removes stale cache window.Updated native SDK dependencies to 0.0.2 (Android Maven Central + iOS CocoaPods/SPM).
offeringId field to AppActorPackage for purchase analytics attribution.scope, retryAfterSeconds) now available on AppActorError — fields were already present in the Dart model since 0.0.1.Initial release of AppActor Flutter SDK.
Your coding agent can read these notes before it upgrades. Set up the MCP server →