flutter_inapp_purchase 6.5.3
flutter_inapp_purchase: ^6.5.3 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 #
6.5.3 #
Fixed #
- iOS: Ensure
product.id
is 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.
Changed #
- Products API:
id
is the primary identifier forProduct
/ProductSubscription
.productId
is kept for backward compatibility only (see Deprecated). fetchProducts()
: Adds support fortype: 'all'
.- iOS: passes
'all'
through the nativefetchProducts
call - Android: fetches
inapp
andsubs
, then merges results
- iOS: passes
- Parser now emits
ProductSubscription
(alias ofSubscription
) for subscriptions internally.
Deprecated #
productId
onProductCommon
: Useid
instead (will be removed in 6.6.0).Subscription
type name: UseProductSubscription
instead (will be removed in 6.6.0). The alias keeps existing code working.- Methods (removal in 6.6.0):
requestProducts()
→ 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
buyProduct
torequestPurchase
and 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
,requestPurchaseOnPromotedProductIOS
helpers.
Removed #
- iOS: remove no‑op
clearTransactionCache
channel 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_ERROR
with 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
PurchaseOptions
parameter togetAvailablePurchases()
for OpenIAP compliance - Use
onlyIncludeActiveItemsIOS: false
to include expired subscriptions
- Added
Deprecated #
getPurchaseHistories()
→ UsegetAvailablePurchases()
with options (removed in 6.6.0)
6.4.5 #
Changed #
- BREAKING: Updated
getAvailablePurchases()
to supportPurchaseOptions
parameter (OpenIAP compliant)- Now accepts optional
PurchaseOptions
parameter for platform-specific configuration - iOS: Added
onlyIncludeActiveItemsIOS
option (default: true) to control whether expired subscriptions are included
- Now accepts optional
Added #
- Added
PurchaseOptions
class 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.all
instead 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
expirationDateIOS
andrevocationDateIOS
to 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
subscriptionOfferDetailsAndroid
field returning null (Fixes #534)- Added proper parsing for
subscriptionOfferDetailsAndroid
in subscription products - Removed parsing of deprecated
subscriptionOfferDetails
field - 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
ActiveSubscription
type 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
willExpireSoon
anddaysUntilExpirationIOS
- Automatically calculates expiration status for iOS subscriptions
- Provides cleaner API with subscription-focused properties
6.4.0 #
Breaking Changes #
-
Simplified requestProducts API: The
requestProducts
method now accepts direct parameters instead of a wrapper object (Fixes #527)// Before (6.3.x) final products = await iap.requestProducts( RequestProductsParams( skus: ['product_id'], type: PurchaseType.inapp, ), ); // After (6.4.0) final products = await iap.requestProducts( skus: ['product_id'], type: PurchaseType.inapp, // Optional, defaults to PurchaseType.inapp );
- Removed
RequestProductsParams
class - 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
AndroidPurchaseState
enum 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:
subscriptionOfferDetails
field (usesubscriptionOfferDetailsAndroid
instead)prorationMode
field (usereplacementModeAndroid
instead)AndroidProrationMode
typedef (useAndroidReplacementMode
instead)
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
nameAndroid
andoneTimePurchaseOfferDetailsAndroid
fields - Fixed Purchase
dataAndroid
field 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.isAndroid
and_platform.isIOS
conditions 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
transactionStateIOS
is 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
kDebugMode
flag
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.purchased
test 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
,subscription
info, 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
requestProducts
withPurchaseType.subs
returned empty arrays- iOS now correctly uses
getItems
method 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
id
field toPurchase
class for standardized transaction identification - Unified Purchase Token: Added
purchaseToken
field 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:
finishTransaction
now acceptsPurchase
objects 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
transactionId
andid
fields 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
signatureAndroid
field in purchase conversion- Added
signatureAndroid
and 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
subscriptionPeriodNumberIOS
was 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
useIap
hook andIapProvider
- useFlutterInappPurchase.instance
directly - Removed
flutter_hooks
dependency - 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
→eUnknown
(lowerCamelCase) - 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
getPrice
directly withoiut formatting (#316)
5.0.2 #
- Replaced obfuscatedAccountIdAndroid with obfuscatedAccountId in request purchase method #299
4.0.1 #
platform
dep version>=2.0.0 <4.0.0
3.0.0 #
- Upgrade android billing client to
2.1.0
from3.0.0
. - Removed
deveoperId
andaccountId
when requestingpurchase
orsubscription
inandroid
. - Added
obfuscatedAccountIdAndroid
andobfuscatedProfileIdAndroid
when requestingpurchase
orsubscription
inandroid
. - Removed
developerPayload
inandroid
. - Added
purchaseTokenAndroid
as an optional parameter torequestPurchase
andrequestSubscription
.
2.3.1 #
Republishing since sourcode seems not merged correctly.
2.3.0 #
2.2.0 #
- Implement
endConnection
method to declaratively finish observer in iOS. - Remove
addTransactionObserver
in IAPPromotionObserver.m for dup observer problems. - Automatically startPromotionObserver in
initConnection
for iOS.
2.1.1 #
- Renamed
finishTransactionIOS
argumentpurchaseToken
totransactionId
.
2.1.0 #
finishTransaction
parameter changes topurchasedItem
frompurchaseToken
.- Update android billing client to
2.1.0
from2.0.3
.
2.0.3 #
2.0.0+16 #
- Resolve #106 by not sending
result.error
to 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-error
with purchases returns null.
2.0.0+5 #
- Renamed invoked parameters non-platform specific.
2.0.0+4 #
- Add
deveoperId
andaccountId
when requestingpurchase
orsubscription
inandroid
. Find out more inrequestPurchase
andrequestSubscription
.
2.0.0+2 #
- Seperate long
example
code toexample
readme.
2.0.0+1 #
- Properly set return type
PurchaseResult
of when finishing transaction.
2.0.0 🎉 #
- Removed deprecated note in the
readme
. - Make the previous tests work in
travis
. - Documentation on
readme
for 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
getBillingResponseData
that visualizes erorr codes better. buyProduct
no more return asyn result. It rather relies on thepurchaseUpdatedListener
.- Add feature method
acknowledgePurchaseAndroid
- Implement
acknowledgePurchaseAndroid
. - Renamed
consumePurchase
toconsumePurchaseAndroid
in dart side. - Update test codes.
- Implement
- Renamed methods
buyProduct
torequestPurchase
.buySubscription
torequestSubscription
.
[iOS]
- Implment features in new releases.
- enforce to
finishTransaction
after purchases. - Work with
purchaseUpdated
andpurchaseError
listener as in android. - Feature set from
react-native-iap v3
. - Should call finish transaction in every purchase request.
- Add
IAPPromotionObserver
cocoa touch file - Convert dic to json string before invoking purchase-updated
- Add
getPromotedProductIOS
andrequestPromotedProductIOS
methods - Implement clearTransaction for ios
- Include
purchasePromoted
stream that listens toiap-promoted-product
.
- enforce to
1.0.0 #
- Add
DEPRECATION
note. 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
http
package. -
Implemented new method
getAppStoreInitiatedProducts
.- Handling of iOS method
paymentQueue:shouldAddStorePayment:forProduct:
- Has no effect on Android.
- Handling of iOS method
-
Fixed issue with method
buyProductWithoutFinishTransaction
for iOS, was not getting the productId. -
Fixed issue with
toString
method of classIapItem
, was printing incorrect values. -
Fixes for #44. Unsafe getting
originalJson
when 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
android
whengetAvailablePurchases
. -
Only parse
orderId
when exists inAndroid
to 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
checkSubscribed
that 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.0
to 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