flutter_inapp_purchase 7.1.7
flutter_inapp_purchase: ^7.1.7 copied to clipboard
In App Purchase plugin for flutter. This project has been forked by react-native-iap and we are willing to share same experience with that on react-native.
CHANGELOG #
7.1.7 #
- fix(ios): corrected transactionReason detection for re-purchased subscriptions by upgrading openiap-apple to
1.2.18- Fixed an issue where previously cancelled subscriptions that were purchased again were incorrectly marked asRENEWALinstead ofPURCHASE. Now uses Apple'stransactionReasonfrom JSON representation for accurate transaction type detection.
7.1.6 #
- Accidental release with no changes.
7.1.5 #
- Resolve issue like react-native-iap issue #3054 by upgrading openiap-apple to
1.2.17.
7.1.4 #
- Fixed missing upgrade of
openiap-applemodule to1.2.14in the previous release.
7.1.3 #
- Updated
openiap-appleto1.2.14, improving promotional offer error messages.
7.1.2 #
- Upgrade openiap-apple module to
1.2.13.
7.1.1 #
- Upgrade openiap-apple module to
1.2.12.
7.1.0 #
- Breaking:
fetchProducts()now returnsFuture<List<dynamic>>instead of specific typed lists- Requires explicit type annotation for proper type inference
- Example:
final List<Product> products = await iap.fetchProducts(skus: ['id'], type: ProductQueryType.InApp); - For subscriptions:
final List<ProductSubscription> subscriptions = await iap.fetchProducts(skus: ['id'], type: ProductQueryType.Subs); - Simplifies API by removing the need for
.valueor.productsgetters - Fixes #576 - Type inference issues with
FetchProductsResult
7.0.1 #
- Add missing
isEligibleForIntroOfferIOSmethod (Fixes #574)
7.0.0 #
- Feature: Full Alternative Billing support for iOS and Android
- iOS: External purchase links via
presentExternalPurchaseLinkIOS() - Android: Alternative-Only and User-Choice billing modes
- New event listener:
userChoiceBillingAndroidfor Android User Choice Billing - New APIs:
checkAlternativeBillingAvailabilityAndroid(),showAlternativeBillingDialogAndroid(),createAlternativeBillingTokenAndroid()
- iOS: External purchase links via
- Breaking: Major API redesign with named parameters and record types
fetchProducts()now uses named parameters instead ofProductRequestobjectgetAvailablePurchases()now uses named parameters instead ofPurchaseOptionsobjectfinishTransaction()simplified to acceptPurchaseobject directlyvalidateReceiptIOS(),deepLinkToSubscriptions()now use named parametersRequestPurchaseProps.inApp()/.subs()factory methods removed (use constructor withtypeparameter)
- Breaking: Removed deprecated iOS-specific methods
getAvailableItemsIOS()- UsegetAvailablePurchases()insteadgetAppTransactionTypedIOS()- UsegetAppTransactionIOS()insteadgetPurchaseHistoriesIOS()- UsegetAvailablePurchases()with options instead
- Improvement: Moved
_buildIosPurchasePayloadto public utils for better code organization - π Full release notes
- π Migration guide
6.8.8 #
- Update OpenIAP google module to
1.2.10
6.8.7 #
- Update readme
6.8.6 #
- feat: fetchProducts with ProductQueryType.All #568
6.8.5 #
- fix(android): openiap module version path
6.8.4 #
- fix(ios): Resolve #567
6.8.3 #
- fix(ios): send error only once - prevent duplicate purchase error events on iOS
- chore(deps): openiap-google@1.2.7
- chore: refine error codes - improve error code mapping and remove message-based inference
Full Changelog: https://github.com/hyochan/flutter_inapp_purchase/compare/6.8.2...6.8.3
6.8.2 #
- fix: resolve type casting error with PurchaseOptions by @hyochan in https://github.com/hyochan/flutter_inapp_purchase/pull/565
- chore(android): refine openiap-versions.json search by @hyochan in https://github.com/hyochan/flutter_inapp_purchase/pull/566
Full Changelog: https://github.com/hyochan/flutter_inapp_purchase/compare/6.8.1...6.8.2
6.8.1 #
- chore(deps): openiap-apple@1.2.3 #562
6.8.0 #
- migrate Flutter In-App Purchase fully into the OpenIAP ecosystem, aligning with
openiap-apple@1.2.2,openiap-google@1.2.6, andopeniap-gql@1.0.8. - update product and purchase APIs: use
fetchProducts(ProductRequest(...))with typed helpers and extendgetAvailablePurchases()viaPurchaseOptions; legacygetProducts,getSubscriptions, andgetPurchaseHistoriesare removed. - clarify identifiers by keeping native transaction IDs untouched and documenting
purchaseTokenas the canonical receipt for server validation. - π full release notes
6.7.2 #
- refactor: align openiap-gql@1.0.6
- migration: integrate
openiap-google@1.1.12 - feat: purchase helper extensions; product prices now use displayPrice and transaction IDs shown only when available.
- refactor: api migrated to a generated, typed handler surface; purchase requests now use a single props object and result types simplified.
- docs: added conventions guide, multiple blog/FAQ updates, and CHANGELOG entry for 6.7.1.
6.7.1 #
- Follow-up fixes & refinements for 6.7.0
6.7.0 #
- fix(android): honor subscription offerToken
- refactor: align openiap-gql@1.0.2
- migration: integrate
openiap-google@1.1.11 - migration: integrate
openiap-apple@1.1.12
6.6.1 #
Fixed #
- iOS: Ensure
product.idis always populated infetchProducts()(fixes cases where id was empty on iOS). The parser now resolves id from the first non-empty of:productIdβidβskuβproductIdentifier(#550). In debug builds, logs which key was used.withOpacityin example UI. - refactor: remove overridden field in
PurchaseIOS(usesuper.expirationDateIOS). - refactor: locally suppress legacy
jwsRepresentationmapping and deprecatedrequestPurchasecalls kept for backward compatibility.
Changed #
- Products API:
idis the primary identifier forProduct/ProductSubscription.productIdis kept for backward compatibility only (see Deprecated). fetchProducts(): Adds support fortype: 'all'.- iOS: passes
'all'through the nativefetchProductscall - Android: fetches
inappandsubs, then merges results
- iOS: passes
productIdonProductCommon: Useidinstead (will be removed in 6.6.0).Subscriptiontype name: UseProductSubscriptioninstead (will be removed in 6.6.0). The alias keeps existing code working.- Parser now emits
ProductSubscription(alias ofSubscription) for subscriptions internally. - Docs/Examples: Completed migration from
PurchasedItemβPurchasein current docs/examples.
6.6.0 #
Changed #
- Android: Migrated native billing to openiap-google and simplified plugin with coroutines and connection gating.
- Android: Hardened null-safety and error logging; removed BuildConfig dependency in Amazon plugin.
- Dart: More robust product parsing (platform heuristics, per-item guards) and safer generics in fetchProducts.
- Example: Fixed sporadic setState after dispose by guarding mounted across async paths.
Added #
- iOS mixin: Convenience helpers (subscription group, App Store country, available items, typed app transaction, purchase histories).
Tooling #
- Pre-commit: Align dart format flags with CI and avoid staging untracked files.
Deprecated #
- Methods (removal in 6.6.0):
fetchProducts()β usefetchProducts()purchaseAsync()β userequestPurchase()requestPurchaseAuto()β userequestPurchase()finalize()β useendConnection()deepLinkToSubscriptionsAndroid()β use platform UI links as documentedgetPurchaseHistories()β usegetAvailablePurchases(PurchaseOptions(onlyIncludeActiveItemsIOS: false))
6.5.2 #
Fixed #
- iOS: Fix product/discount price parsing to tolerate numeric values (prevents
type 'double' is not a subtype of type 'String?'), fixes #547.
Changed #
- iOS: pin OpenIAP Apple native module to
openiap 1.1.9(exact version) to avoid unexpected CocoaPods minor updates.
Notes #
- Recommend upgrading to 6.5.2. Prior 6.5.0β6.5.1 allowed older constraints; this release enforces exact 1.1.9 for stability. No breaking changes.
6.5.1 #
6.5.0 #
Changed #
- iOS: rename native channel method
buyProducttorequestPurchaseand update Dart to callrequestPurchase(tests adjusted). - iOS: standardize error codes/messages using OpenIAP (
OpenIapError.defaultMessage) instead of adβhoc reason strings. - Dart: make product parsing tolerant of numeric fields (e.g., price, subscriptionPeriodNumberIOS) to avoid type cast crashes.
- Restore flow: on iOS run
syncIOS()(softβfail) thengetAvailablePurchases(); on Android callgetAvailablePurchases().
Added #
- iOS mixin:
clearTransactionIOS,getPromotedProductIOS,requestPurchaseOnPromotedProductIOShelpers.
Removed #
- iOS: remove noβop
clearTransactionCachechannel case. - Deprecated/legacy convenience methods: internal
getAppTransactionTyped,getProductsAsync,finishTransactionAsync, nonβsuffixedpresentCodeRedemptionSheet/showManageSubscriptions.
iOS Native #
- Use OpenIAP error codes for
initConnection,fetchProducts,finishTransaction, receipt validation and system UI calls. - Purchase error event now emits
E_PURCHASE_ERRORwith standard message.
CocoaPods #
- Podspec requires
openiap ~> 1.1.7. Example Podfile uses CDN and pins git tag when needed.
6.4.6 #
Fixed #
- iOS: Retrieve expired subscriptions in StoreKit 2 sandbox (#543)
- Added
PurchaseOptionsparameter togetAvailablePurchases()for OpenIAP compliance - Use
onlyIncludeActiveItemsIOS: falseto include expired subscriptions
- Added
Deprecated #
getPurchaseHistories()β UsegetAvailablePurchases()with options (removed in 6.6.0)
6.4.5 #
Changed #
- BREAKING: Updated
getAvailablePurchases()to supportPurchaseOptionsparameter (OpenIAP compliant)- Now accepts optional
PurchaseOptionsparameter for platform-specific configuration - iOS: Added
onlyIncludeActiveItemsIOSoption (default: true) to control whether expired subscriptions are included
- Now accepts optional
Added #
- Added
PurchaseOptionsclass with iOS-specific options:alsoPublishToEventListenerIOS: Whether to also publish purchase events to the event listener when fetching available purchasesonlyIncludeActiveItemsIOS: Whether to only include active items (set to false to get expired subscriptions)
- iOS: Added
getPurchaseHistoriesIOS()platform-specific method that retrieves all transactions including expired subscriptions
Deprecated #
getPurchaseHistories()- UsegetAvailablePurchases(PurchaseOptions(onlyIncludeActiveItemsIOS: false))instead (will be removed in 6.6.0)
Bug Fixes #
- iOS: Fixed missing transactionStateIOS field in getAvailableItems method (#538)
- iOS: Fixed expired subscriptions not being returned in purchase history (#543)
- Added new iOS native method using
Transaction.allinstead ofTransaction.currentEntitlements - This ensures all historical purchases including expired subscriptions are returned correctly
- Added new iOS native method using
6.4.3 #
Bug Fixes #
- iOS: Replace ISO8601DateFormatter with millisecond timestamps for date fields (#535)
- Changed
expirationDateIOSandrevocationDateIOSto use millisecond timestamps - Added explicit Int64 casting for better type safety
- Aligned with expo-iap implementation for consistency
- Improved Dart type safety for date parsing with safe num to int conversion
- Changed
6.4.2 #
Bug Fixes #
- Android: Fixed
subscriptionOfferDetailsAndroidfield returning null (Fixes #534)- Added proper parsing for
subscriptionOfferDetailsAndroidin subscription products - Removed parsing of deprecated
subscriptionOfferDetailsfield - Fixed Map type casting issues that could cause runtime errors with
Map<dynamic, dynamic>inputs
- Added proper parsing for
Improvements #
- Type Safety: Improved type safety for JSON parsing across the codebase
- Added safe JSON map conversion helper to prevent type casting errors
- Fixed all unsafe
as Map<String, dynamic>casts intypes.dart - Ensures robust handling of platform channel data
6.4.1 #
Improvements #
- ActiveSubscription Type: Implemented a dedicated
ActiveSubscriptiontype for subscription APIs to provide better type safety and clearer subscription status information (#532)getActiveSubscriptions()now returnsList<ActiveSubscription>instead ofList<SubscriptionPurchase>- New type includes subscription-specific fields like
willExpireSoonanddaysUntilExpirationIOS - Automatically calculates expiration status for iOS subscriptions
- Provides cleaner API with subscription-focused properties
6.4.0 #
Breaking Changes #
-
Simplified fetchProducts API: The
fetchProductsmethod now accepts direct parameters instead of a wrapper object (Fixes #527)// Before (6.3.x) final products = await iap.fetchProducts( RequestProductsParams( skus: ['product_id'], type: PurchaseType.inapp, ), ); // After (6.4.0) final products = await iap.fetchProducts( skus: ['product_id'], type: PurchaseType.inapp, // Optional, defaults to PurchaseType.inapp );- Removed
RequestProductsParamsclass - This change simplifies the API and improves developer experience based on user feedback
- Removed
New Features #
-
DSL-like Builder Pattern for Purchase Requests: Added a builder pattern API for more intuitive and type-safe purchase request construction
// New builder pattern approach await iap.requestPurchaseWithBuilder( build: (r) => r ..type = PurchaseType.inapp ..withIOS((i) => i ..sku = 'product_id' ..quantity = 1) ..withAndroid((a) => a ..skus = ['product_id']), );- Provides better type safety with platform-specific configurations
- Supports cascade notation for cleaner code
- Separate builders for iOS and Android parameters
- Available for both purchases and subscriptions
Improvements #
- Replaced magic numbers with enums: Android purchase states now use
AndroidPurchaseStateenum instead of hardcoded values (0, 1, 2)- Better code readability and maintainability
- Type-safe state checking
Deprecated Items Removed #
The following deprecated items from v6.3.x have been removed in v6.4.0:
subscriptionOfferDetailsfield (usesubscriptionOfferDetailsAndroidinstead)prorationModefield (usereplacementModeAndroidinstead)AndroidProrationModetypedef (useAndroidReplacementModeinstead)
Note to Users #
We understand there have been several breaking changes recently. We sincerely apologize for any inconvenience. These changes are part of our effort to quickly address the long maintenance gap and bring the library up to modern standards. With version 6.4.0, we believe the major restructuring is now complete, and the API should remain stable going forward.
6.3.3 #
Bug Fixes #
- Android Type Mapping: Fixed Android-specific field mappings to match TypeScript/OpenIAP specifications
- Fixed Product parsing for
nameAndroidandoneTimePurchaseOfferDetailsAndroidfields - Fixed Purchase
dataAndroidfield mapping from native Android data - Added proper platform checks for Android/iOS specific fields in toJson output
- Fixed subscription offer details structure to handle nested pricingPhases
- Fixed PricingPhase parsing for Android field names (formattedPrice, priceCurrencyCode, priceAmountMicros)
- Fixed Product parsing for
Code Quality #
- Platform-Specific Field Segregation: Enhanced platform checks across all type classes
- Added
_platform.isAndroidand_platform.isIOSconditions for platform-specific fields - Android-specific fields now only appear on Android platform
- iOS-specific fields now only appear on iOS platform
- Added comprehensive TODO comments for v6.4.0 deprecation cleanup
- Added
Documentation #
- Release Notes: Added proper version planning comments for deprecated field removal in v6.4.0
6.3.2 #
Bug Fixes #
- iOS Purchase State Detection: Enhanced purchase state detection for iOS
- Fixed UI getting stuck in "Processing..." state when
transactionStateIOSis null - Now properly detects successful purchases using multiple conditions (state, token, transaction ID)
- Added duplicate transaction tracking to prevent double processing
- Fixed UI getting stuck in "Processing..." state when
- Timeout Error Handling: Improved error handling for store server timeouts
- Added specific handling for Korean timeout message "μμ²ν μκ°μ΄ μ΄κ³Όλμμ΅λλ€"
- Provides user-friendly troubleshooting steps for network issues
- Security: Enhanced security for sensitive data logging
- Purchase tokens are now masked in debug logs (showing only last 4 characters)
- All sensitive logging is properly gated behind
kDebugModeflag
Documentation #
- Added comprehensive iOS purchase state detection guide
- Enhanced troubleshooting documentation with iOS-specific solutions
6.3.1 #
Bug Fixes #
- Android Subscription Loading: Fixed type casting error when loading subscriptions
- Fixed
_Map<String, dynamic>type casting issue that prevented subscriptions from loading - Improved handling of pricing phases data structure from Android
- Fixed parsing of subscription offer details from nested JSON structure
- Fixed
- Test Product Cleanup: Removed deprecated
android.test.purchasedtest product ID- This test ID is no longer valid in Google Play Billing Library 6+
- Type Safety: Improved type handling for Map conversions from native platforms
- Better handling of different Map implementations from iOS and Android
6.3.0 #
Bug Fixes #
- CRITICAL FIX: Android Purchase State Mapping: Fixed incorrect mapping of Android purchase states (#524)
- Previously mapped: 0=PURCHASED, 1=PENDING (incorrect)
- Now correctly maps: 0=UNSPECIFIED_STATE, 1=PURCHASED, 2=PENDING
- This fix aligns with official Google Play Billing documentation
- Prevents misinterpreting UNSPECIFIED_STATE as a completed purchase
- UNSPECIFIED_STATE (0) and unknown states now properly map to
PurchaseState.unspecified
Features #
-
Enhanced OpenIAP Compliance: Extended OpenIAP specification support with comprehensive field mapping
- Added full iOS-specific field support:
displayName,displayPrice,isFamilyShareable,jsonRepresentation,discountsIOS,subscriptioninfo, and promotional offer fields - Added comprehensive Android-specific field support:
originalPrice,originalPriceAmount,freeTrialPeriod,subscriptionOffersAndroid, and billing cycle information - Enhanced Purchase object with StoreKit 2 fields:
verificationResultIOS,environmentIOS,expirationDateIOS,revocationDateIOS, and transaction metadata
- Added full iOS-specific field support:
-
Improved Test Organization: Restructured test suite by business flows
- Purchase Flow Tests: General purchase operations and error handling
- Subscription Flow Tests: Subscription-specific operations and lifecycle management
- Available Purchases Tests: Purchase history, restoration, and transaction management
- Enhanced test coverage from 26% to 28.2%
Improvements #
-
Type Safety: Enhanced type casting and JSON parsing reliability
- Fixed
Map<Object?, Object?>toMap<String, dynamic>conversion issues - Improved null safety handling for platform-specific fields
- Better error handling for malformed data
- Fixed
-
Subscription Management: Enhanced active subscription detection
- Improved iOS subscription detection logic for better reliability
- Added fallback logic for subscription identification across platforms
-
Code Quality: Comprehensive test suite improvements
- All 95 tests now pass consistently
- Flexible test assertions that adapt to mock data variations
- Better separation of platform-specific test scenarios
Bug Fixes #
- Critical Fix: Fixed iOS subscription loading issue where
fetchProductswithPurchaseType.subsreturned empty arrays- iOS now correctly uses
getItemsmethod instead of unsupportedgetSubscriptions - Resolves GitHub issues where users couldn't load subscription products on iOS
- iOS now correctly uses
- Fixed type casting errors in purchase data conversion
- Fixed subscription detection on iOS platform
- Fixed Android purchase state mapping in active subscription queries
- Resolved null reference exceptions for platform-specific fields
- Fixed test expectations to match actual implementation behavior
Technical Improvements #
- Enhanced mock data consistency across test files
- Improved JSON serialization/deserialization robustness
- Better error messages and debugging information
- Standardized field naming conventions following OpenIAP specification
Breaking Changes #
None - This version maintains full backward compatibility while extending functionality.
6.2.0 #
Features #
- OpenIAP Compliance: Added
idfield toPurchaseclass for standardized transaction identification - Unified Purchase Token: Added
purchaseTokenfield for cross-platform server validation- iOS: Contains JWS representation for App Store validation
- Android: Contains purchase token for Google Play validation
- Deprecated platform-specific token fields in favor of unified approach
Improvements #
- Transaction Management:
finishTransactionnow acceptsPurchaseobjects directly - iOS StoreKit 2: Complete implementation with improved transaction handling
- Date Handling: Fixed date parsing issues across platforms
- Error Handling: Enhanced error reporting and duplicate event prevention
Bug Fixes #
- Fixed missing
transactionIdandidfields in Android purchase responses - Fixed iOS transaction finishing with proper ID lookup
- Fixed date conversion issues in
Purchase.fromJson()
Breaking Changes #
None - This version maintains backward compatibility.
6.1.0 #
Breaking Changes #
- API Cleanup: Removed all deprecated methods that were marked for removal in 6.0.0
- Removed
initialize()- useinitConnection()instead - Removed
checkSubscribed()- implement custom logic withgetAvailablePurchases() - Removed
showInAppMessageAndroid()- no longer supported - Removed
manageSubscription()- usedeepLinkToSubscriptionsAndroid()instead - Removed
openPlayStoreSubscriptions()- usedeepLinkToSubscriptionsAndroid()instead - Removed
clearTransactionIOS()- no longer needed - Removed
showPromoCodesIOS()- usepresentCodeRedemptionSheetIOS()instead - Removed
getPromotedProductIOS()andrequestPromotedProductIOS()- use standard purchase flow - Removed
requestProductWithOfferIOS()andrequestPurchaseWithQuantityIOS()- userequestPurchase()with RequestPurchase object - Removed
consumePurchaseAndroidLegacy()andvalidateReceiptAndroidLegacy()- use modern equivalents - Removed
deepLinkToSubscriptionsAndroidLegacy()- usedeepLinkToSubscriptionsAndroid() - Removed
acknowledgePurchaseAndroid()- usefinishTransaction()instead
- Removed
Improvements #
- Code Quality: Removed internal legacy methods and cleaned up codebase
- Removed
_requestPurchaseOld()internal method - Consolidated duplicate functionality
- Improved type safety and consistency
- Removed
Migration Guide #
If you're upgrading from 6.0.x and were using any deprecated methods:
- Replace
initialize()withinitConnection() - Replace
acknowledgePurchaseAndroid()withfinishTransaction() - Use
requestPurchase()with proper RequestPurchase objects instead of platform-specific methods - Use
presentCodeRedemptionSheetIOS()for promo codes on iOS
6.0.2 #
Bug Fixes #
- Android: Fixed missing
signatureAndroidfield in purchase conversion- Added
signatureAndroidand other Android-specific fields to the Purchase object - Ensures Android purchase signature is properly passed through for receipt validation
- Added
6.0.1 #
Bug Fixes #
- iOS: Fixed type casting issue where
subscriptionPeriodNumberIOSwas sent as integer instead of string from native iOS code, causing runtime errors - Internal: Renamed unused stream controllers for better code clarity
_purchaseUpdatedControllerβ_purchaseUpdatedListener_purchaseErrorListenerControllerβ_purchaseErrorListener
6.0.0 #
Major Release - Open IAP Specification Compliance #
This major release redesigns the API to fully comply with the Open IAP specification, providing a standardized interface for in-app purchases across platforms.
What is Open IAP? #
Open IAP is an open standard for implementing in-app purchases consistently across different platforms and frameworks. By following this specification, flutter_inapp_purchase now offers:
- Consistent API design patterns
- Standardized error codes and handling
- Unified purchase flow across iOS and Android
- Better interoperability with other IAP libraries
Breaking Changes #
- Architecture: Complete redesign following Open IAP specification
- Removed
useIaphook andIapProvider- useFlutterInappPurchase.instancedirectly - Removed
flutter_hooksdependency - Simplified API with direct instance access pattern
- Removed
- iOS: Now requires iOS 11.0+ with StoreKit 2 support (iOS 15.0+)
- Android: Updated to Billing Client v8.0.0
- API Changes:
- Enum naming convention:
E_UNKNOWNβUnknown(PascalCase) - Channel access:
FlutterInappPurchase.channelβFlutterInappPurchase.instance.channel - Unified error handling with standardized error codes
- Enum naming convention:
New Features #
- Open IAP Compliance: Full implementation of the Open IAP specification
- Improved Error Handling: Standardized error codes across platforms
- Event-based Architecture: New listeners for purchase updates and errors
- StoreKit 2 Support: Automatic transaction verification on iOS 15.0+
- Better Type Safety: Enhanced TypeScript-like type definitions
Migration Guide #
// Before (5.x)
final iap = useIap();
await iap.initialize();
// After (6.0)
final iap = FlutterInappPurchase.instance;
await iap.initConnection();
For complete migration details, see the documentation.
5.6.2 #
- fix: removed references to deprecated v1 Android embedding by @moodstubos in https://github.com/hyochan/flutter_inapp_purchase/pull/497
5.6.1 #
- Erroneous duplicate item by @deakjahn in https://github.com/hyochan/flutter_inapp_purchase/pull/441
- Fixed consumable products reading on Android by @33-Elephants in https://github.com/hyochan/flutter_inapp_purchase/pull/439
- fix: Support AGP8 namespace by @dev-yakuza in https://github.com/hyochan/flutter_inapp_purchase/pull/467
5.6.0 #
-
refactor: android init connection
Used Kotlin apply for cleaner initialization of billingClient. Introduced context ?: return for null-safety with context. Merged repetitive code into the updateConnectionStatus method to avoid duplication. Improved the handling of the alreadyFinished flag to ensure it is only set once and at the appropriate time. Streamlined the error and success handling for clarity. -
Migrate android billingClient to 6.0.1
5.5.0 #
-
Erroneous duplicate item (#441) - Remove extra
introductoryPricePaymentModeIOS -
Fixed consumable products reading on Android (#439)
-
chore(deps): migrate internal packages to recent
http: ^1.1.0 meta: ^1.10.0 platform: ^3.1.3 -
chore: migrate example project to recent flutter version, 3.16.0-0.3.pre
5.4.2 #
What's Changed #
- Update actions/stale action to v8 by @renovate in https://github.com/hyochan/flutter_inapp_purchase/pull/414
- Fix - wrong casting by @BrunoFSimon in https://github.com/hyochan/flutter_inapp_purchase/pull/427
- Fixed consumable product purchase on Android by @33-Elephants in https://github.com/hyochan/flutter_inapp_purchase/pull/420
New Contributors #
- @BrunoFSimon made their first contribution in https://github.com/hyochan/flutter_inapp_purchase/pull/427
- @33-Elephants made their first contribution in https://github.com/hyochan/flutter_inapp_purchase/pull/420
Full Changelog: https://github.com/hyochan/flutter_inapp_purchase/compare/5.4.1...5.4.2
5.4.1 #
- Fixed concurrency issue on iOS. by @OctavianLfrd in https://github.com/hyochan/flutter_inapp_purchase/pull/413
5.4.0 #
- Fixed wrong casting in checkSubscribed method by @kleeb in https://github.com/hyochan/flutter_inapp_purchase/pull/368
- Upgrade to billing 5.1 (reverse compatible) by @SamBergeron in https://github.com/hyochan/flutter_inapp_purchase/pull/392
5.3.0 #
What's Changed #
- Refactor java to kotlin, add showInAppMessageAndroid by @offline-first in https://github.com/hyochan/flutter_inapp_purchase/pull/365
New Contributors #
- @offline-first made their first contribution in https://github.com/hyochan/flutter_inapp_purchase/pull/365
Full Changelog: https://github.com/hyochan/flutter_inapp_purchase/compare/5.2.0...5.3.0
5.2.0 #
Bugfix #356
5.1.1 #
Run on UiThread and few others (#328)
-
Related #272
-
The main difference is a new MethodResultWrapper class that wraps both the result and the channel. onMethodCall() now immediately saves this wrapped result-channel to a field and only uses that later to set both the result and to send back info on the channel. I did this in both Google and Amazon but I can't test the Amazon one.
-
Included the plugin registration differences.
-
Midified suggested in one of the issues that initConnection, endConnection and consumeAllItems shouldn't be accessors. This is very much so, property accessors are not supposed to do work and have side effects, just return a value. Now three new functions are suggested and marked the old ones deprecated.
Fourth, EnumUtil.getValueString() is not really necessary, we have describeEnum() in the Flutter engine just for this purpose.
5.1.0 #
Upgrade android billing client to 4.0.0 (#326)
Remove orderId in Purchase
- This is duplicate of
transactionId.
Support for Amazon devices with Google Play sideloaded (#313)
5.0.4 #
- Add iOS promo codes (#325)
- Use http client in validateReceiptIos (#322)
- Amazon
getPricedirectly withoiut formatting (#316)
5.0.2 #
- Replaced obfuscatedAccountIdAndroid with obfuscatedAccountId in request purchase method #299
4.0.1 #
platformdep version>=2.0.0 <4.0.0
3.0.0 #
- Upgrade android billing client to
2.1.0from3.0.0. - Removed
deveoperIdandaccountIdwhen requestingpurchaseorsubscriptioninandroid. - Added
obfuscatedAccountIdAndroidandobfuscatedProfileIdAndroidwhen requestingpurchaseorsubscriptioninandroid. - Removed
developerPayloadinandroid. - Added
purchaseTokenAndroidas an optional parameter torequestPurchaseandrequestPurchase.
2.3.1 #
Republishing since sourcode seems not merged correctly.
2.3.0 #
2.2.0 #
- Implement
endConnectionmethod to declaratively finish observer in iOS. - Remove
addTransactionObserverin IAPPromotionObserver.m for dup observer problems. - Automatically startPromotionObserver in
initConnectionfor iOS.
2.1.1 #
- Renamed
finishTransactionIOSargumentpurchaseTokentotransactionId.
2.1.0 #
finishTransactionparameter changes topurchasedItemfrompurchaseToken.- Update android billing client to
2.1.0from2.0.3.
2.0.3 #
2.0.0+16 #
- Resolve #106 by not sending
result.errorto the listener. Created use_conectionSubscription.
2.0.0+14 #
- Pass android exception to flutter side.
2.0.0+13 #
- Android receipt validation api upgrade to
v3.
2.0.0+6 #
- Send
purchase-errorwith purchases returns null.
2.0.0+5 #
- Renamed invoked parameters non-platform specific.
2.0.0+4 #
- Add
deveoperIdandaccountIdwhen requestingpurchaseorsubscriptioninandroid. Find out more inrequestPurchaseandrequestPurchase.
2.0.0+2 #
- Seperate long
examplecode toexamplereadme.
2.0.0+1 #
- Properly set return type
PurchaseResultof when finishing transaction.
2.0.0 π #
- Removed deprecated note in the
readme. - Make the previous tests work in
travis. - Documentation on
readmefor breaking features. - Abstracts
finishTransaction.acknowledgePurchaseAndroid,consumePurchaseAndroid,finishTransactionIOS.
[Android]
- Completely remove prepare.
- Upgrade billingclient to 2.0.3 which is currently recent in Sep 15 2019.
- Remove [IInAppBillingService] binding since billingClient has its own functionalities.
- Add [DoobooUtils] and add
getBillingResponseDatathat visualizes erorr codes better. buyProductno more return asyn result. It rather relies on thepurchaseUpdatedListener.- Add feature method
acknowledgePurchaseAndroid- Implement
acknowledgePurchaseAndroid. - Renamed
consumePurchasetoconsumePurchaseAndroidin dart side. - Update test codes.
- Implement
- Renamed methods
buyProducttorequestPurchase.buySubscriptiontorequestPurchase.
[iOS]
- Implment features in new releases.
- enforce to
finishTransactionafter purchases. - Work with
purchaseUpdatedandpurchaseErrorlistener as in android. - Feature set from
react-native-iap v3. - Should call finish transaction in every purchase request.
- Add
IAPPromotionObservercocoa touch file - Convert dic to json string before invoking purchase-updated
- Add
getPromotedProductIOSandrequestPromotedProductIOSmethods - Implement clearTransaction for ios
- Include
purchasePromotedstream that listens toiap-promoted-product.
- enforce to
1.0.0 #
- Add
DEPRECATIONnote. Please use in_app_purchase.
0.9.+ #
-
Breaking change. Migrate from the deprecated original Android Support Library to AndroidX. This shouldn't result in any functional changes, but it requires any Android apps using this plugin to also migrate to Android X if they're using the original support library. Android's Migrating to Android X Guide.
-
Improved getPurchaseHistory's speed 44% faster #68.
0.8.+ #
-
Fixed receipt validation param for
android. -
Updated
httppackage. -
Implemented new method
getAppStoreInitiatedProducts.- Handling of iOS method
paymentQueue:shouldAddStorePayment:forProduct: - Has no effect on Android.
- Handling of iOS method
-
Fixed issue with method
buyProductWithoutFinishTransactionfor iOS, was not getting the productId. -
Fixed issue with
toStringmethod of classIapItem, was printing incorrect values. -
Fixes for #44. Unsafe getting
originalJsonwhen restoring item andAndroid. -
Use dictionaryWithObjectsAndKeys in NSDictionary to fetch product values. This will prevent from NSInvalidArgumentException in ios which rarely occurs.
-
Fixed wrong npe in
androidwhengetAvailablePurchases. -
Only parse
orderIdwhen exists inAndroidto prevent crashing. -
Add additional success purchase listener in
iOS. Related #54
0.7.1 #
- Implemented receiptValidation for both android and ios.
- In Android, you need own backend to get your
accessToken.
- In Android, you need own backend to get your
0.7.0 #
- Addition of Amazon In-App Purchases.
0.6.9 #
- Prevent nil element exception when getting products.
0.6.8 #
- Prevent nil exception in ios when fetching products.
0.6.7 #
- Fix broken images on pub.
0.6.6 #
- Added missing introductory fields in ios.
0.6.5 #
- convert dynamic objects to PurchasedItems.
- Fix return type for getAvailablePurchases().
- Fix ios null value if optional operator.
0.6.3 #
- Update readme.
0.6.2 #
- Fixed failing when there is no introductory price in ios.
0.6.1 #
- Fixed
checkSubscribedthat can interrupt billing lifecycle.
0.6.0 #
- Major code refactoring by lukepighetti. Unify PlatformException, cleanup new, DateTime instead of string.
0.5.9 #
- Fix getSubscription json encoding problem in
ios.
0.5.8 #
- Avoid crashing on android caused by IllegalStateException.
0.5.7 #
- Avoid possible memory leak in android by deleting static declaration of activity and context.
0.5.6 #
- Few types fixed.
0.5.4 #
- Fixed error parsing IapItem.
0.5.3 #
- Fixed error parsing purchaseHistory.
0.5.2 #
- Fix crashing on error.
0.5.1 #
- Give better error message on ios.
0.5.0 #
- Code migration.
- Support subscription period.
- There was parameter renaming in
0.5.0to identify different parameters sent from the device. Please check the readme.
0.4.3 #
- Fixed subscription return types.
0.4.0 #
- Well formatted code.
0.3.3 #
- Code formatted
- Updated missing data types
0.3.1 #
- Upgraded readme for ease of usage.
- Enabled strong mode.
0.3.0 #
- Moved dynamic return type away and instead give
PurchasedItem.
0.2.2 #
- Migrated packages from FlutterInApp to FlutterInAppPurchase because pub won't get it.
0.1.0 #
- Initial release of beta
- Moved code from react-native-iap